![]() |
AppBar nur anzeigen, wenn nötig
![]() Ich habe folgende Variante selbst entwickelt. Sie sollte allerdings funktionieren. Um nicht ein ständiges neujustieren der Fenster zu erzwingen, sollten nur wenige Pixel reserviert werden. Aus dem oben genannten Beitrag muss also die Zeile
Delphi-Quellcode:
in
aAppBarData.rc.Bottom := self.ClientHeight;
Delphi-Quellcode:
geändert werden.
aAppBarData.rc.Bottom := 5;
Damit werden nur 5 Pixel für die AppBar registriert. Als nächstes muss auf die Nachricht CM_MOUSEENTER reagiert werden, die gesendet wird, wenn die Maus das Formular berührt:
Delphi-Quellcode:
Zusätzlich muss noch vor der AppBar-Registrierung folgendes geschrieben werden (bspw. im OnCreate-Ereignis):
// Message-Handler im private-Abschnitt des AppBar-Fensters
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; // ... var bVisible: boolean = false; // ... procedure TfrmMain.CMMouseEnter(var Message: TMessage); begin // Mouse enters form // Verhindern, dass Fenster neu ausgerichtet wird, wenn nur von einem Button die Maus in's Formular wandert if bVisible then Exit else bVisible := true; // Formular neu ausrichten MoveWindow(aAppBarData.hWnd, aAppBarData.rc.Left, aAppBarData.Rc.Top, GetSystemMetrics(SM_CXSCREEN), self.Tag, true); // hier sollte einem Control der Fokus übergeben werden! inherited; end;
Delphi-Quellcode:
Zu guter Letzt muss noch programmiert werden, dass das Fenster wieder verschwindet. Wir reagieren also auf das OnDeactivate-Ereignis der Applikation:
self.Tag := self.ClientHeight;
Delphi-Quellcode:
Nun sollte die AppBar sozusagen "On Demand" reagieren.
procedure TfrmMain.ApplicationDeactivate(Sender: TObject);
begin // Fenster wieder auf 5 Pixel verkleinern. MoveWindow(aAppBarData.hWnd, aAppBarData.rc.Left, aAppBarData.Rc.Top, GetSystemMetrics(SM_CXSCREEN), aAppBarData.rc.Bottom, true); // Sichtbar-Flag wieder zurücksetzen bVisible := false; end; // Ereignis zuweisen (bspw. im OnCreate-Ereignis): Application.OnDeactivate := ApplicationDeactivate; [edit=flomei]Link gefixt... flomei[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz