Mega Code Archive

 
Categories / Delphi / Examples
 

Resolution independent applications

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.