Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Appbar am rechten Bildschirmrand? (https://www.delphipraxis.net/152313-appbar-am-rechten-bildschirmrand.html)

RobbiTobbi 17. Jun 2010 20:19

Appbar am rechten Bildschirmrand?
 
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.:?

RobbiTobbi 18. Jun 2010 13:25

AW: Appber am rechten Bildschirmrand?
 
*PUSH* (bitte antworten, bin echt verzweifelt:cry:)

Teekeks 18. Jun 2010 14:31

AW: Appber am rechten Bildschirmrand?
 
Probiere es doch mal mit ein paar festen Werten... mal gucken was dann passiert...

RobbiTobbi 18. Jun 2010 14:35

AW: Appber am rechten Bildschirmrand?
 
meinst du bei rc.left und so?

Edit: Habs da mit festen Werten versucht, funktioniert aber immer noch nicht

Teekeks 18. Jun 2010 16:39

AW: Appber am rechten Bildschirmrand?
 
Wie geht nicht.
Zeig mal ein Bild wie das dann aussieht, das kann man sich ja so gar nicht anhand deiner Beschreibung vorstellen.

Es sei noch gesagt das ich weder weiß, wie diese API-Befehle richtig angewandt werden, noch habe ich Windows.
Aber ich versuche mal trotzdem dein Problem zu finden :)

Luckie 18. Jun 2010 18:15

AW: Appbar am rechten Bildschirmrand?
 
Welche Werte haben denn Left, Right, Top und Bottom?

MuTzE.Y85 18. Jun 2010 23:46

AW: Appbar am rechten Bildschirmrand?
 
Code:
procedure TForm2.FormCreate(Sender: TObject);
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.Width;
  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 AppBar konnte nicht erzeugt werden. Unter Umständen existiert bereits eine AppBar an dieser Position.');
    Exit;
  end;

  // 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, Self.Width, fAppBarData.rc.Bottom - fAppBarData.rc.Top, true);
end;

RobbiTobbi 19. Jun 2010 11:31

AW: Appbar am rechten Bildschirmrand?
 
Danke für die vielen Antworten habs jetzt hingekriegt. Das Formular hatte align := alRight:oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz