![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
AllocateHWND [D6, WinXP]
Grief © (2005-02-11 16:17:00)Уважаемые мастера, мне по зарез надо сделать сворачивание в трей в API Delphi, для этого необходимо вызвать AllocateHWND и DeallocateHWND, чем их можно заменить? И, если не сложно, покажите, как свернуть прогу в трей без юнита форм. Заранее благодарен, Grief
Grief (2005-02-13 22:17:00) [1]Я уже понял свои ошибки, всем спасибо!!!!
grom (2005-02-13 14:54:00) [2]program cdOpenER;
uses Windows, Messages, ShellApi, MMSystem;
type tip= array[0..5]of char;
var wc : TWndClassEx;
MainWnd, mmenu, pmenuo ,pmenuc ,pmenus : HWND;
Mesg : TMsg;
Buf, curdir : array[0..500]of char;
i, j ,x ,y : Integer;
poin : tpoint;
str1: tip;
icone : TNOTIFYICONDATA;
function creatmen : boolean;
begin
mmenu:=createpopupmenu;
pmenuo:=createmenu;
pmenuc:=createmenu;
pmenus:=createmenu;
appendmenu(mmenu,mf_Popup,pmenuo,'open');
appendmenu(mmenu,mf_Popup,pmenuc,'close');
insertmenu(pmenus,word(-1),mf_ByPosition,Wm_user+21,'about');
insertmenu(pmenus,word(-1),mf_ByPosition,Wm_user+24,'help');
insertmenu(pmenus,word(-1),mf_ByPosition,Wm_user+23,'refresh');
insertmenu(pmenus,word(-1),mf_ByPosition,Wm_user+22,'exit');
appendmenu(mmenu,mf_Popup,pmenus,'options');
end;
function WindowProc(wnd:HWND; Msg : Cardinal; Wparam:Wparam; Lparam:Lparam):Lresult;
stdcall;
Begin
case msg of
wm_user+31 :
case lparam of
WM_RBUTTONDOWN :
begin
getcursorpos(poin);
x:=poin.x;
y:=poin.y;
SetForegroundWindow(Wnd);
TrackPopupMenuEx(mMenu,0,x, y,Wnd, Nil);
end;
end;
wm_destroy :
Begin
Shell_NotifyIcon(nim_delete,@icone);
postquitmessage(0);
exit;
Result:=0;
End;
wm_Command :
case wparam of
//......opencd........
//......closecd.......
//...other..command...
wm_user+21 : messagebox(wnd,'(c) mNtek 2004','about',mb_ok);
wm_user+22 :
begin
Shell_NotifyIcon(nim_delete,@icone);
postquitmessage(0);
end;
wm_user+23 :
begin
creatmen;
end;
wm_user+24 : if
shellexecute(wnd,'open','help.txt',nil,curdir,SW_SHOW)=ERROR_FILE_NOT_FOUND
then messagebox(wnd,'couldn''t find help.txt','error',mb_ok);
end;
else Result:=DefWindowProc(wnd,msg,wparam,lparam);
end;
End;
var xPos,yPos,nWidth,nHeight : Integer;
begin
if findwindow('CdOpenER','CdOpenER')<>0 then exit;
getcurrentdirectory(sizeof(curdir),curdir);
with wc do begin
cbSize:=sizeof(wc);
style:=cs_hredraw or cs_vredraw;
lpfnWndProc:=@WindowProc;
cbClsExtra:=0;
cbWndExtra:=0;
hInstance:=HInstance;
hIcon:=ExtractIcon(hinstance,'cdOpenER.exe',0);
hCursor:=LoadCursor(0,idc_arrow);
hbrBackground:=COLOR_BTNFACE+1;
lpszMenuName:=nil;
lpszClassName:='CdOpenER';
end;
creatmen;
RegisterClassEx(wc);
xPos:=0;
yPos:=0;
nWidth:=200;
nHeight:=50;
MainWnd:=CreateWindowEx(0,'CdOpenER','CdOpenER',
WS_OVERLAPPED or WS_SYSMENU,xPos,yPos,nWidth,nHeight,0,0,
Hinstance,nil);
with Icone do begin
cbSize := sizeof(TNOTIFYICONDATA);
wnd := mainwnd;
uID := wm_user+72;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
hIcon := LoadIcon(0, IDI_EXCLAMATION);
uCallbackMessage := WM_User+31;
sztip:='CdOpenER';
end;
Shell_NotifyIcon(nim_add,@icone);
ShowWindow(MainWnd,sw_hide);
While GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end.
Kerk (2005-02-12 23:12:00) [3]Для добавления иконки в трей сабж вызывать не нужно. Код покажи.
Grief (2005-02-12 23:09:00) [4]см выше, топ как добавить значок в трей... я там весь глюк описал...
а вкратце - иконка создается в трее, а при наведении курсора исчезает...
Kerk (2005-02-12 22:17:00) [5]Grief © (12.02.05 22:13) [3]
вот хендл созданного на API окна и указывай
Grief (2005-02-12 22:13:00) [6]я несколько понял... но когда надо указать handle notifyIconData возникает вопрос, а что же собственно указывать?
Kerk (2005-02-12 09:43:00) [7]Создавай окно на API .. в чем проблема?
Grief (2005-02-12 09:01:00) [8]Ну помогите, пожалуста, мне очень нужно....