Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi AppBar Breite festlegen (https://www.delphipraxis.net/135136-appbar-breite-festlegen.html)

S4SH1981 5. Jun 2009 11:58


AppBar Breite festlegen
 
Hallo zusammen,
ich benötige Hilfe bei meiner AppBar.

Mit folgendem Code bekomme ich es ja schon hin, dass der PLatz reserviert wird.
Dennoch hätte ich gerne, dass das Formular nicht über die gesamte Breite geht,
sondern ich es festlegen möchte, wie breit und ob es rechts mitte links angeordnet werden soll.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellApi;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    fAppBarData: _AppBarData;
  public
    { Public declarations }
  end;
const
  WM_APPBARMSG = WM_USER + 1;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.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_TOP;
  {Alternative Werte: ABE_BOTTOM, ABE_LEFT, ABE_RIGHT}

  // Rect für den reservierten Platz, wo keine Anwendung "hin darf"
  fAppBarData.rc.Left := 0;
  fAppBarData.rc.Right := 0;
  fAppBarData.rc.Top := 0;
  fAppBarData.rc.Bottom := self.ClientHeight;
 
  // 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;

  // Formular genauso breit machen, wie Bildschirm
  self.Width := screen.Width;

  // 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,
    GetSystemMetrics(SM_CXSCREEN), fAppBarData.rc.Bottom, true);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  SHAppBarMessage(ABM_REMOVE, fAppBarData);
end;

end.
Mit
Delphi-Quellcode:
  // Formular genauso breit machen, wie Bildschirm
  self.Width := 100;
bekomme ich es nicht hin.

Könnte sich jemand den Code mal angucken und mir einen Lösungsansatz geben.

Gruß S4SH

S4SH1981 7. Jun 2009 18:28

Re: AppBar Breite festlegen
 
PUSH

toms 7. Jun 2009 19:52

Re: AppBar Breite festlegen
 
Zitat:

Zitat von S4SH1981
Dennoch hätte ich gerne, dass das Formular nicht über die gesamte Breite geht,
sondern ich es festlegen möchte, wie breit und ob es rechts mitte links angeordnet werden soll.

Hallo, versuche mal zu verstehen was der Code macht. Vor allem diese zwei Codestellen.


Delphi-Quellcode:
  // Wo soll die AppBar sein?
  fAppBarData.uEdge := ABE_LEFT;
Delphi-Quellcode:
  // 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);


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 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