2004. április 24., szombat
Resolution independent applications
Problem/Question/Abstract:
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 project�s DPR file to acomplish that:
// 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 won�t run fine at 640x480 (altough, nowadays I don�t
// kwonw many people with thatv resolution, so I think 800X600 is
// fine)
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 Form�s component�s 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.
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.
Don�t set the Form�s 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.
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése