[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]

    { Windows95/NT Toolbar registering example }
    { 2/13/97 by Brandon Sneed (Nivenh)}
    { If you use this, don't give me credit }

    { Add ShellAPI to your Uses clause }

    { This code was pulled from an app i wrote and has been modified to make
    	it a little more understandable for those 'not-so-fluent' delphi coders }

    { I put it in the OnShow event, but it probably could go in the create event
    	too maybe.. or anywhere else for that matter }
    procedure TForm1.OnShow(Sender: TObject);
    var Result : integer;
    		BarData : TAppBarData;
    begin

    with BarData do
      begin
      cbSize := SizeOf(BarData);  { Size of the struct }
      hwnd := OWForm.Handle;      { Window handle to register as app bar }
      uCallBackMessage := WM_USER;{ Message used for APPBAR specific messages }
      uEdge := ABE_LEFT;          { Side of screen to bind with }
      rc := Rect(0, 0, OWForm.Width+1, OWForm.Height);
                                  {^^ Rectangle being requested to use }
      lParam := 0;                { Only used for ABM_AUTOHIDEBAR }
      end;

    Result := SHAppBarMessage(ABM_NEW, BarData);  { Register with explorer }
    if Result = 0 then
      begin
      ShowMessage('Unable to register AppBar.');
      exit;
      end;

    SHAppBarMessage(ABM_QUERYPOS, BarData); { Can we use BarData.RC ?? }
    																				{ API wasn't clear on what this returned }
    SHAppBarMessage(ABM_SETPOS, BarData);   { Set the position to be the same as in RC }
    { ^^ this is what makes everything fall into place }

    with OWForm do
      begin
      Application.ProcessMessages; { Without this, it places in the wrong spot, could
    																 be an error on my part somewhere }
      SetWindowPos(Handle, HWND_BOTTOM, left-width, top, width, height, SWP_NOREDRAW);
      { ^^ this sets the window where we want it.  at the very left edge of the screen }
    	{ modify this line to suit }
      end;
    end;

    { NOTE:  This ONLY reigsters it as a toolbar and places it in the appropriate
    	spot.  You still need to make handlers for the other ABE/ABM messages.
    	See the documentation in Delphi 2.0 and up for more info.  Look up
    	SHAppBarMessage }

[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]