2011-07-15 11 views
1

私は5種類のサイズのフレームを持つアプリケーションを持っています。私は、あるフレームから別のフレームに移動するときにフレームに合わせてメインフォームを動的にサイズ変更したいと思います。Delphiでフレームのサイズに合わせてフォームのサイズを動的に変更

フレームのプロパティを使用してメインフォームをフレームに合わせることができますが、小さいフレームに移動すると、メインフォームはサイズを調整しません。

アイデア?

--edit

... 
TFormMain = Class(TForm) 
... 
public 
    FrameImportPackage: TFrameImportPackage; 
... 

procedure TFormMain.MenuPackagesImportClick(Sender: TObject); 
begin 
    if not (Assigned(FrameImportPackage)) then 
    begin 
     FrameImportPackage := TFrameImportPackage.Create(Self); 
     FrameImportPackage.LabelFrameCaption.Caption := 'Import or Edit a Package'; 
    end 
    else 
    begin 
     FrameImportPackage.BringToFront; 
    end; 

    FrameImportPackage.Parent := Self; 
end; 

--edit

よろしく、ピーター

+0

その時点で1つのフレームのみが表示されていますか?ユーザーの入力やその他の条件によって表示されるフレームが変更されますか?私はちょうどあなたが "現在のフレーム"すなわち 'mainForm.Width:= currentFrame.Constraints.MinWidth; 'のサイズに"あるフレームから別のものへ "移動するイベント/メソッドのメインフォームのサイズを設定すると言うでしょう。 – ain

+0

質問を編集して、パネル(質問のタイトルのように)とフレームの混乱を取り除くことができますか? – iamjoosy

+0

質問が更新されました。 –

答えて

4

私が正しくあなたの質問を理解していれば、あなたのサイズを変更しないフレームを持って、あなたがしたいですあなたのフレームに合わせてサイズを更新するフォーム。 DelphiがAutoSizeプロパティを使用してそれを処理させます。

フォームにAutoSize = Trueを設定します。


私はDelphi 2010を使用して、次のコードでAutoSizeをテストしてみた:

  • 新しいVCLアプリケーションを作成します。空白のフォームに1つのパネルをドロップし、名前をそのまま(Panel1)保存します。実行時にサイズを減らすコードを記述するので、パネルが小さすぎないことを確認してください。
  • フォームのAutoSizeプロパティをTrueに設定します。
  • パネルに2つのボタン、Button1Button2をドロップします。
  • ダブルボタンをクリックし、次のイベントハンドラをコピー&ペースト:

コード:

procedure TForm31.Button1Click(Sender: TObject); 
var NewR: TRect; 
begin 
    NewR := Panel1.BoundsRect; 
    Dec(NewR.Right, 32); 
    Dec(NewR.Bottom, 32); 

    Button1.Parent := Self; 
    Button2.Parent := Self; 

    Panel1.Free; 
    Panel1 := TPanel.Create(Self); 
    Panel1.BoundsRect := NewR; 
    Panel1.Parent := Self; 

    Button1.Parent := Panel1; 
    Button2.Parent := Panel1; 
end; 

procedure TForm31.Button2Click(Sender: TObject); 
begin 
    Panel1.Height := Panel1.Height - 32; 
    Panel1.Width := Panel1.Width - 32; 
end; 

これは、本質的にあなたの可能性2を処理するためのパネルのサイズを小さくする二つの方法を、提供しますシナリオ:Button1は、古いパネルを解放し、新しい、より小さいパネルを作成します。 Button2は、既存のパネルのサイズを直接変更します。どちらも期待どおりに動作します!

+0

私はそれをして、それは動作します。唯一の問題は、現在のフレームが最後のフレームよりも小さくなっても収縮しないことです。 –

+0

私はちょうどテストした、フォームは自動的にそのサイズがうまく更新されます。答えを編集して、私がテストに使用しているコードを表示します。使用しているDelphiのバージョンを指定する必要があります。フレームを表示したり隠したりするために使用しているコードを表示することさえできます。 –

+0

私はコードを表示するための質問を編集しました。私たちはDelphi XEを使用しています。 –

0

少なくともDelphi 2006には、フォームAutoSizeとは全く別のバグがあります。

TStringGridをClientWidthとClientHeightに変更すると、フォームにTStringGridを配置します(LeftとTopが等しい場合は0、等しくない場合は上部、CLientは問題ありません)。

通常、失敗すると、コントロールサイズが小さくなると、フォームサイズが縮小されません。

適切な修正はありません。オブジェクトをサイズ変更するときにフォームのclientwidthとclientheightを手動で設定する唯一の方法です。

言われています:フォームAutoSizeはうまく動作しません!これはVCLのBUGです。

関連する問題