Avatar billede Slettet bruger
09. oktober 2001 - 10:57 Der er 4 kommentarer og
1 løsning

Formens højde og bredde

Jeg har et mindre problem. Hvordan får man formen til at være i % af skærmen. Altså således at ens form er den samme størrelse på skærmen alt efter om man kører 800*600 eller 1200*1100 whatever.
Avatar billede borrisholt Novice
09. oktober 2001 - 11:11 #1
Der findes et object der hedder Screen på det kan du også få fat på Skærmens højde og brede ..

med Screen.Height og Screen.Width

JEsn B
Avatar billede morten_s Nybegynder
09. oktober 2001 - 11:14 #2
Prøv at kig lidt på denne kode som er hentet fra:
http://www.delphi3000.com/articles/article_1482.asp



You have to modify your project´s 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 won´t run fine at 640x480 (altough, nowadays I don´t
// 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 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.
//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.
  - 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.
Avatar billede martinlind Nybegynder
09. oktober 2001 - 11:47 #3
Hvis du kan leve med det kan du også sætte din form type til dialog, så holder den størelsen
Avatar billede spectre Nybegynder
09. oktober 2001 - 12:52 #4
i din Form1.Create kan du sætte følgende kodestump:

Form1.Height := Screen.Height * (Procent div 100);
Form1.Width  := Screen.Width  * (Procent div 100);

Og istedet for Procent skriver du hvor stor en del af skærmen formen skal dække (i %)...

Håber det virker...

SpECTre
Avatar billede spectre Nybegynder
09. oktober 2001 - 12:55 #5
nejnejnej... lad mig lige tænke mig om... :)

Du går du ind i lommeregner (calc) og deler procenten med 100 (altså for 80% skal du regne: 80/100 = 0.8)

i stedet for \"(Procent div 100)\" skriver du tallet du får ud af lommeregneren (f.eks. 0.8)

så koden bliver:

Form1.Height := Screen.Height * 0.8;
Form1.Width  := Screen.Width  * 0.8;

(Selvfølgelig hvis formen skal dække 80% af skærmen... :))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester