AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Formular und deren Komponenten skalierbar

Ein Thema von guevaradelaserna · begonnen am 7. Dez 2007 · letzter Beitrag vom 30. Dez 2008
Antwort Antwort
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#1

Re: Formular und deren Komponenten skalierbar

  Alt 8. Dez 2007, 11:23
Hi,
Du sagst, es hilft nicht wirklich...
Mein Post sollte ja nur ein Denkanstoss sein.

Prinzipiell denke ich schon, dass man mit ScaleBy arbeiten könnte.
Unten habe ich einen weiteren DENKASTOSS (KEINE LÖSUNG) gegeben, wie man die WM_SIZE Message behandeln könnte.
Das Beispiel funktioniert NUR für die Änderung der Breite - und hat jede Menge Schönheitsfehler...

Probleme dabei:
- bei mehrfachem Zoom ändern sich die Schriftgrößen --> müsste also durch "intelligentes" Runden der Zoomfaktoren abgefangen sein
- wenn man die höhe und breite des Fensters gleichzeitig ändert, dann muss man dafür sorgen, dass die Proportionen beibehalten werden...
- es sollte verhindert werden, dass das Fenster kleiner gezoomt werden kann, als es beim Programmstart war

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    ComboBox1: TComboBox;
    ProgressBar1: TProgressBar;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    breite_original: integer;
    breite_mininmal: integer;
  public
    { Public-Deklarationen }
    procedure WndProc(var Message: TMessage); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WndProc(var Message: TMessage);
var
  breite_neu: integer;
begin
  if Message.Msg = WM_SIZING then begin
    // die neuen Dimensionen merken
    breite_neu := Form1.Width;

    // Breite auf die ursprüngliche Breite zurückstellen - sonst funktionier das Skalieren nicht
    Form1.Width := breite_original;

    // das Fenster soll nicht kleiner gezoomt werden können, als es bei Programmstart war
    if breite_neu < breite_mininmal then begin
      breite_neu := breite_mininmal;
    end;
    
    // Fenster skalieren
    Form1.ScaleBy(breite_neu , breite_original);

    // alles neu zeichnen
    Form1.Realign;
    Form1.Repaint;
    Form1.Refresh;

    // die aktuelle Breite merken
    breite_original := Form1.Width;
  end;

  inherited WndProc(Message);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  breite_original := Form1.Width;
  breite_mininmal := breite_original;
end;

end.
Mit Anchors habe ich auch schon mal probiert - bin aber auch nicht glücklich damit geworden...

Falls Du eine Lösung findest, interessiert es mich...

Gruß,
Poolspieler
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz