Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi TrayIcon ohne MainForm (https://www.delphipraxis.net/109937-trayicon-ohne-mainform.html)

Hybrid666 10. Mär 2008 13:58


TrayIcon ohne MainForm
 
Hi,

ich habe ein programm ohne main form, möchte aber ein TrayIcon erstellen. Zum erstellen des Tray Icons gibt es ja genug tuts, nur was ich mich fraghe, wie reagiere ich auf klicks auf das TrayIcon? In allen tuts wied der mainform das hier hinzugefügt:


Delphi-Quellcode:
uses
  ShellAPI;

const
  WM_TASKABAREVENT = WM_USER+1; //Taskbar message
[...]

type
  TMainForm = class(TForm)
[...]
private
    { Private-Deklarationen }
    procedure TaskbarEvent(var Msg: TMessage);
      Message WM_TASKABAREVENT;
[...]

{Message-Prozedur für das TrayIcon}
procedure TMainForm.TaskbarEvent(var Msg: TMessage);
var Point : TPoint;
begin

  { Die WM_TaskbarEvent-Message "Msg" gibt in Msg.LParam
    das genaue Ereignis an. Msg.LParam kann folgende Werte für
    Mausereignisse annehmen:

    WM_MouseMove
    WM_LButtonDown
    WM_LButtonUp
    WM_LButtonDblClk
    WM_RButtonDown
    WM_RButtonUp
    WM_RButtonDblClk }

  { Eventhandler-Beispiele von Robert Fischer: }
  case Msg.LParam of
    WM_LBUTTONDBLCLK:
      begin
        //Mach etwas nach einem Doppelklick...
      end;
    WM_LBUTTONUP:
      begin
        //Mach etwas nach einem Linksklick...
      end;
    WM_RBUTTONUP:
      begin
        // Rechtsklick
        // Diese Zeile ist wichtig, damit das PopupMenu korrekt
        // wieder geschlossen wird:
        SetForegroundWindow(Handle);
        // PopupMenu anzeigen:
        GetCursorPos(Point);
        PopupMenu1.Popup(Point.x, Point.y);
        //oder ohne Variable Point:
        //PopupMenu1.Popup(Mouse.CursorPos.x, Mouse.CursorPos.y);
      end;
  end;
end;
Wie reagiere ich auf klicks ohne mainform? wo sage ich ihm welche procedure er ausführen soll sobald es geklickt wird?

Danke für alle antworten.

MfG Hybrid666

sirius 10. Mär 2008 14:01

Re: TrayIcon ohne MainForm
 
Wieso hast du denn kein Window in deiner Anwendung?

Ansonsten benutze ein TWincontrol oder nutze allocatehwnd um die Messages zu empfangen.

Hybrid666 10. Mär 2008 15:59

Re: TrayIcon ohne MainForm
 
ansich ist es keine anwendung, sondern eine DLL, die aber im speicher geladen bleibt und wie ein programm agiert. wird ein plugin fürn anderes programm, unter anderem mit dem tool en tray icon anzuzeigen ^^.

Naja könntest du das bissle genauer ausformulieren was du das vorgeschlagen hast?

MfG

sirius 10. Mär 2008 16:29

Re: TrayIcon ohne MainForm
 
Hier wird mit allocatehwnd gearbeitet

Ab D2006 gibt es übrgiens eine fertige Komponente.

Hybrid666 11. Mär 2008 02:04

Re: TrayIcon ohne MainForm
 
danke...habe mir das ding mal grob durchgeschaut, scheint alles zu haben...werde den code die tage mal durchgehen und ihn versuchen zu verstehen, wenn ich noch fragen hab werd ich posten :D

Danke!

Hybrid666 12. Mär 2008 13:04

Re: TrayIcon ohne MainForm
 
servus,

ich hab mir den code nu durchgeschaut und verstehe soweit alles, nur hab ich nu ne frage: ich will das ding in der dll minimalistisch halten und keine komponenten verwenden, wie kann ich allocatehwnd auf ne normale prozedur anwenden? denn wen ich einfach so ne OnMessage prozedur erstelle und allocatehwnd drauf anwende, sagt er mir das geht nicht.

MfG

SirThornberry 12. Mär 2008 13:58

Re: TrayIcon ohne MainForm
 
auf eine normale Procedure gar nicht. Aber was hält dich davon ab einfach eine Klasse selbst zu bauen? da TObject immer eingebunden ist wird sich das beim Speicherverbrauch nicht wirklich merklich auswirken.
Ansonsten musst du nonvcl mäßig ran gehen und mit CreateWindow ein unsichtbares Fenster erzeugen.

Hybrid666 12. Mär 2008 14:41

Re: TrayIcon ohne MainForm
 
habs gelöst...
http://www.delphipraxis.net/internal...t=allocatehwnd

danke an alle ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz