Ich habe
hier eine Methode gefunden, wie man eine
Appbar erstellt. Ich möchte die
Appbar aber am rechten und nicht am oberen Bildschirmrand anordnen. Ich habe es mit folgendem Code versucht:
Delphi-Quellcode:
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;
Allerdings erstreckt sich die
Appbar dann über den gesamten Bildschirm (ausser über den reservierten Bereich). Wie kann ich dieses Problem beheben?
Edit: Der Borderstyle des Formulars ist bsnone. Liegt es vlt. daran?
PS.: Ich weiss, dass es schon viele Beiträge zu diesem Thema gibt, habe aber nichts gefunden, das mir hilft.