unit MainMenu; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ShellAPI, TLHelp32, StdCtrls, Buttons, XPMan; type TMainfrm = class(TForm) BitBtn1: TBitBtn; XPManifest1: TXPManifest; Button1: TButton; Button2: TButton; procedure Button2Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Mainfrm: TMainfrm; AppData: TAppBarData; implementation {$R *.dfm} procedure TMainfrm.BitBtn1Click(Sender: TObject); begin close; end; procedure TMainfrm.Button1Click(Sender: TObject); begin SHAppBarMessage(ABM_NEW, AppData); //Add to system list SHAppBarMessage(ABM_ACTIVATE, AppData); //Activate ot SHAppBarMessage(ABM_SETPOS, AppData); //Position it end; procedure TMainfrm.Button2Click(Sender: TObject); begin MoveWindow(AppData.hWnd, AppData.rc.left, AppData.rc.top, AppData.rc.right - AppData.rc.left, AppData.rc.bottom - AppData.rc.top, TRUE); //Move the appbar into the specified rect end; procedure TMainfrm.FormClose(Sender: TObject; var Action: TCloseAction); begin SHAppBarMessage(ABM_REMOVE, AppData); //Remove it on close end; procedure TMainfrm.FormCreate(Sender: TObject); var scrht:integer; begin mainfrm.Left := 0; mainfrm.Width := screen.Width; scrht := screen.Height;//for some reason we have to get this first with AppData do //structure setup begin AppData.cbSize := 20; Appdata.hWnd := mainfrm.Handle; AppData.uEdge := ABE_TOP; AppData.rc.Left := 0; AppData.rc.Top := Screen.WorkAreaHeight-Mainfrm.Height-10; AppData.rc.Right := Mainfrm.Width; AppData.rc.Bottom := 30;//screen.height-20; SHAppBarMessage(ABM_NEW, AppData); //Add to system list SHAppBarMessage(ABM_ACTIVATE, AppData); //Activate it SHAppBarMessage(ABM_SETPOS, AppData); //Position it end; application.ProcessMessages; end; end.