2012-01-05 10 views
8

コントロールのサイズをリサイズしてフォームのサイズを変更することができます。 ScaleBy(N、M)はうまく動作しますが、繰り返すと累積丸め誤差が発生します。これに対処するには、単にScaleBy()の前に、デフォルトの外観とサイズでフォームを再作成し、さまざまな値でScaleByを呼び出す呼び出しをします。私はパネル内で自分のフォームをホスティングすることでこれを行うことができますが、ScaleBy()の使用後にフォームをリセットするコールはありますか?ScaleBy()を使用した後、元の外観にデルファイのTFormをリセットする方法

編集 - 私はDelphi XE2を使用していて、コンポーネントや他のコード(有料または無料)で誰かの成功に興味があり、フォームをすばやくスケールすることができます。

+1

ユーザーはフォームを繰り返し実行してもらいたいのですか?個人的に私はちょうど作り直したい。 –

+0

@David:私は、スライダをドラッグして右に見えるようにしてから放置して、パフォーマンスの影響はないようにしたいだけです。 –

答えて

7

try EasySizeTFormResizer)コンポーネント。
TFormResizerコンポーネントは、フォームサイズが変更されたときにフォーム(またはパネル)のすべてのコントロールのサイズを変更します。
D5/7で数年前に正常に使用しました。 XE2を少し調整する必要があるかもしれません(私はXE2を持っていないので、テストはできません)。

使用法:

uses 
    ..., Easysize; 

type 
    TForm1 = class(TForm) 
    ...   
    procedure FormCreate(Sender: TObject); 
    procedure FormResize(Sender: TObject); 
    private 
    FR: TFormResizer; 
    end; 

... 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    FR := TFormResizer.Create(Self); 
    FR.ResizeFonts := True; 
    FR.InitializeForm; 
end; 

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

end. 
+0

ニース - 私は見て回ります。ありがとう。 –

+1

Easysizeは治療法として機能します。ネイティブソリューションが出現するまでは答えを受け入れません。ありがとう。 –

2

フォームのComponentsプロパティを使用して、フォームのすべての子コントロールを継承し、元の値に戻す方法があります。

次の資料ではサンプルコードがありますhttp://delphi.about.com/od/adptips2005/qt/storecontrolpos.htm

は、これはわずかに異なるためであるが、それはあなたのニーズにコードを変更するのは難しいにすべきではありません。

+0

これは本当に最初にそれらのコピーを保存する必要がありますか?なぜそれらを再描画する方法はありませんが、デフォルトサイズでですか? –

1

まず、オリジナルのスケールにスケールを調整し、その後、新しいスケールに拡大。たとえば、OnResizeイベントでフォームをスケールするには:

... 
    private 
    FDesignHeight: Integer; 
    FDesignWidth: Integer; 
    FPrevWidth: Integer; 
    end; 

... 

procedure TForm1.FormShow(Sender: TObject); 
begin 
    FDesignHeight := Height; 
    FDesignWidth := Width; 
    FPrevWidth := Width; 
    Scaled := True; 
end; 

procedure TForm1.FormResize(Sender: TObject); 
begin 
    if Scaled then 
    begin 
    DisableAlign; 
    ScaleBy(FDesignWidth, FPrevWidth); 
    ScaleBy(Width, FDesignWidth); 
    EnableAlign; 
    end; 
    FPrevWidth := Width; 
end; 

procedure TForm1.FormCanResize(Sender: TObject; var NewWidth, 
    NewHeight: Integer; var Resize: Boolean); 
begin 
    NewHeight := Round(NewWidth * FDesignHeight/FDesignWidth); 
end; 
+0

これはすてきな解決策です。ありがとう。 –

関連する問題