Wie programmiert man eine Application Bar?
18.05.2008
Author: N43
Für eine Application Bar stellt Windows die Funktion SHAppBarMessage und den Variablentyp TAppBarData zur Verfügung. Um sie nutzen zu können musst du die Unit ShellApi einbinden. Im folgenden werde ich zeigen, wie man den Platz für eine AppBar reserviert. Dafür benötigst du als erstes eine Variable vom Typ TAppBarData.
Dazu fügst du bei den globalen Variablen die Variable Data hinzu.
DELPHI - Code:
var
MainForm: TMainForm;
Data: TAppBarData;
Damit hast du eine Variable, um die Daten für die AppBar zu speichern. Du kannst also nun die Größe, das Fenster und so weiter bestimmen. Eine ausführlichere Beschreibung dazu findest du in der MSDN Referenz.
Füge den Code in die OnCreate Procedure oder in einen OnClick Ereignis Handler eines Buttons, etc ein.
DELPHI - Code:
//benötigter speicher
Data.cbSize := SizeOf(TAppBarData);;
//welches Fenster soll die AppBar werden?
Data.hWnd := MainForm.Handle;
//Message die von der AppBar an das Programm gesendet werden kann
Data.uCallbackMessage := WM_APP;
//Position der AppBar festlegen
Data.uEdge := ABE_TOP;
//rc steht für Rectangle(Rechteck)
//festlegen der Positionen für die AppBar
Data.rc.Left := 0;
Data.rc.Top := 0;
Data.rc.Right := 200;
Data.rc.Bottom := 50;
Um jetzt aber auch den Platz für die AppBar zu sehen musst du noch drei Nachrichten mit der Variablen Data schicken. Dafür gibt es die oben genannte Funktion SHAppBarMessage. Hänge den Code einfach an den vorangehenden an.
DELPHI - Code:
//AppBar erstellen lassen, wenn die Funktion 0 zurück liefert,
//ist das Erstellen schief gelaufen
if SHAppBarMessage(ABM_NEW, Data) = 0 then
begin
//Fehlermeldung ausgeben und Procedure verlassen
ShowMessage('AppBar konnte nicht registriert werden');
exit;
end;
//Position der AppBar senden
//ABM_QUERYPOS sollte vor ABM_SETPOS gesendet werden
SHAppBarMessage(ABM_QUERYPOS, Data);
SHAppBarMessage(ABM_SETPOS, Data);
Nun haben wir Platz für die AppBar. Jetzt fehlt nur noch die AppBar. Verschiebe einfach das Fenster in den Sichbarkeitsbereich der AppBar. Ich bediene mich hierbei der Funktion MoveWindow.
DELPHI - Code:
//Fenster hat keinen Rand und keine Titelleiste
MainForm.BorderStyle := bsNone;
//Position und Breite des Fensters festlegen,
//könnte man auch über die Eigenschaften des Fensters machen
MoveWindow(MainForm.Handle, 0, 0, Screen.Width, 50, True);
Das war's. Du hast jetzt das Fenster oben über allen anderen Programmen hängen. Wenn du das Programm jedoch beendest, wird der Bereich für die AppBar nicht wieder für andere Programme freigegeben. Schreibe hierfür einfach folgenden Code in den OnClose Ereignis Handler.
DELPHI - Code:
//Bereich für die AppBar wieder freigeben
SHAppBarMessage(ABM_REMOVE, Data);
N43
16.05.2004
Author: N43
Für manche Funktionen und Variablen, die für die AppBar notwendig sind, benötigt man die Unit ShellAPI.
Die neue Version des Tutorials beinhaltet diesen Hinweis bereits.
Kommentare
Download