Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: Pascal
Expertise: Beginner
Mar 19, 1997

How can I resize forms independent of screen resolution?

Question:
How can I resize forms independent of screen resolution?

Answer:

The following code comes to us via Peter Jagielski, a former Borland engineer, and myself. Peter is responsible for the SetSize procedure, which does most of the work. I put the code in a component wrapper so all you have to do is drop the component onto any form, call the component's execute procedure in FormCreate, and voila! an instantly sized form that fits nicely within your screen, above the Windows 95 Taskbar.

For Non-Windows 95 users, your form will be sized to maximized, but will be still be FormStyle := wsNormal. Select the text below, put it in a file, save the file as SizeTask.pas, add into your component library, drop it into a form, and watch it go!

unit Sizetask;



interface



uses

  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,

  Forms, Dialogs;



type

  TSizer = class(TComponent)

  private

    { Private declarations }

  protected

    { Protected declarations }

    procedure SetSize(MyForm: TForm);

  public

    { Public declarations }

    procedure   Execute;

  end;



procedure Register;



implementation



procedure TSizer.Execute;

begin

  SetSize(TForm(Owner));

end;



procedure TSizer.SetSize(MyForm: TForm);

var

  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,           { Height of client area in pixels }

  CyCaption:     Integer; { Height of a window's title bar in pixels }

begin

  TaskBarHandle := FindWindow('Shell_TrayWnd',Nil); { Get Win95 Taskbar handle }

  if TaskBarHandle = 0 then { We're running Win 3.x or WinNT w/o Win95

shell, so just maximize }

    MyForm.WindowState := wsMaximized

  else { We're running Win95 or WinNT w/Win95 shell }

    begin

      MyForm.WindowState := wsNormal;

      GetWindowRect(TaskBarHandle,TaskBarCoord);      { Get coordinates of

Win95 Taskbar }

      CxScreen      := GetSystemMetrics(SM_CXSCREEN); { Get various screen

dimensions and set form's width/height }

      CyScreen      := GetSystemMetrics(SM_CYSCREEN);

      CxFullScreen  := GetSystemMetrics(SM_CXFULLSCREEN);

      CyFullScreen  := GetSystemMetrics(SM_CYFULLSCREEN);

      CyCaption     := GetSystemMetrics(SM_CYCAPTION);

      MyForm.Width  := CxScreen - (CxScreen - CxFullScreen) + 1;

      MyForm.Height := CyScreen - (CyScreen - CyFullScreen) + CyCaption + 1;

      MyForm.Top    := 0;

      MyForm.Left   := 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 }

          MyForm.Top  := TaskBarCoord.Bottom

        else { Taskbar on left }

          MyForm.Left := TaskBarCoord.Right;

    end;

end;



procedure Register;

begin

  RegisterComponents('Samples', [TSizer]);

end;



end.

DevX Pro
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date