Announcement

Collapse
No announcement yet.

Systemtray als Komponente abgeleitet von TPopupMenu

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Systemtray als Komponente abgeleitet von TPopupMenu

    Hallo, <br>
    ich habe versucht den Systemtray mit der PopMenu-Komponente zu kombinieren.
    Das hat auch auf Anhieb fast geklappt. <br>
    Wenn ich jetzt die Komponente in einer neuen Anwendung einsetze und diese starte, wird zuerst das Icon im Tray angezeigt. Sobald man jedoch die Maus über den Tray bewegt verschwindet das Icon wieder aus dem Tray!

    Hat jemand eine Idee wie ich das beheben kann!

    bye stephan

    <pre><code>
    tTrayPopupMenu = class(TPopupMenu)
    private
    NotiTray: TNotifyIconData;
    procedure TrayMessage(var Message: TMessage); message WM_TRAYMSG;
    public
    Constructor Create(AOwner: TComponent); override;
    end;
    <br>
    constructor tTrayPopupMenu.Create(AOwner: TComponent);
    begin
    inherited Create(AOwner);
    with notiTray do
    begin
    cbSize := SizeOf(notiTray); // size of the structur
    Wnd := Handle; // handle of the window
    uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP; // flags
    uCallBackMessage := WM_TRAYMSG; // message
    hIcon := Application.Icon.Handle; // tray-icon
    end; // End With
    Shell_NotifyIcon(NIM_ADD, @notiTray); // add tray-icon
    end;
    </code> </pre>

  • #2
    Also Du registrierst mit Shell_NotifyIcon() das TrayIcon. Vorher füllst Du die Member aus, im speziellen notiTray.Wnd := Handle == Self.Handle == TTrayPopupMenu(Self).Handle == inherited TPopupMenu.Handle == inherited TMenu.Handle == .Hande: type hMenu !! <> type hWnd. Heist als Benachrichtigungs-FensterHandle der Tray Struct muß ein Handle auf ein gültiges Fensterhandle übergeben werden. Du übergibts aber ein Handle auf ein Windows hMenu das reingarnichts mit fenstern zu tun hat.<br>
    Davon abgesehen halte ich die Idee vom TPopupMenu abzuleiten als nicht gut. Besser von TComponent und einer published Eigenschft PopupMenu: TPopupMenu; Im Besondern kann Dein Weg zu problemen führen falls Borland sich entschließt den MenuDesigner abzuändern. Dann könnten zwar alle originalen TPopupMenu's editiert werden, Dein abgeleitetes aber NICHT. So geschehen bei dem TDBGridColumns.

    Gruß Hage

    Comment


    • #3
      Ich wuerde so eine Komponente erst garnicht selber machen. I lebe gut mit CoolTray. Such auf Delphi Super Page oder Torrys Pages nach Tray-Komponenten

      Comment


      • #4
        nungut, das ist richtig, wenn man es nicht selber auch lernen wollte. TrayIcon Komponenten gibts wirklich wie Sand am meer, das liegt wohl auch daran, daß man eigentlich nur EINE EINZIGSTE Funktion benötigt und die meisten Komponenten eben sehr sehr aufgeblasen sind

        Comment

        Working...
        X