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.

Einen neuen Kommentar erstellen...