![]() |
Arbeiten mit AppBars
Sogenannte AppBars sind bspw. Formulare, die an einer Deskseite sitzen und sich verhalten, wie die Taskleiste: es kann z.B. kein Fenster darüber liegen und es ist immer zu sehen.
Diese AppBar's lassen sich auch mit Delphi-Mitteln relativ einfach erzeugen. Im folgenden will ich das einmal kurz erklären. Als erstes brauchen wir eine Variable vom Typ _AppBarData. Diese Variable enthält alle wichtige Informationen über die AppBar, die wir an Windows senden. Die Variable muss global bzw. ein Feld des Formulares sein, weil wir auf sie mehrmals im Programm zugreifen müssen. Dann füllen wir dieses Record mit Daten:
Delphi-Quellcode:
Die letzten Zeilen Code zeigen den zu reservierenden Platz. Das Formular kann durchaus größer/kleiner sein (dann müsste bei rc.Bottom ein anderer Wert stehen). Allerdings würde das bewirken, dass der reservierte Platz nicht mehr dem Formular entspricht und es somit zu durchaus komischen Konstruktionen kommen kann.
uses {...}, ShellApi, {...};
{...} type TfrmMain = class(TForm) {...} private fAppBarData: _AppBarData; {...} end; const // Konstante, die als CallBack für die AppBar arbeitet WM_APPBARMSG = WM_USER + 1; {...} // bspw. im OnCreate-Ereignis des Formulares, welches als AppBar dienen soll var iResult: integer; begin // Größe der ganzen Struktur fAppBarData.cbSize := SizeOf(TAppBarData); // Handle des Formulares, das als AppBar dienen soll fAppBarData.hWnd := Self.Handle; // Callback-Message fAppBarData.uCallbackMessage := WM_APPBARMSG; // Wo soll die AppBar sein? fAppBarData.uEdge := ABE_TOP; {Alternative Werte: ABE_BOTTOM, ABE_LEFT, ABE_RIGHT} // Rect für den reservierten Platz, wo keine Anwendung "hin darf" fAppBarData.rc.Left := 0; fAppBarData.rc.Right := 0; fAppBarData.rc.Top := 0; fAppBarData.rc.Bottom := self.ClientHeight;
Delphi-Quellcode:
Die AppBar wurde nun erzeugt. Am Ende muss der reservierte Platz auf jedenfall wieder freigegeben werden:
// AppBar erstellen
iResult := SHAppBarMessage(ABM_NEW, fAppBarData); // Hat das Erzeugen geklappt? if iResult = 0 then begin ShowMessage('Die AppBar konnte nicht erzeugt werden. Unter Umständen existiert bereits eine AppBar an dieser Position.'); Exit; end; // Formular genauso breit machen, wie Bildschirm self.Width := screen.Width; // Position abfragen und nochmal setzen SHAppBarMessage(ABM_QUERYPOS, fAppBarData); SHAppBarMessage(ABM_SETPOS, fAppBarData); // Nachrichtenschleife abarbeiten Application.ProcessMessages; // Bringt das Fenster an die gewünschte Position. Dazu werden die vorher festgelegten Werte verwendet. MoveWindow(aAppBarData.hWnd, fAppBarData.rc.Left, fAppBarData.Rc.Top, GetSystemMetrics(SM_CXSCREEN), fAppBarData.rc.Bottom, true); end;
Delphi-Quellcode:
Fertig ist die AppBar.
// zum Beispiel im OnDestroy-Ereignis des Formulars
begin SHAppBarMessage(ABM_REMOVE, aAppBarData); end; |
Re: Arbeiten mit AppBars
äh und warum 3 mal das ganze?
frei nach dem motto alle guten dinge sind drei ;-) |
Re: Arbeiten mit AppBars
Mozilla, wollte nicht so, wie ich. ;)
Chris |
Re: Arbeiten mit AppBars
Klappt ganz gut, könntest du noch ein Beispiel bezüglich "Auto-Hide" und das verschieben der AppBar posten (von einem Bildschirmrand zum anderen...)
|
Re: Arbeiten mit AppBars
Verschieben: Einfach den Platz für die APPBAR freigeben, dann den neuen an einer anderen Seite reservieren und mit MoveWindow an die entsprechende Stelle schieben. Ach so das Fenster muss natürlich von der Größe etc auch noch angepasst werden...
Edit: Beispiel für's Auto-Hide hat Chal neulich schon ein mal gepostet, such am besten mal... |
Re: Arbeiten mit AppBars
Hi,
ich habe den Beitrag bereits (also ca. 8 Tage danach) in die CodeLibrary verschoben: ![]() Chris [edit=Chakotay1308]:shock: Ja wo isser denn? :gruebel: Ich geb dir gleich mal den Link.. ;)[/edit] [edit=Chakotay1308] ![]() |
Re: Arbeiten mit AppBars
A :gruebel: lso vielleicht ist das nur mal wieder so ne Newbie Frage, aber ich habe da so das Problem das bei mir immer die Fehlermeldung dass WMUSER ein ungültiger bezeichener sei (muss ich irgend etrwas unter uses ändern??) :drunken:
|
Re: Arbeiten mit AppBars
bei mir auch
|
Re: Arbeiten mit AppBars
Delphi-Quellcode:
WM_USER
|
Re: Arbeiten mit AppBars
naja, sind noch mehrere Fehler drin...evtl sollte der Code mal überarbeitet werden!
Kidix |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 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