Форум: "WinAPI";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Внизреакция иконки на мышь... Найти похожие ветки
← →
гном1 (2004-07-24 07:51) [0]Ув. Мастера, помогите!
Как сделать, чтобы мои иконка вTray реагировала на мышь.
Я поместил иконку в трай:
procedure TForm1.Button11Click(Sender: TObject);
var
no: TNotifyIconData;
Hicon1: HIcon;
begin
HIcon1:=ExtractIcon(Handle,s,0);
with no do
begin
cbSize:=Sizeof(TNotifyIconData);
Wnd:=Handle;
uID:=0;
UFlags:=NIF_MESSAGE+NIF_ICON+NIF_TIP;
SzTip:="Traybar Tip";
HIcon:=HIcon1;
uCallBackMessage:=WM_USER+0;
end;
Shell_NotifyIcon(NIM_ADD,@no);
end;
а как теперь сделать, чтобы она реагировала на мышь, например, чтобы при двойном щелчке по кнопке, запускала программку…
Нужен код, желательно с пояснением, please! Заранее спасибо!
← →
Konoko © (2004-07-24 10:46) [1]А не легче использовать уже готовый компонент ?
Вот типа такого?
http://mihandelphi.narod.ru/components/trayicon.zip
Али на АПИ пишешь?
← →
гном1 (2004-07-24 11:40) [2]to konoko
В том то и дело.
Мне нужно на API...
← →
Konoko © (2004-07-24 11:47) [3]> гном1
Что то типа этого ?
function WindowProc(Wnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
var
dcMem, DC: HDC;
bmpOld, bmp: HBITMAP;
Paint: TPaintStruct;
begin
Result := 0;
if Msg = UM_TRAYICON then
begin
case LParam of
WM_LBUTTONDBLCLK: begin
ShowWindow(Wnd, SW_SHOW);
OpenIcon(Wnd);
EnableMenuItem(ContextMenu, ID_MENUMINIMIZE, MF_ENABLED);
EnableMenuItem(ContextMenu, ID_MENURESTORE, MF_GRAYED);
Shell_NotifyIcon(NIM_DELETE, @nid);
end;
WM_RBUTTONDOWN: begin
GetCursorPos(pt);
TrackPopupMenuEx(ContextMenu, TPM_LEFTBUTTON,
pt.x, pt.y, Wnd, nil);
end;
end;
end else
case Msg of
WM_CREATE: begin
UM_TRAYICON := RegisterWindowMessage(PChar("-=[Password_Shower]=-"));
WindowRgn(Wnd);
nid.cbSize := SizeOf(nid);
nid.Wnd := Wnd;
nid.uID := 30348798;
nid.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
nid.uCallbackMessage := UM_TRAYICON;
nid.hIcon := LoadImage(hInstance, "MAINICON", IMAGE_ICON, 16, 16, 0);
nid.szTip := "PWS";
CreateContextMenu;
end;
WM_CONTEXTMENU: begin
TrackPopupMenuEx(ContextMenu, TPM_LEFTBUTTON,
Word(LParam), Word(LParam shr 16), WParam, nil);
end;
WM_COMMAND: begin
if Word(WParam shr 16) = 0 then
case Word(WParam) of
ID_MENUMINIMIZE: begin
CloseWindow(Wnd);
ShowWindow(Wnd, SW_HIDE);
EnableMenuItem(ContextMenu, ID_MENUMINIMIZE, MF_GRAYED);
EnableMenuItem(ContextMenu, ID_MENURESTORE, MF_ENABLED);
Shell_NotifyIcon(NIM_ADD, @nid);
end;
ID_MENURESTORE: begin
ShowWindow(Wnd, SW_SHOW);
OpenIcon(Wnd);
EnableMenuItem(ContextMenu, ID_MENUMINIMIZE, MF_ENABLED);
EnableMenuItem(ContextMenu, ID_MENURESTORE, MF_GRAYED);
Shell_NotifyIcon(NIM_DELETE, @nid);
end;
ID_MENUCOPY: begin
if (GetMenuState(ContextMenu, ID_MENUCOPY, MF_BYCOMMAND) and MF_CHECKED) = 0 then
CheckMenuItem(ContextMenu, ID_MENUCOPY, MF_BYCOMMAND or MF_CHECKED)
else
CheckMenuItem(ContextMenu, ID_MENUCOPY, MF_BYCOMMAND or MF_UNCHECKED)
end;
ID_MENUQUERY: begin
if (GetMenuState(ContextMenu, ID_MENUQUERY, MF_BYCOMMAND) and MF_CHECKED) = 0 then
CheckMenuItem(ContextMenu, ID_MENUQUERY, MF_BYCOMMAND or MF_CHECKED)
else
CheckMenuItem(ContextMenu, ID_MENUQUERY, MF_BYCOMMAND or MF_UNCHECKED)
end;
ID_MENUCLOSE: begin
if IsIconic(Wnd) then
Shell_NotifyIcon(NIM_DELETE, @nid);
DestroyMenu(ContextMenu);
SendMessage(Wnd, WM_CLOSE, 0, 0);
end;
end;
end;
WM_PAINT: begin
DC := BeginPaint(Wnd, Paint);
bmp := LoadBitmap(hInstance, MakeIntResource(TargetID[Target]));
dcMem := CreateCompatibleDC(DC);
bmpOld := SelectObject(dcMem, bmp);
BitBlt(DC, 0, 0, 16, 16, dcMem, 0, 0, SRCCOPY);
SelectObject(dcMem, bmpOld);
DeleteDC(dcMem);
EndPaint(Wnd, Paint);
end;
WM_LBUTTONDOWN:
case WParam of
MK_LBUTTON: begin
Target := tgUnknown;
InvalidateRect(Wnd, nil, False);
SetCursor(LoadCursor(hInstance, MakeIntResource(TargetID[Target])));
SetCapture(Wnd);
end;
MK_LBUTTON or
MK_CONTROL:
SendMessage(Wnd, WM_NCLBUTTONDOWN, HTCAPTION, LParam);
end;
WM_MOUSEMOVE: begin
if WParam = MK_LBUTTON then
begin
GetCursorPos(pt);
CurTgWnd := WindowFromPoint(pt);
if CurTgWnd <> PrvTgWnd then
begin
PrvTgWnd := CurTgWnd;
RecognizeTarget(CurTgWnd);
SetCursor(LoadCursor(hInstance, MakeIntResource(TargetID[Target])));
end;
end;
end;
WM_LBUTTONUP: begin
HandlingTarget();
Target := tgNoTarget;
InvalidateRect(Wnd, nil, False);
ReleaseCapture;
end;
WM_DESTROY:
begin
unhookwindowshookex(h);
DestroyMenu(ContextMenu);
PostQuitMessage(0);
Exit;
end;
else
Result := DefWindowProc(Wnd, Msg, WParam, LParam);
end;
end;
← →
parovoZZ © (2004-07-24 17:17) [4]Кокретно по вопросу:
const
WM_MYTRAYMSG = WM_USER + 100; //Сообщения от иконки
..........
..........
..........
case msg of
WM_MYTRAYMSG : case lParam of
WM_RBUTTONDOWN : PopupMenu (Handle);//Правая кнопка мышки
WM_LBUTTONDOWN : DialogCreate;//Левая кнопка
end;
← →
гном1 (2004-07-25 07:46) [5]Спасибо за ответы. Буду экспериментировать...
← →
grom (2004-07-25 18:24) [6]TrayIcon
http://denisov.i2x2.ru/delphi/units.htm
← →
parovoZZ © (2004-07-25 20:20) [7]Да не за что.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c