Здравствуйте. Объясните пожалуйста как работать с данным компонентом. Никак не пойму как сделать чтобы при сворачивании в панели задач вкладка Моего приложения не отображалась...думаю что надо перехватывать сворачивание формы однако надеюсь есть более изящный способ? ПС: наверно от Моих миллионных запросов гугл вскоре засунет Меня в бан
у компонента есть свойство MinimizeToTray. если True, то сворачивается в трей, если False, то в панель задач
Я его смотрел, там при нажатии на кнопку исчезает вкладка с панели задач, Я тоже могу вставить кнопку и уже обрабатывая нажатие кнопки делать чтобы вкладка с панели задач исчезла. Но ведь Мне нужно чтобы при сворачивании..получается нужно перехватывать сворачивание и больше никак?
У формы есть свойство ShowTaskBar в обработчик "Сворачивания" всунь False для этого свойства (Действительно для C++.net VS2008) P.S. только заметил что делфя, но пусть будет =)
вот этот самый обработчик сворачивания Я никак и не могу найти! Мне нужно чтобы при сворачивании исчезало,однако как обрабатывать нажатие на кнопку сворачивания хз, если только перехватывать но это муторно. Может у Меня компонент глюк, кто скажет откуда скачать cooltrayicon для delphi 2009???
Попробуй: CoolTrayIcon Я ставил CoolTrayIcon_D140.dpk для D2010 (попробуй его или CoolTrayIcon_D120.dpk)
Знач так (опять действительно для С++) В Экшене формы Resize ставим такой код Code: if(this->WindowState == FormWindowState::Minimized) { this->ShowInTaskbar = FALSE; } У мну все работает
Нашел такое для Delphi: Как среагировать на минимизацию формы перед тем как произойдет изменение? при сворачивании - пищит динамик Code: type TForm1 = class(TForm) private {Private declarations} procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND; public {Public declarations} end; procedure TForm1.WMSysCommand; begin if (Msg.CmdType = SC_MINIMIZE) then MessageBeep(0) else inherited; end;
Code: procedure TForm1.WMSysCommand; begin if (Msg.CmdType = SC_MINIMIZE) then begin Application.CreateHandle; ShowWindow(Application.Handle, SW_HIDE); Application.ShowMainForm := FALSE; end else inherited; end; по идее должно скрывать иконку с трея, а все равно нифига! Может есть еще какой нить хороший компонент для работы с треем?
имхо - бред - для подобной мелочи юзать какие-то компоненты, есть прекрасная функция в ShellApi - называется Shell_NotifyIcon Пример приложения, сворачивающегося в трей: Code: unit Unit1; interface uses Windows,Messages,SysUtils,Forms,[I]ShellApi[/I]; const [I]WM_ICO_0D[/I]=WM_USER+13; [I]ticID[/I]=12345; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormDestroy(Sender: TObject); private public //месага отсылаемая окну procedure wmIco(var msg:TMessage);message WM_ICO_0D; end; var Form1:TForm1; implementation //процедура добавления иконки в трэй (разобраться несложно) procedure trayAdd(win:tHandle;id:cardinal;ico:hIcon; msg:cardinal;tip:string);var nid:TNotifyIconData; begin fillChar(nid,sizeOf(tNotifyIconData),0);with nid do begin cbSize:=sizeOf(tNotifyIconData);wnd:=win;uID:=id; uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP; uCallbackMessage:=msg;hIcon:=ico;if length(tip)>63 then setLength(tip,63);strPCopy(szTip,tip);end; Shell_NotifyIcon(NIM_ADD,@nid);end; //процедура удаления иконки procedure trayDel(win:tHandle;n:Integer);var nid:tNotifyIconData; begin with nid do begin cbSize:=sizeOf(tNotifyIconData); wnd:=win;uID:=n;end;Shell_NotifyIcon(NIM_DELETE,@nid);end; {$R *.dfm} procedure TForm1.wmIco(var msg:TMessage);begin //если кликнули по иконке левой или правой кнопкой мыши if(msg.lParam=$0202)or(msg.lParam=$0205)then begin //"переключаем" видимость окна if isWindowVisible(Form1.Handle)then showWindow(Form1.Handle,sw_hide) else showWindow(Form1.Handle,sw_show); end;end; procedure TForm1.FormCreate(Sender: TObject);begin //добавляем иконку при создании формы trayAdd(Handle,ticID,application.Icon.Handle,wm_ico_0d,application.Title);end; procedure TForm1.FormActivate(Sender: TObject);begin //убираем окно проги с панели приложений ShowWindow(application.Handle,sw_hide);end; procedure TForm1.FormDestroy(Sender: TObject);begin //удаляем иконку при уничтожении формы trayDel(Form1.Handle,ticid);end; end.
проблему решил так: Code: procedure TForm1.FormCreate(Sender: TObject); var ExtendedStyle:dword; w:hwnd; begin ExtendedStyle:=GetWindowLong(application.Handle, GWL_EXSTYLE); SetWindowLong(application.Handle, GWL_EXSTYLE,ExtendedStyle or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); with Application do begin ShowWindow(Handle, SW_HIDE); SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW); end; SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW); end; теперь иконки нет на панели задач, Я счастлив Спасибо всем кто пытался помочь