Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.02.15;
Скачать: CL | DM;

Вниз

Падсказка над иконкой в трее   Найти похожие ветки 

 
demon ©   (2009-01-03 17:11) [0]

Как сделать длинную всплывающую подсказку над иконкой в трее?
Если использовать NotifyIconData_50, то длинна ограничиваеться 63 символами


 
DVM ©   (2009-01-03 17:16) [1]


> demon ©

Сделай свое окно там как делают антивирусы многие. И цитируй там хоть Войну и Мир с картинками.


 
demon ©   (2009-01-03 17:20) [2]

А может есть какие наработки у кого, примеры кода, а тотьма вопросов возникает


 
KilkennyCat ©   (2009-01-03 17:23) [3]

ToolTip + MSDN и вопросов не будет.


 
blackman ©   (2009-01-03 21:23) [4]

Хинт любой формы
http://articles.org.ru/cfaq/index.php?qid=511
Всплывающая подсказка
http://articles.org.ru/lessond/les19.php


 
demon ©   (2009-01-04 00:26) [5]

А как получить цвет который установлен для фона всех хинтов в системе?


 
Anatoly Podgoretsky ©   (2009-01-04 00:34) [6]

Проверь clInfoBk работает ли на ХР и выше


 
Johnmen ©   (2009-01-04 00:43) [7]


>  Падсказка над иконкой в трее

Вот просто интересно, слово "Падсказка" от слова "падла"?


 
demon ©   (2009-01-04 00:43) [8]

Работает, но у меня прога на API, незнаю как это прикрутить...


 
Johnmen ©   (2009-01-04 00:45) [9]


> но у меня прога на API

Да никто и не сомневается, что ты реальный пацан, пишущий реальные проги. Не боись...


 
demon ©   (2009-01-04 00:52) [10]

Разобрался GetSysColor(COLOR_INFOBK)

Johnmen, спасибо тебе за помощь


 
Johnmen ©   (2009-01-04 01:08) [11]


> demon ©   (04.01.09 00:52) [10]
> Johnmen, спасибо тебе за помощь

Пожалуйста. Обращайтесь ещё.


 
demon ©   (2009-01-04 23:37) [12]

Вот как это реализовал, все работает как задумано, покритикуйте код:

program hint;

uses
 Windows,  Messages;

const
 WndClass   = "TWinApiWnd";
 WndCaption = "Работа с Hint (Нажми и тащи)";
 hintClass  = "HintClass";

var
 Wc  : TWndClassEx;
 Wnd : HWND;
 Msg : TMsg;
 BRUSH: HBRUSH;
 flag: boolean = false;
 HinthWnd: Hwnd;
 BRUSH_HINT_BK : HBRUSH;

procedure ShowHint(x, y: integer; Strings: array of string);
const
 MaxCount = 9;
var
 Font:  hFont;
 rect1: Trect;
 wrkPenNew: hPen;
 dc: hdc;
 pt: TSize;
 p : pChar;
 count, MaxLength, i: integer;
begin
 MaxLength:=0;

 // получаем количество строк
 for i:=0 to MaxCount do
   if Strings[i]="" then break;
 count:= i;

 dc := GetDc(HinthWnd);
 Font := CreateFont(14, 0, 0, 0, 0, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH, "MS Sans Serif");
 SelectObject(DC, Font);

 // Найдем самую длинную строку
 for i:=0 to MaxCount do
 begin
   GetTextExtentPoint32(dc, Pchar(Strings[i]), Length(Strings[i]), pt);
   if pt.cx > MaxLength then MaxLength := pt.cx;
 end;

 SetWindowPos (HinthWnd, 0, x,y, MaxLength + 6, 14*count+4, SWP_NOACTIVATE + SWP_SHOWWINDOW) ;
 ShowWindow(HinthWnd, SW_SHOWNORMAL);
 GetClientRect(HinthWnd, rect1);

 // рамка
 wrkPenNew:=CreatePen(PS_SOLID,1, $000000);
 SelectObject(DC,wrkPenNew);
 LineTo(DC, rect1.Right-1,0);
 LineTo(DC, rect1.Right-1,  rect1.Bottom-1);
 LineTo(DC, 0, rect1.Bottom-1);
 LineTo(DC, 0, 0);
 DeleteObject(wrkPenNew);

 SetBkMode(DC, Transparent);
 SetTextColor(DC, $000000);

 for i:=0 to Count-1 do
   TextOut(DC, 3, 2+i*14, PChar(Strings[i]), Length(Strings[i]) );

 ReleaseDC(HinthWnd, DC);
 DeleteObject(Font);
end;

function WindowProc( Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall;
var
 p: tpoint;
 Strings : array [0..9] of string;
begin
  case Msg of

     WM_CLOSE:
     begin
       result:=0;
       halt;
     end;

     WM_LBUTTONDOWN  :
     begin
      flag:=true;
      result:=0;
     end;

     WM_LBUTTONUP :
     begin
       ShowWindow(HinthWnd, SW_HIDE);
       flag:=false;
       result:=0;
     end;

     WM_MOUSEMOVE:
     begin
       if flag then
       begin
         GetCursorPos(p);
         Strings[0]:="Test hint :)...";
         Strings[1]:="еще одна страка";
         Strings[2]:="А это третья, самая длинная строка.";
         ShowHint(p.X + 3, p.y + 34, Strings );
       end;
       result:=0;
     end;
     else
       Result := DefWindowProc( Wnd, Msg, wParam, lParam );
  end;
end;

begin
 BRUSH  := CreateSolidBrush( $000000 );
 BRUSH_HINT_BK := CreateSolidBrush( GetSysColor(COLOR_INFOBK) );

 with Wc do
 begin
   cbSize := SizeOf( Wc );
   style := CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS or CS_DROPSHADOW;
   lpfnWndProc := @WindowProc;
   cbClsExtra := 0;
   cbWndExtra := 0;
   hInstance := hInstance;
   hIcon := LoadIcon( 0, IDI_APPLICATION );
   hCursor := LoadCursor( 0, IDC_ARROW );
   hbrBackground := BRUSH;
   lpszMenuName := nil;
   lpszClassName := WndClass;
  end;

 RegisterClassEx( Wc );

 Wnd := CreateWindowEx(
   0, WndClass,
   WndCaption,
   WS_OVERLAPPEDWINDOW or WS_CLIPCHILDREN,
   400, 200, 300, 300,
   0, 0, hInstance, nil );

 // создаем окно хинта
 with Wc do
 begin
   cbSize := SizeOf( Wc );
   style := 0;
   lpfnWndProc := @DefWindowProc;
   cbClsExtra := 0;
   cbWndExtra := 0;
   hInstance := hInstance;
   //      hIcon := LoadIcon( 0, IDI_APPLICATION );
   //      hCursor := LoadCursor( 0, IDC_ARROW );
   hbrBackground := BRUSH_HINT_BK;
   lpszMenuName := nil;
   lpszClassName := HintClass;
 end;

 RegisterClassEx( Wc );

 HinthWnd := CreateWindowEx(
   WS_EX_TOPMOST or
   WS_EX_TOOLWINDOW,
   HintClass,
   "",
   WS_POPUP,
   400, 200, 300, 15,
   0, 0,
   hInstance,
   nil );

 ShowWindow( Wnd, SW_SHOWNORMAL );

 while GetMessage( Msg, 0, 0, 0 ) do
 begin
   TranslateMessage( Msg );
   DispatchMessage( Msg );
 end;
 Halt( Msg.wParam );
end.



Страницы: 1 вся ветка

Текущий архив: 2009.02.15;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
3-1214894716
i
2008-07-01 10:45
2009.02.15
асинхронное выполнение ADOStoredProc


15-1229631516
Newss
2008-12-18 23:18
2009.02.15
Задача компоновки


15-1229374891
stas
2008-12-16 00:01
2009.02.15
Иконки из IE


2-1230541525
Nobody
2008-12-29 12:05
2009.02.15
Как сделать переход по известному адресу


15-1229369085
Городской Шаман
2008-12-15 22:24
2009.02.15
В каком году Windows будет полностью переписана на .NET