Delphi и трей.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by xafon, 14 May 2010.

  1. xafon

    xafon New Member

    Joined:
    2 Dec 2009
    Messages:
    38
    Likes Received:
    4
    Reputations:
    0
    Как кликнуть по значку в трее? а потом на iZoom. Вроде задача не сложная, но все же столкнулся с проблемой.
    вот скрин:
    [​IMG]
     
  2. JnK

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

    Joined:
    30 Mar 2007
    Messages:
    125
    Likes Received:
    21
    Reputations:
    0
    Прикрути в иконке PopupMenu, он позволяет делать такое. Кодом не помню как, если компонентом.

    1. Вызываешь окно, редактирования PopupMenu
    2. Правой кнопкой.
    3. Create SubMenu

    Тык: http://www.sql.ru/Forum/actualthread.aspx?bid=20&tid=528806&hl=
    http://programmersforum.ru/showthread.php?t=10923
     
    #2 JnK, 14 May 2010
    Last edited: 14 May 2010
  3. FeRiuS

    FeRiuS Member

    Joined:
    26 Feb 2010
    Messages:
    130
    Likes Received:
    49
    Reputations:
    5
    CoolTrayIcon+PopupMenu.
    Скрещиваем popupmenu с треем;
    В popupmenu создаешь "Плагины", затем Create Submen и создаешь iZoom;
    На onclick iZoom задаешь, что нужно.
     
  4. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    в uses добавляешь shellapi.
    затем
    const
    WM_MYICONNOTIFY = WM_USER + 1;

    Далее в private формы пропиши
    procedure WMICON(var msg: TMessage); message WM_MYICONNOTIFY;
    procedure CreateTrayIcon();
    procedure DeleteTrayIcon();

    При условии что форма - Form1
    Контекстное меню - PopupMenu1
    то вот код:
    Code:
    procedure TForm1.WMICON(var msg: TMessage);
    var
      P: TPoint;
    begin
      if msg.LParam = WM_RBUTTONDOWN then
      begin
        GetCursorPos(p);
        SetForegroundWindow(Application.MainForm.Handle);
        PopupMenu1.Popup(P.X, P.Y);
      end;
    end;
    
    // нужно выполнить чтобы добавить иконку
    procedure TForm1.CreateTrayIcon(); 
    var
      nidata: TNotifyIconData;
    begin
      with nidata do
      begin
        cbSize := SizeOf(TNotifyIconData);
        Wnd := Self.Handle;
        uID := 1;
        uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
        uCallBackMessage := WM_MYICONNOTIFY;
        hIcon := Application.Icon.Handle;
        StrPCopy(szTip, Application.Title);
      end;
      Shell_NotifyIcon(NIM_ADD, @nidata);
    end;
    
    // нужно выполнить чтобы удалить иконку
    procedure TForm1.DeleteTrayIcon();
    var
      nidata: TNotifyIconData;
    begin
      with nidata do
      begin
        cbSize := SizeOf(TNotifyIconData);
        Wnd := Self.Handle;
        uID := 1;
      end;
      Shell_NotifyIcon(NIM_DELETE, @nidata);
    end;
    
    

    Если же нужно программно эмулировать ввод то найди хендлы иконки. Затем посылай сообщения онклик ему. или эмуляцию ввода мышью.