CoolTrayIcon

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by SultanOFF, 1 Dec 2009.

  1. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    Здравствуйте. Объясните пожалуйста как работать с данным компонентом. Никак не пойму как сделать чтобы при сворачивании в панели задач вкладка Моего приложения не отображалась...думаю что надо перехватывать сворачивание формы однако надеюсь есть более изящный способ?


    ПС: наверно от Моих миллионных запросов гугл вскоре засунет Меня в бан :(
     
  2. whexp

    whexp Member

    Joined:
    30 Nov 2009
    Messages:
    88
    Likes Received:
    29
    Reputations:
    5
    http://expert.delphi.int.ru/question/2419/ Посмотри в коментах.
     
  3. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    так ведь там работа с trayicon, а Мне нужно cooltrayicon..либо Я там не нашел :(
     
  4. ZdezBilYa

    ZdezBilYa Elder - Старейшина

    Joined:
    29 Aug 2008
    Messages:
    198
    Likes Received:
    75
    Reputations:
    19
    у компонента есть свойство MinimizeToTray. если True, то сворачивается в трей, если False, то в панель задач
     
  5. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    у Меня стоит труе и все равно в панель задач! ПС работаю в делфи 2009
     
  6. ZdezBilYa

    ZdezBilYa Elder - Старейшина

    Joined:
    29 Aug 2008
    Messages:
    198
    Likes Received:
    75
    Reputations:
    19
    тогда не знаю. в 7 и в 2010 работает безотказно
     
  7. NFM

    NFM Reservists Of Antichat

    Joined:
    16 Jan 2006
    Messages:
    307
    Likes Received:
    191
    Reputations:
    22
    в папке \demos\CoolTrayTest есть пример. посмотри его, и все вопросы сразу отпадут
     
  8. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    Я его смотрел, там при нажатии на кнопку исчезает вкладка с панели задач, Я тоже могу вставить кнопку и уже обрабатывая нажатие кнопки делать чтобы вкладка с панели задач исчезла. Но ведь Мне нужно чтобы при сворачивании..получается нужно перехватывать сворачивание и больше никак? :(
     
  9. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    У формы есть свойство ShowTaskBar в обработчик "Сворачивания" всунь False для этого свойства (Действительно для C++.net VS2008)

    P.S. только заметил что делфя, но пусть будет =)
     
  10. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    вот этот самый обработчик сворачивания Я никак и не могу найти! Мне нужно чтобы при сворачивании исчезало,однако как обрабатывать нажатие на кнопку сворачивания хз, если только перехватывать но это муторно. Может у Меня компонент глюк, кто скажет откуда скачать cooltrayicon для delphi 2009???
     
  11. ZdezBilYa

    ZdezBilYa Elder - Старейшина

    Joined:
    29 Aug 2008
    Messages:
    198
    Likes Received:
    75
    Reputations:
    19
    Попробуй: CoolTrayIcon
    Я ставил CoolTrayIcon_D140.dpk для D2010 (попробуй его или CoolTrayIcon_D120.dpk)
     
  12. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    и то и другое попробовал поставить и все таже тупость :(
     
  13. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    Знач так (опять действительно для С++)

    В Экшене формы Resize ставим такой код

    Code:
    
    if(this->WindowState == FormWindowState::Minimized)
    			 {
    				this->ShowInTaskbar = FALSE;
    			 }
    
    
    У мну все работает
     
  14. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    resize тоже обрабатываю и все равно..ппц видимо придется перехватывать минимизацию :(
     
  15. ZdezBilYa

    ZdezBilYa Elder - Старейшина

    Joined:
    29 Aug 2008
    Messages:
    198
    Likes Received:
    75
    Reputations:
    19
    Нашел такое для 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;
    
    
     
  16. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    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;
    по идее должно скрывать иконку с трея, а все равно нифига! Может есть еще какой нить хороший компонент для работы с треем?
     
  17. ZdezBilYa

    ZdezBilYa Elder - Старейшина

    Joined:
    29 Aug 2008
    Messages:
    198
    Likes Received:
    75
    Reputations:
    19
    в составе Raize Components есть компонент TRzTrayIcon
     
  18. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    хорошо, завтра посмотрю и отпишусь, спасибо :)
     
  19. Markus_13

    Markus_13 Member

    Joined:
    19 Feb 2009
    Messages:
    74
    Likes Received:
    19
    Reputations:
    0
    имхо - бред - для подобной мелочи юзать какие-то компоненты, есть прекрасная функция в 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.
     
  20. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    проблему решил так:
    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;
    
    теперь иконки нет на панели задач, Я счастлив :) Спасибо всем кто пытался помочь