procedure TMainSidebar.CreateAppBar;
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_Right;
{Alternative Werte: ABE_BOTTOM, ABE_LEFT, ABE_RIGHT}
// Rect für den reservierten Platz, wo keine Anwendung "hin darf"
fAppBarData.rc.Left := Screen.Width - self.ClientWidth;
fAppBarData.rc.Right := Screen.Width;
fAppBarData.rc.Top := 0;
fAppBarData.rc.Bottom := screen.Height;
// AppBar erstellen
iResult := SHAppBarMessage(ABM_NEW, fAppBarData);
// Hat das Erzeugen geklappt?
if iResult = 0
then
begin
ShowMessage('
Die Sidebar konnte nicht erzeugt werden. Unter Umständen existiert bereits eine Sidebar an dieser Position.');
Exit;
end;
self.Height := screen.Height;
// 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(fAppBarData.hWnd, fAppBarData.rc.Left, fAppBarData.Rc.Top,
fAppBarData.rc.Right, fAppBarData.rc.Bottom, true);
end;