Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Schriftgröße von Fenstergröße abhängig machen (https://www.delphipraxis.net/106946-schriftgroesse-von-fenstergroesse-abhaengig-machen.html)

xilos 19. Jan 2008 13:15


Schriftgröße von Fenstergröße abhängig machen
 
Hallo,

wie kann ich denn die Schriftgröße abhängig von der Fenstergröße machen? d.h. wenn ich das Fenster größer ziehe, soll sich die Schriftgröße auch verändern.
Außerdem hätte ich gerne, dass die Schrift immer zentriert ist, egal wie groß ich das Fenster ziehe.

Wie kann ich dies realisieren?

Dankeschön jetzt schon mal

Larsi 19. Jan 2008 13:21

Re: Schriftgröße von Fenstergröße abhängig machen
 
vielleicht kannste da sirgnedwie umrechen^^
also wenn fenstergröße > 100 dann
mach schrift größer

oder so

xilos 19. Jan 2008 13:24

Re: Schriftgröße von Fenstergröße abhängig machen
 
das würde aber sehr komplex werden wenn ich mehrere unterteilungen haben möchte z.B.
wenn fenstergröße < 50
wenn fenstergröße < 100
etc.

gibt es da nicht eine andere methode?

Larsi 19. Jan 2008 13:26

Re: Schriftgröße von Fenstergröße abhängig machen
 
oder fenstergröße durch 100 oder so ist schrift. vielleicht gibts da ne formel :)
ansonsten ausprobieren. desweiteren würde ich gerne mal wissen wofür du das überhautp brauchst?was ist zb wenn man das fenster ganz ganz ganz klein macht dann sieht deine from beschissen aus :D

xilos 19. Jan 2008 13:30

Re: Schriftgröße von Fenstergröße abhängig machen
 
ich brauch das nicht...aber mein lehrer ^^
stimmt an eine "formel" hab ich noch nicht gedacht....das probier ich mal aus...wenn jemand noch eine einfachere Lösung hat bitte noch mal posten ;D

PS: Wie kann ich die Schrift im Fenster zentrieren egal wie groß ich das ziehe?

Larsi 19. Jan 2008 13:32

Re: Schriftgröße von Fenstergröße abhängig machen
 
was meinste mit zentrieren?

Larsi 19. Jan 2008 13:33

Re: Schriftgröße von Fenstergröße abhängig machen
 
das mit der formel is doch ganz easy :)

einfach eine größe des forms nehmen zb 100 x 200 und die font ist dann zb schriftgröße 12!
das ist dann proportional :)

dann einfach dreisatz anwenden!

Dunkel 19. Jan 2008 13:35

Re: Schriftgröße von Fenstergröße abhängig machen
 
Delphi-Referenz durchsuchenTForm.ScaleBy

xilos 19. Jan 2008 13:52

Re: Schriftgröße von Fenstergröße abhängig machen
 
über TForm.Scaleby finde ich nichts in der delphi hilfe und weiß nicht was ich damit anfangen soll o.O

Dunkel 19. Jan 2008 13:59

Re: Schriftgröße von Fenstergröße abhängig machen
 
Zitat:

Zitat von xilos
über TForm.Scaleby finde ich nichts in der delphi hilfe und weiß nicht was ich damit anfangen soll o.O

Sorry, ScaleBy ist von TWinControl abgeleitet.

Zitat:

Zitat von Delphi OH
TWinControl.ScaleBy Methode

Skaliert das Steuerelement und seine untergeordneten Komponenten.

Delphi-Quellcode:
procedure ScaleBy(M: Integer; D: Integer);
Beschreibung
ScaleBy skaliert ein Steuerelement, ohne die Position seiner oberen linke Ecke zu verändern. Die Wirkung ist ähnlich wie bei einer Änderung der Eigenschaften Height und Width, es wird aber versucht, die relative Größe und Position der untergeordneten Steuerelemente durch eine entsprechenden Neuskalierung bzw. Neuanordnung beizubehalten.

Die Parameter M und D definieren einen Multiplikator und einen Divisor für die Skalierung. Wenn Sie ein Objekt beispielsweise auf 75 % seiner Originalgröße skalieren möchten, geben Sie für M 75 und für D 100 an. Sie können beliebige Wertpaare verwenden, die dieses Verhältnis ergeben. Das Objekt wird also auch mit M = 3 und D = 4 auf 75 % verkleinert.

Delphi-Quellcode:
  Form1.ScaleBy(200,100);
vergrößert die Form und alle Steuerelemente auf die doppelte Größe.

xilos 19. Jan 2008 14:27

Re: Schriftgröße von Fenstergröße abhängig machen
 
dankeschön...ich habs jetzt mal versucht aber irgendwie funktionierts nicht ^^
stimmt die implementierung so?

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    lblMinuten: TLabel;
    lblSekunden: TLabel;
    btnStarten: TButton;
    Timer1: TTimer;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Label1: TLabel;
    Label2: TLabel;
    StatusBar1: TStatusBar;
    Timer2: TTimer;
    procedure Timer2Timer(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure btnStartenClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private

    { Private-Deklarationen }
  public
    procedure ScaleBy(M: Integer; D: Integer);
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
    Minuten,
    Sekunden : Integer;

implementation

{$R *.dfm}

procedure TForm1.ScaleBy(M: Integer; D: Integer);
begin
  Form1.ScaleBy(200,100);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin

Sekunden := Sekunden - 1;
lblSekunden.Caption := IntToStr(Sekunden);

if (Minuten = 0) and (Sekunden = 0) then
  begin
    timer1.Enabled := false;
    MessageDlg('Ihr eingegebener Countdown ist abgelaufen!', mtConfirmation,[mbOk], 0);
  end
else if Sekunden < 0 then
  begin
    Sekunden := 59;
    lblSekunden.Caption := IntToStr(Sekunden);
    Minuten := Minuten - 1;
    lblMinuten.Caption := IntToStr(Minuten);
  end
else if (Minuten = 0) and (Sekunden <= 10) then
  begin
    lblSekunden.Font.Color := clRed;
  end;
end;

procedure TForm1.btnStartenClick(Sender: TObject);
begin
if timer1.enabled = true then
  begin
    btnStarten.Caption := 'Starten';
    timer1.Enabled := false;
  end
else
  begin
    btnStarten.Caption := 'Stoppen';
    timer1.Enabled := true;
  end;
end;




procedure TForm1.Button2Click(Sender: TObject);
begin
  Minuten := Minuten + 1;
  lblMinuten.Caption := IntToStr(Minuten);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Minuten := Minuten - 1;
  lblMinuten.Caption := IntToStr(Minuten);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if sekunden = 50 then
  begin
    minuten := minuten + 1;
    lblminuten.caption := IntToStr(Minuten);
    sekunden := 0;
    lblsekunden.caption := IntToStr(Sekunden);
  end
else if sekunden < 60 then
  begin
    Sekunden := Sekunden + 10;
    lblSekunden.Caption := IntToStr(Sekunden);
  end;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
if sekunden = 0 then
  begin
    Minuten := Minuten - 1;
    lblMinuten.caption := IntToStr(Minuten);
    Sekunden := 50;
    lblSekunden.caption := IntToStr(Sekunden);
  end
else
  begin
    Sekunden := Sekunden - 10;
    lblSekunden.Caption := IntToStr(Sekunden);
  end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
//Zeigt Zeit im 2. Panel der Statuszaeilte fortlaufend an
StatusBar1.Panels.Items[0].Text := 'Aktuelle Uhrzeit' + ' ' + TimeToStr(Now);
end;

end.

alzaimar 19. Jan 2008 15:50

Re: Schriftgröße von Fenstergröße abhängig machen
 
Hier, eine Form, ein Label, ein Button

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    lbSample: TLabel;
    btTest: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    fOrgWidth,
    fOrgHeight : Integer;
    fOrgFontHt : Integer;
    fBtRect : TRect;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  fOrgHeight := Height;
  fOrgWidth := Width;
  fOrgFontHt := Font.Height;
  fBtRect := btTest.BoundsRect;
end;

procedure TForm1.FormResize(Sender: TObject);
Var
  txWd : Integer;

begin
  font.Height := Muldiv (fOrgFontht,Height, fOrgHeight);
  txWd := lbSample.Canvas.TextWidth(lbSample.Caption);
  lbSample.Left := (width - txwd) div 2;
  btTest.left := muldiv (fBtRect.left, width, fOrgWidth);
  btTest.Top := muldiv (fBtRect.Top, Height, fOrgHeight);
  btTest.Width := muldiv (fBtRect.Right-fBtRect.left, width, fOrgWidth);
  btTest.Height:= muldiv (fBtRect.Bottom-fBtRect.Top, Height, fOrgHeight);
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz