Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.006 c
2-1231144302
zzz
2009-01-05 11:31
2009.02.15
SysMenu


15-1229514723
DeeNamid
2008-12-17 14:52
2009.02.15
Антивирус определяет программу как троян


15-1229497529
nnov
2008-12-17 10:05
2009.02.15
icq 5.1


15-1229590921
Calligraff
2008-12-18 12:02
2009.02.15
Непонятный глюк в Delphi


2-1231239884
Alex_00h
2009-01-06 14:04
2009.02.15
Значения группе элементов в цикле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский