Komponentengröße

Für Fragen von Einsteigern und Programmieranfängern...
hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Komponentengröße

Beitrag von hbr »

Hallo Forum,
wie kann man die Größe von: z.B. TEdit, TLabel, TImages usw. einer Formgröße anpassen lassen.
Wenn man z.B. eine Form kreiert und dort irgendwelche Komponenten platziert und das Programm
in den Vollbildschirm - Modus schaltet, dann sehen die einzelnen Komponenten ziemlich verloren aus und die Schrift ist auch zum Bildschirmverhältnis dann ziemlich klein.

Gibt es keine Möglichkeit, die Komponenten Proportional zur Bildschirmgröße mit wachsen zu lassen.
Bei einem TEdit oder TLabel natürlich auch die Schriftgröße und z.B. bei einem TStringgrid auch den Inhalt.

Halt alle Komponenten.

Wie immer, für eine Antwort Dankbar. :)
Gruß

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Komponentengröße

Beitrag von MacWomble »

Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Komponentengröße

Beitrag von hbr »

Danke,
aber das funktioniert ja gar nicht.
Die Schrift eines TLabels bleibt immer gleich groß.
Ich habe ein SeitenPanel: TPairSplitterSide mit jeweils einem TImage (Stretch-True).
Dort Positionierte TLabels behalten immer ihre eingestellte Schriftgröße.
Wie kann man die Schriftgröße proportional zur Form bzw. Bildgröße(TImage) verändern?

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

Re: Komponentengröße

Beitrag von Mathias »

Man könnte es so lösen, aber elegant finde ich es nicht.

Code: Alles auswählen

procedure TForm1.FormResize(Sender: TObject);
begin
  Label1.Font.Height := Height div 10;
  Label1.Top := Height div 4;
  Label1.Left := Left div 8;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: Komponentengröße

Beitrag von hbr »

Danke,
Seltsam, also wenn Size auf 0 steht und nur Label1.Font.Height := Height div 28; in FormResize verwendet wird funktioniert es mit meinem Hintergrundbild Perfekt.
Sogar bei selbst Definierten Textgrößen in Windows(110, 120, 150% usw.) unter Textanpassungen. :)

TerribleCode
Beiträge: 38
Registriert: Di 18. Nov 2014, 22:50
OS, Lazarus, FPC: Windows 7 [x64]; Lazarus 1.6.4 [i386-win32]; FPC 3.0.2 [win32 i386]
CPU-Target: 64Bit

OptimalFill

Beitrag von TerribleCode »

Für TLabel gibt es die Eigenschaft OptimalFill.
Sichtbar wird diese Eigenschaft aber erst bei Änderung der Caption, der Breite oder Höhe.
Kennt jemand einen Weg, dies von Hand auszulösen, ohne das Label zu manipulieren?

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Komponentengröße

Beitrag von Frank Ranis »

Hallo ,

ich benutze seit Jahren die Unit Easysize.pas , um '''''alle''''' visuellen Komponenten auf dem Form zu skalieren.

Ist ursprünglich für Delphi gebaut und mit leichten Modifikationen auch unter Lazarus nutzbar.

Zu finden ist die Unit unter

http://torry.net/quicksearchd.php?String=resize&Title=Yes
hier dann TFormResizer v.2.0 herunterladen .


1) Easysize.pas auspacken und folgende Teile ändern.

Code: Alles auswählen

{ ****************************************************************** }
{                                                                    }
{   VCL component TFormResizer:  Resizes all components on a form    }
{                                                                    }
{   See accompanying Readme.txt file for usage instructions          }
{                                                                    }
{   Version 2.0 (May 1999)                                           }
{                                                                    }
{   Versions 1.0, 1.1 written by David A. Price, dprice@erols.com    }
{   Version 2.0 adds font-resizing enhancements contributed          }
{   by Wolfgang Kleinrath, office@kleinrath.at                       }
{                                                                    }
{   Copyright © 1999 by David A. Price                               }
{   http://www.compcreate.com                                        }
{   This file may be redistributed freely if not altered             }
{   Suggestions are welcome                                          }
{   Offered "AS IS" -- no warranties                                 }
{                                                                    }
{ ****************************************************************** }
unit Easysize;
 
interface
 
{$MODE DELPHI} // <----------------------------- Einfügen
 
uses Messages, SysUtils, Classes, Controls,
        Forms, Graphics, StdCtrls;
 
// folgendes noch ausklammern
 
//{$IFDEF WIN32}                         
//{$R Easysize.d32}                       
//{$ELSE}                                       
//{$R Easysize.d16}             
//{$ENDIF}                           
 
 

2) ein neues Projekt starten und ein paar Komponeten auf die Form schmeißen (Buttons , Label's u.u.u)
3) Im Objektinspektor einen Font für das Formular auswählen , z.B. Arial , Fett , 10

4) Die Unit Easysize oben unter uses einbinden

Code: Alles auswählen

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Easysize; // <----------- die unit Easysize einbinden
 

5) eine Variable für den Formreziser anlegen

Code: Alles auswählen

type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    es:TFormResizer; // <----------------------- Variable für den TFormreziser
  end;     
 

6) In form oncreate folgende Einträge einbauen .

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
 es:=TFormResizer.Create(form1); // <----- TFormResizer Objekt erzeugen
 es.EnforceMinSize:=false; // <----- legt fest , ob man die Form kleiner machen kann , als die Entwurfsgröße , false läßt dieses zu
 es.ResizeFonts:=true; // <----- Fonts mit zoomen ja / nein
 es.MinFontSize:=2; // <----- Minimale Fontgröße
 es.MaxFontSize:=30; // <----- Maximale Fontgröße
 es.InitializeForm// <----- Initalisieren des TFormResizer's , ganz wichtig , sonst ballert es !!!!
end;     
 

7) Unter form onresize noch folgenden Eintrag

Code: Alles auswählen

procedure TForm1.FormResize(Sender: TObject);
begin
  es.ResizeAll;
end;   
 


8) Programm starten und ausprobieren.
Beim Ziehen der Form sollten nun alle Komponenten und auch deren Fonts skaliert werden .


Gruß

Frank
Dateianhänge
Max
Max
Min
Min
Klein.jpg (10.46 KiB) 3533 mal betrachtet
www.flz-vortex.de

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Komponentengröße

Beitrag von Marsmännchen »

Muss ich unbedingt ausprobieren. Hört sich nach großem Kino an :D . Danke für den Hinweis
Ich mag Pascal...

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

Re: Komponentengröße

Beitrag von Mathias »

Ich habe es gerade probiert, unter Windows geht es, aber unter Linux kommt ein SIGSEV:
Projekt project1 hat Exception-Klasse »External: SIGSEGV« ausgelöst.

In Datei 'include/font.inc' in Zeile 1236


Dies ist in folgender Funktion:

Code: Alles auswählen

function TFont.GetCharSet: TFontCharSet;
begin
  Result := FCharSet;  // Hier knallts !
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Komponentengröße

Beitrag von Marsmännchen »

Mathias hat geschrieben:Ich habe es gerade probiert, unter Windows geht es, aber unter Linux kommt ein SIGSEV...

Wundert einen iwie nicht, wenn man weiß, dass Delphi voll auf Windows setzt :roll:
Ich jedenfalls hab Rad Studio 10.1 Berlin seit kurz nach der Installation nicht mehr benutzt. Ich habe Java und C++ beiseite geschoben, weil ich Lazarus einfach viel besser finde :D
Ich mag Pascal...

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Komponentengröße

Beitrag von Frank Ranis »

Hallo ,

von Linux habe ich leider NULL Ahnung .

Aber eventuelle können ja mal die Spezialisten hier einen Blick auf die Unit werfen und sie Linux-fähig machen.
Der Form-Reizer an sich ist ne feine Sache und ja auch sehr einfach zu benutzen .
Wäre schade , wenn es nur unter WIN läuft.

Gruß

Frank
www.flz-vortex.de

wp_xyz
Beiträge: 4891
Registriert: Fr 8. Apr 2011, 09:01

Re: Komponentengröße

Beitrag von wp_xyz »

Leider schreibt der Autor im readme.txt:
This file may be redistributed freely if not altered

Und ohne Änderungen wird man den Linux-Support kaum hinbekommen...

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

Re: Komponentengröße

Beitrag von Andromeda »

So etwas wie EasySize habe ich schon lange gesucht. Ich habe es unter Windows ausprobiert und auch alle Änderungen gemacht, wie beschrieben. Aber beim ersten Ausprobieren kommt die folgende Fehlermeldung:
Bild3.jpg

Damit ist ein Anfänger natürlich vollkommen überfordert. Was könnte ich machen?

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

Re: Komponentengröße

Beitrag von theo »

Bei mir geht's unter Linux GTK2 64 mit zwei Änderungen.

Zeile 125 (in SetCompFont) : SetOrdProp(Component, ptrPropInfo, PtrInt(aFont));
Zeile 249: if FCompFont.Size=0 then InitFontSize := 10 else InitFontSize:=FCompFont.Size;

Den Rest des Codes könnte man vllt. auch noch anschauen auf Pointer Casting, aber so läuft es erstmal.

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

Re: Komponentengröße

Beitrag von Mathias »

Bei mir geht's unter Linux GTK2 64 mit zwei Änderungen.

Welche Unit ?
In der Easysize.pas, steht bei mir an den beiden Zeilen ganz etwas anderes.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten