Forms und Bilder o.ä. auf Bildschirmauflösun skalieren

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
dummy
Beiträge: 10
Registriert: Sa 28. Mär 2015, 02:05

Forms und Bilder o.ä. auf Bildschirmauflösun skalieren

Beitrag von dummy »

Hi!

Ich habe eine Anfänger (?) Frage.
Wie erreiche ich, dass mein Programm auf diversen Bildschirmauflösungen skaliert?
Es sollte mind. den Bereich 1024x768 (4:3) bis 1600:900 (16:9) "schaffen".
Muss da z.b. Forms in verschiedenen Grössen erstellen, bzw. bei Bildern sogar alle möglichen Grössen einbinden, um nach Ermitteln der Auflösung diese anzueigen?

VG!

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

Re: Forms und Bilder o.ä. auf Bildschirmauflösun skalieren

Beitrag von Mathias »

Wie erreiche ich, dass mein Programm auf diversen Bildschirmauflösungen skaliert?

Meinst, das alles skaliert, Buttons, Schriften etc ?

Oder meinst du, das einfach der Bildschirm optimal ausgenutzt wird, so wie es zB. eine Textverarbeitung macht ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wennerer
Beiträge: 507
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Forms und Bilder o.ä. auf Bildschirmauflösun skalieren

Beitrag von wennerer »

Hi dummy,
ich bin auch kein Profi, hab mir aber mal was gebastelt das halbwegs funktioniert hat. Kannst ja mal damit rum probieren.
Vielleicht hilft es dir.

Gruß
Bernd

Code: Alles auswählen

 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Label1 : TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
const breite  = 1280; //ist meine Auflösung
      hoehe   =  800;
 
var
  Form1        : TForm1;
  fakx,faky    : double;
  FRB          : integer;
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
var h,w    :double;
begin
  h := Screen.Height;
  w := Screen.Width;
  fakx := w/breite;
  faky := h/hoehe;
 
 
  Form1.Left     := round(40 * fakx);
  Form1.Top      := round(50 * faky);
  Form1.Width    := round(1200 * fakx);
  Form1.Height   := round(700 * faky);
  Form1.Color    := clwhite;
  Form1.Font.Color:= clblack;
  {$IfDef linux}
   Form1.Font.Name   := 'Ubuntu';//'Arial';
   Form1.Font.Height := round(30 * faky);
 
   FRB := round(25 * faky);
  {$endif}
  {$IfDef windows}
   Form1.Font.Name   := 'Tahoma';//'Arial';
   Form1.Font.Height := round(35 * faky);
   FRB := round(30 * faky);
  {$endif}
 
  Form1.Caption  := 'Skalieren';
 
 
  Label1             := TLabel.Create(self);
  Label1.Parent      := Form1;
  Label1.AutoSize    := false;
  Label1.Left        := round(50 * fakx);
  Label1.Top         := round(20 * faky);
  Label1.Width       := round(1120 * fakx);
  Label1.Height      := round(80 * faky);
  Label1.WordWrap    := true;
  Label1.Font.Height := FRB;
  Label1.Caption     :='Sollte größer und kleiner werden!';
end;
 
end.
 

dummy
Beiträge: 10
Registriert: Sa 28. Mär 2015, 02:05

Re: Forms und Bilder o.ä. auf Bildschirmauflösun skalieren

Beitrag von dummy »

Hi,

@Bernd: danke, das werde ich einmal aussprobieren.
@Mathias: Ich habe mit einem Grafikprogramm z.B. ein Stopschild gemalt, das als visualiserender Teil z.B. eine Fehlermeldung o.ä. verdeutlichen soll. Dies ist nun ein PNG. Während es auf Rechnern mit hoher Auflösung z.b. korrekt dargestellt wird, nimmt es bei geringer Auflösung fast den halben Bildschirm ein. Und ja, in diesem Fall muss das Bild irgendwie skaliert werden. Andere Programme kriegen das auch hin ;)

VG

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

Re: Forms und Bilder o.ä. auf Bildschirmauflösun skalieren

Beitrag von theo »

Den Thread hier gab es auch noch: viewtopic.php?p=88759#p88759

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

Re: Forms und Bilder o.ä. auf Bildschirmauflösun skalieren

Beitrag von Mathias »

@Mathias: Ich habe mit einem Grafikprogramm z.B. ein Stopschild gemalt, das als visualiserender Teil z.B. eine Fehlermeldung o.ä. verdeutlichen soll. Dies ist nun ein PNG. Während es auf Rechnern mit hoher Auflösung z.b. korrekt dargestellt wird, nimmt es bei geringer Auflösung fast den halben Bildschirm ein. Und ja, in diesem Fall muss das Bild irgendwie skaliert werden. Andere Programme kriegen das auch hin ;)

Wen es nur um die Images geht, könnte folgender Anhang eine Lösung sein.
Dateianhänge
test.zip
(202.95 KiB) 81-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Forms und Bilder o.ä. auf Bildschirmauflösun skalieren

Beitrag von Michl »

Nur als Info am Rande:

In den nächsten Wochen wird Lazarus 1.8 RC 1 rauskommen. Ondrej hat dort ein neues Feature einer automatischen Skalierung implementiert. Einfach das Formularproperty Scaled auf True stellen und sich freuen, daß die Formulare bei Rechnern mit hoher Auflösung passend sind.

Wer es nicht abwarten kann, kann jetzt schon per SVN Lazarus Trunk oder Lazarus 1.8 laden und testen (was sehr gewünscht ist, damit in der stabilen Version alle Bugs beseitigt sind).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten