Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Windows API / MS.NET Framework API (https://www.delphipraxis.net/20-library-windows-api-ms-net-framework-api/)
-   -   Delphi AppBar nur anzeigen, wenn nötig (https://www.delphipraxis.net/24420-appbar-nur-anzeigen-wenn-noetig.html)

CalganX 20. Jun 2004 19:52


AppBar nur anzeigen, wenn nötig
 
Hier habe ich erklärt, wie man eine AppBar erstellt. Diese ist jetzt immer sichtbar. Interessant wäre also eine Möglichkeit, dass die AppBar nur zu sehen ist, wenn man mit der Maus an den Rand kommt.
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:
aAppBarData.rc.Bottom := self.ClientHeight;
in
Delphi-Quellcode:
aAppBarData.rc.Bottom := 5;
geändert werden.
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:
// 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;
Zusätzlich muss noch vor der AppBar-Registrierung folgendes geschrieben werden (bspw. im OnCreate-Ereignis):
Delphi-Quellcode:
  self.Tag := self.ClientHeight;
Zu guter Letzt muss noch programmiert werden, dass das Fenster wieder verschwindet. Wir reagieren also auf das OnDeactivate-Ereignis der Applikation:
Delphi-Quellcode:
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;
Nun sollte die AppBar sozusagen "On Demand" reagieren.

[edit=flomei]Link gefixt... flomei[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 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