2009-10-12 11 views

risposta

16

quello che vuoi è chiamato un application desktop toolbar

È necessario utilizzare l'oggetto TAppBarData dichiarato nell'unità ShellAPI e la funzione SHAppBarMessage.

Vedere questo semplice esempio.

type 
    TApplicationTaskBar = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
    private 
    procedure CreateParams(var Params: TCreateParams); override; 
    public 
    { Public declarations } 
    end; 

var 
    ApplicationTaskBar: TApplicationTaskBar; 

implementation 

{$R *.dfm} 

Uses 
ShellAPI; 

procedure TApplicationTaskBar.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    Params.ExStyle := Params.ExStyle or WS_EX_TOOLWINDOW; 
    Params.Style := (Params.Style OR WS_POPUP) AND (NOT WS_DLGFRAME); //Remove title Bar 
end; 

procedure TApplicationTaskBar.FormCreate(Sender: TObject); 
var 
    MyTaskBar : TAppBarData; 
begin 
    GlassFrame.Enabled  :=True;//Activate Glass , optional 
    GlassFrame.SheetOfGlass :=True;//optional 
    Left:=0; 
    Top :=0; 
    Width := 300; 
    Height:= Screen.Height; 
    FillChar(MyTaskBar, SizeOf(TAppBarData), 0); 
    MyTaskBar.cbSize := SizeOf(TAppBarData); 
    MyTaskBar.hWnd := Handle; 
    MyTaskBar.uCallbackMessage := WM_USER+777; //Define my own Mesaage 
    MyTaskBar.uEdge := ABE_LEFT; 
    MyTaskBar.rc  := Rect(0, 0, Width, Height); 
    SHAppBarMessage(ABM_NEW, MyTaskBar); 
    SHAppBarMessage(ABM_ACTIVATE, MyTaskBar); 
    SHAppBarMessage(ABM_SETPOS, MyTaskBar); 
    Application.ProcessMessages; 
end; 


procedure TApplicationTaskBar.FormDestroy(Sender: TObject); 
var 
    MyTaskBar : TAppBarData; 
begin 
    FillChar(MyTaskBar, SizeOf(TAppBarData), 0); 
    MyTaskBar.cbSize := SizeOf(TAppBarData); 
    MyTaskBar.hWnd := Self.Handle; 
    SHAppBarMessage(ABM_Remove, MyTaskBar); 
end; 

Scegli questa collega

Bye.

+0

Grazie. Esattamente quello di cui avevo bisogno –

Problemi correlati