[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]
{Automatic sizing with taskbar in Win95 and NT-Shell update }
{Modified by Tim Baker timbaker@mail.infinet.com to use the }
{TWMGETMINMAXINFO Windows message }
{Original procedure for sizing for Win95/NtShell TaskBar from}
{Peter M. Jagielski 73737,1761@compuserve.com. }
{This is freeware and freely distributable, just include the }
{above five lines just before the procedure in your progam. }
{After adding this to your program, run it, maximize your }
{window, and move the task bar around the screen. Your }
{program will automatically change its position and size. }
{Just after your normal procedure definitions in your class(tform) type }
{and before your private variable declarataions, Add the following two lines }
{Without the comment brackets of course }
{ private }
{ procedure mymax(var msg: TWMGETMINMAXINFO); message wm_getminmaxinfo; }
procedure Tform1.mymax(var msg : TWMGETMINMAXINFO);
Const
MyMinimumWidth = 600;
MyMinimumHeight = 440;
var
Width1,Height1,Top1,Left1:Integer;
TaskBarHandle: HWnd; { Handle to the Win95 Taskbar }
TaskBarCoord: TRect; { Coordinates of the Win95 Taskbar }
CxScreen, { Width of screen in pixels }
CyScreen, { Height of screen in pixels }
CxFullScreen, { Width of client area in pixels }
CyFullScreen, { Heigth of client area in pixels }
CyCaption: Integer; { Height of a window's title bar in pixels }
begin
{Remove the next two lines if you do not require a minimum width or height}
msg.minmaxinfo^.ptMinTrackSize.x := MyMinimumWidth;
msg.minmaxinfo^.ptMinTrackSize.y := MyMinimumHeight;
if FindWindow('Shell_TrayWnd',Nil)=0 then
begin
{Neither Windows 95 nor the NT Shell Update are running}
msg.minmaxinfo^.ptMaxTrackSize.x := GetSystemMetrics(SM_CXSCREEN);
msg.minmaxinfo^.ptMaxTrackSize.y := GetSystemMetrics(SM_CYSCREEN);
end
else
begin
{ Get coordinates of Win95 Taskbar }
GetWindowRect(TaskBarHandle,TaskBarCoord);
{ Get various screen dimensions and set form's width/height }
CxScreen := GetSystemMetrics(SM_CXSCREEN);
CyScreen := GetSystemMetrics(SM_CYSCREEN);
CxFullScreen := GetSystemMetrics(SM_CXFULLSCREEN);
CyFullScreen := GetSystemMetrics(SM_CYFULLSCREEN);
CyCaption := GetSystemMetrics(SM_CYCAPTION);
Width1 := CxScreen - (CxScreen - CxFullScreen) + 1;
Height1 := CyScreen - (CyScreen - CyFullScreen) + CyCaption + 1;
Top1 := 0;
Left1 := 0;
if (TaskBarCoord.Top = -2) and (TaskBarCoord.Left = -2) then
{ Taskbar on either top or left }
if TaskBarCoord.Right > TaskBarCoord.Bottom then
{ Taskbar on top }
Top1 := TaskBarCoord.Bottom
else
{ Taskbar on left }
Left1 := TaskBarCoord.Right;
{Set the minimum positions and sizes}
msg.MinMaxInfo^.ptMaxPosition.x := left1;
msg.MinMaxInfo^.ptMaxPosition.y := top1;
msg.minmaxinfo^.ptMaxTrackSize.x := Width1;
msg.minmaxinfo^.ptMaxTrackSize.y := Height1;
end;
end;
[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]