Examples Delphi

Title: resolution independent applications
Question: Have you ever wondered how to display your forms and components always the same size no matter what the screen resolution is?
Answer:
You have to modify your projects DPR file to acomplish that:
//MWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMW
// Modify your projects code to achieve resolution independent
// applications. I have found that this trick only works for
// resolutions greater than the resolution you design the forms, for
// example if you design at 800x600 you can use your application at
// a resolution of 1024 x 768 or greater.
// However it wont run fine at 640x480 (altough, nowadays I dont
// kwonw many people with thatv resolution, so I think 800X600 is
// fine)
//MWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMW
program TestResolution;
uses
Forms,
Dialogs,
Classes,
TypInfo,
Windows,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.RES}
const
//If form is designed in 800 x 600 mode
ScreenWidth: LongInt = 800;
ScreenHeight: LongInt = 600;
var
vi_Counter1, vi_Counter2: Integer;
NewFormWidth: Integer;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
NewFormWidth := GetSystemMetrics(0);
with Application do
for vi_Counter1 := 0 to ComponentCount-1 do
begin
//Find all the Auto-create forms
if Components[vi_Counter1]is TForm then
with (Components[vi_Counter1]as TForm)do
begin
Scaled := True;
if screen.Width ScreenWidth then
begin
Height := longint(Height)*longint(screen.Height) div
ScreenHeight;
Width := longint(Width)*longint(screen.Width) div
ScreenWidth;
ScaleBy(screen.Width, ScreenWidth);
//Now Scale the Forms components Font
for vi_Counter2 := 0 to ControlCount-1 do
with Components[vi_Counter2] do
//Use RTTI information to find for a Font property
if GetPropInfo(ClassInfo, 'font')nil then
Font.Size := (NewFormWidth div ScreenWidth)
*font.Size;
end;
end;
end;
Application.Run;
end.
//MWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMW
finally some aditional considerations:
- You will have to scale every form create on the fly.
- Use only TrueType fonts, not Bitmapped fonts to avoid problems.
- Dont set the Forms Position property to poDesigned, when
scalling it could be off the screen.
- Don't change the PixelsPerInch property of the form.
- Don't crowd controls on the form - leave at least 4 pixels
between controls, so that a one pixel change in border locations
(due to scaling) won't show up as ugly overlapping controls.