Thema: Delphi Arbeiten mit AppBars

Einzelnen Beitrag anzeigen

-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#31

Re: Arbeiten mit AppBars

  Alt 11. Jul 2008, 10:29
Danke erstmal ! ..es waren leider noch ein paar Fehler drinne, hier der Code den ich benutzt habe...

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 Zitat antworten Zitat