Form skalieren

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Andromeda
Beiträge: 120
Registriert: So 4. Jan 2015, 20:18

Form skalieren

Beitrag von Andromeda »

Hallo,

mein Programm ist jetzt von der Funktion her fertig. Jetzt geht es an die Optik. Ich möchte, dass man das Programmfenster mitsamt dem ganzen Inhalt (Buttons, Schrift, Menüleiste usw.) skalieren, also in der Größe verändern kann.

Ich habe schon im Internet geschaut, aber nur Anleitungen für Delphi gefunden. Die funktionieren aber bei Lazarus nicht, weil es die Eigenschaft "scaled" nicht gibt. Ich habe auch nichts anderes, vergleichbares gefunden.

Ich wäre sehr dankbar, wenn mir jemand auf die Sprünge helfen könnte.

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: Form skalieren

Beitrag von theo »


Andromeda
Beiträge: 120
Registriert: So 4. Jan 2015, 20:18

Re: Form skalieren

Beitrag von Andromeda »

Vielen Dank für die Antwort.
Ich habe versucht, den Text zu übersetzen, aber leider ist mir das nicht gelungen. Gibt es für das Skalieren vielleicht auch irgendwo etwas auf deutsch?

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Form skalieren

Beitrag von Mathias »

Was willst du genau skalieren ?

Sollen z.B. die Buttons proportional zum Form vergrössern ?
Oder willst du einfach haben, das ein Button immer rechtsbündig ist ?
Oder soll ein Label grösser werden, wen das Form wächst ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Andromeda
Beiträge: 120
Registriert: So 4. Jan 2015, 20:18

Re: Form skalieren

Beitrag von Andromeda »

Ja, eigentlich will ich alles propotional zum Formular skalieren, also Buttons, Panels, Schrift, Labels, Edits, Menüs, Statuszeile usw. Oder geht das nicht?
Auch wenn es viel Arbeit macht, das würde ich auf mich nehmen. Wenn ich nur wüsste, wie. Mir würde eine grobe Beschreibung reichen.

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Form skalieren

Beitrag von Mathias »

Ein kleiner Anhaltspunkt, verwende Onresize des Forms

Das sieht dann etwa so aus, ohne rechnen geht nichts.

Code: Alles auswählen

procedure TForm1.FormResize(Sender: TObject);
begin
  Button1.Left := Width div 20;
  Button1.Top := Height div 20;
  Button1.Width := Width * 90 div 100;
  Button1.Height := Height * 90 div 100;
end;  
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 170
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Lazarus 3.8 FPC 3.2.2 x86_64-win64-win32/win64 x86_64-linux-gtk2
CPU-Target: i386, win64, arm

Re: Form skalieren

Beitrag von willi4willi »

Hallo,

ich hatte mal vor, ein ganzes Formular auf Bildschirmgröße zu vergrößern.

Vielleicht hilft Dir das weiter, wenn Du es für Deine Bedürfnisse anpasst?

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
    scalfactor:real;
begin
  left:=0; Top:=0;
  scalfactor:=screen.Height/Height;
  if (screen.Height/Height)<(screen.Width/Width)
  then scaleby(screen.Height,Height)
  else scaleby(screen.Width,Width);
  Height:=screen.Height;
  Width:=screen.Width;   
end;
 
 

Viele Grüße

Willi4Willi

------------

Andromeda
Beiträge: 120
Registriert: So 4. Jan 2015, 20:18

Re: Form skalieren

Beitrag von Andromeda »

Hallo,

ich habe im Internet Lazarus-Code gefunden, der eigentlich das macht, was ich will. Wenn ich diesen Code in das OnCreate-Ereignis des Formulars packe, werden alle Buttons, Panels, Schriften, Labels und Edits beim Starten des Programms im Verhältnis zur Formulargröße angepasst, nur die Status- und Menüleiste nicht. Aber leider funktioniert das nur im OnCreate-Ereignis und nicht im OnResize-Ereignis. Warum funktioniert das im OnResize-Ereignis nicht?

Code: Alles auswählen

 
procedure TFormHaupt.FormResize(Sender: TObject);
const
  breite = 1144; //{Monitorauflösung, bei der das Fenster erstellt wurde}
  hoehe = 699;
var
  schrift: integer;
begin
  schrift := pixelsperinch-96;
  if screen.width>breite then begin
    if schrift>0 then
      {für große Schriften}
      ScaleBy(round(((screen.width/breite)*100)-((screen.width/breite-1)*100)),100)
    else
      {für kleine Schriften}
      ScaleBy(round(((screen.width/breite)*100)),100);
  end
  else begin
    if screen.width=breite then
      ScaleBy(round(((screen.width/breite)*100)-schrift),100)
    else begin
      if schrift>0 then
        {für große Schriften}
        ScaleBy(round((100-(breite/screen.width-1)*100)-(breite/screen.width-1)*100),100)
      else
        {für kleine Schriften}
        ScaleBy(round((100-(breite/screen.width-1)*100)),100);
      end;
    end;
end;
 

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Form skalieren

Beitrag von Mathias »

nur die Status- und Menüleiste nicht.
Ich habe noch nie eine Anwendung gesehen, bei der das grösser ist, als die Vorgabe des Betriebssystems.
So wie ich dich verstehe, willst du ein Games schreiben, bei dem alles grösser ist.

Einer Alternative wäre, wen du die Auflösung des Bildschirmes änderst.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten