Форум: "Начинающим";
Текущий архив: 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