Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 09.10.09 15:42 
Hallo zusammen!

Habe hier: www.swissdelphicente...showcode.php?id=2262 folgenden Code gefunden, den ich gebrauchen kann:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure HidePopupMenu;
begin
  PostMessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, 0);
  PostMessage(Handle, WM_LBUTTONUP, MK_LBUTTON, 0);
end;

Ich habe ein Programm, dass im SysTray als Symbol liegt, man kann es per PopupMenu wieder aktivieren. Wenn man nun ausserhalb des PopupMenu's klickt, zB. auf die Taskleiste, möchte ich, dass sich das PopupMenu schliesst und weiters nichts ausgeführt wird.

Dazu habe ich folgende Fragen:
-> Wie stelle ich fest, ob sich die Maus innerhalb des PopupMenu's befindet? (Ist das dazu überhaupt nötig?)
-> Wo baue ich obigen Code ein, damit sich das PopupMenu schliesst?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 12.10.09 21:15 
Weiss denn dazu niemand etwas?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 12.10.09 23:15 
Hallo,

hab auch einige selbst entwickelte Programme im Bereich SysTry, deren Popup schließt sich eigemtlich automatisch, wenn man daneben klickt. Wie realisierst Du das Popup-Menü in Deinem Programm?

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 13.10.09 17:40 
user profile iconLannes hat folgendes geschrieben Zum zitierten Posting springen:
Wie realisierst Du das Popup-Menü in Deinem Programm?

Mit einer Komponente TDFTrayIcon. Macht eigentlich alles perfekt und man kann ihr ein PopupMenu zuweisen. Ich verstehe zwar, dass dieses dann sein eigenes Ding macht, aber nicht, dass es sich nicht wieder schliesst, wenn man "daneben" klickt.

TDFTrayIcon zeigt das PopupMenu in procedure TDFTrayIcon.DoRightClick; mit PopupMenu.Popup(Pos.X, Pos.Y); an.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 13.10.09 19:47 
Hallo,

Auszug aus der unit DFTrayIcon:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
 if assigned(FPopupMenu) then
  begin
    // SetForeGroundWindow(Application.Handle); if the popup not shows correctly
    PopupMenu.Popup(Pos.X, Pos.Y);
    // PostMessage(Application.Handle, WM_NULL, 0, 0); or use MainForm-Handle !!
  end;


Hast Du mal bei SetForeGroundWindow die Auskommentierung entfernt?
In meinem Code ist die Zeile aktiv.

Noch das aus DFTrayIcon:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TDFTrayIcon.WndProc(var msg: TMessage);
//...
case LParam of
  WM_RBUTTONUP: begin
                DoRightClick;
                end;

Bei mir wird bei WM_RBUTTONDOWN das Popup aufgerufen.

Sind aber alles nur Vermutungen, habe es nicht getestet.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 13.10.09 20:18 
user profile iconLannes hat folgendes geschrieben Zum zitierten Posting springen:
Hast Du mal bei SetForeGroundWindow die Auskommentierung entfernt?

Bei mir ist die Zeile auskommentiert - und was soll ich sagen? Ich habe sie aktiviert, und es klappt wie es sein soll! :D
Vielen Dank!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 14.10.09 18:19 
Da fällt mir doch noch etwas ein:
Es tritt bei der merkwürdige Effekt auf, dass, wenn das Projekt in Delphi geladen ist und ich Delphi minimiere, dass dann kein Taskbar-Button von Delphi sichtbar ist!
Und es wird noch besser: Wenn ich auf "Datei/Alle schliessen" klicke, und dann Delphi minimiere, gibt's ebenfalls keinen Delphi-Taskbar-Button - obwohl das Projekt nicht mehr geladen ist!

Öffne ich Delphi hingegen mit einem anderen Projekt oder einfach ohne Projekt, tritt der Effekt nicht auf!
Ich habe zwar ShowWindow(GetWindow(Handle,GW_OWNER), SW_HIDE); in meinem Code, aber auch, wenn ich diese Zeile auskommentiere, ändert das nichts!
Ist ja im Grunde egal, denn wie gesagt, ansonsten verhält sich Delphi bzw. Windows ja normal, aber warum ist das so?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!