Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Programm maximieren, nicht für jedermann
schlumsch - Mo 30.11.09 21:42
Titel: Programm maximieren, nicht für jedermann
Hallo in die Runde,
eine Frage zum Thema Tray und Application.restore.
Ich minimiere mein Programm in die Tray. Wenn der User auf das Icon klickt wird das Programm wieder angezeigt. Soweit alles ok, nun möchte ich aber beim klicken auf das Trayicon zuerst eine Funktion ausführen und in Abhängigkeit von deren Ergebnis das Programm anzeigen, oder eben auch nicht.
Mein Code zum minimieren sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TFormSilentAlert.ApplicationEvents1Minimize(Sender: TObject); begin FormSilentAlert.Hide; with NIM do begin cbSize := SizeOf (nIM); Wnd := Handle; uID := 0; uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; uCallbackMessage := IC_CLICK; hIcon := Application.Icon.Handle; szTip := 'wpcstf'; end; Shell_NotifyIcon(NIM_ADD, @NIM); end; |
Kann mir da jemand helfen?
thx & lg
Xentar - Mo 30.11.09 23:23
Das war der Quellcode für das Minimize Event, richtig. Bringt uns hier nun leider nicht weiter.
Dein Quellcode macht: Programm wird minimiert -> Tray Icon hinzufügen.
Zeig mal bitte den Quellcode, wie du das Programm wieder "öffnest", also aus dem Tray wieder anzeigst.
schlumsch - Di 01.12.09 21:51
Ja nee ich bin auch brasslich...
Habe meine Procedur ganz übersehen, nu funktioniert alles wie gewollt :)
dDie Lösung sieht nun so aus
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TFormSilentAlert.Systray(var sMsg: TMessage); var Pnt: TPoint; begin inherited; if (sMsg.LParam = WM_LBUTTONDOWN) then begin if (FormSilentAlert.checkPriviledges() = true) then begin Show; Shell_NotifyIcon(NIM_DELETE, @NIM); Application.Restore; Application.BringToFront; end; end; if (sMsg.LParam = WM_RBUTTONDOWN) then begin SetForegroundWindow(FormSilentAlert.Handle); GetCursorPos(Pnt); PopupMenu_tray.Popup(Pnt.x, Pnt.y); end; end; |
...gut das wir das diskutiert haben *g*
Sorry & lg
Dunkel - Di 01.12.09 22:28
schlumsch hat folgendes geschrieben : |
Delphi-Quelltext 1:
| if (FormSilentAlert.checkPriviledges() = true) then begin |
|
So weit, so gut. Der Vergleich auf
= TRUE kann beizeiten aber in die Hose gehen. Da Deine Funktion eh ein Boolean zurückgibt reicht ein
Delphi-Quelltext
1:
| if FormSilentAlert.checkPriviledges() then begin |
Gewöhn Dir das an.
Die Antwort auf die potentielle Frage, weshalb man ein Boolean-Wert nie auf TRUE prüfen sollte, findet man ganz sicher zigfach erklärt hier im Forum.
schlumsch - Mi 02.12.09 11:16
okay, dann nehm ich den Tip mal auf und danke
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!