AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

AppBar nur anzeigen, wenn nötig

Ein Thema von CalganX · begonnen am 20. Jun 2004
Antwort Antwort
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

AppBar nur anzeigen, wenn nötig

  Alt 20. Jun 2004, 19:52
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
aAppBarData.rc.Bottom := self.ClientHeight; in
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):
  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]
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf