2009-05-14 25 views
6

私は問題を抱えています。GridPanelは最初にサイズを変更しません

私は通常、フォームのコントロールを整列するためにGridPanelsを使用します。しかし、それは厄介なバグです。 GridPanelの整列モードがalClientで、親ウィンドウを最大化すると、GridPanelはそのウィンドウの新しいサイズに調整されますが、グリッドに配置されているコントロールは変更されません。ウィンドウのサイズを変更する前と同じ位置に留まります。 これは、最初のウィンドウの最大化時にのみ発生します。ウィンドウが最初に手動でサイズ変更された場合は、すべてがOKです。私は、グリッドは、2番目のサイズ変更イベント(??)の後に子コントロールを調整すると思います。

このバグについては、GridPanelを正しく動作させるにはどうすればよいですか?それにメッセージを送るだけで十分かもしれません(しかし、どのようなメッセージ?)、私は知らない。私は、再配置、リフレッシュなどを使用しようとしたが、彼らは助けなかった。

事前にお返事ありがとうございます。

マリウス。

答えて

7

ああ、同様の問題もありました。これは、VCLのサイズ変更の問題に関連している可能性があります。 the fix by Andreas Hausladenを試してみるとよいでしょう。ほとんどの場合、私にとってはうまくいくようです。

1

いくつかのプロジェクトでこのエラーも発生しました。私はこれをどのように解決したか分かりません(これは私の以前の雇用主のためのプロジェクトで、私はこのソースコードにはもうアクセスできません)。 GridPanelが配置された親フレームまたはフォームを再描画/リフレッシュしたと思います。

0

オーナーのグリッドのサイズ変更GridPanel.Invalidate。 私はそれをテストしませんでした。私はそれが仕事だと願っています。

2

私は1つのトリックを見つけました。

OnResizeグリッドパネルの親のイベントで、グリッドパネルの幅を1ピクセル変更します。

サイズが変更され、その後gridPanelがわかります、そして

サンプルは以下の通りです。.. gridpanelにおけるサブコントロールの配置を変更。..

procedure TForm1.FormResize(Sender: TObject); 
begin 
    GridPanel1.Width := GridPanel1.Width - 1; // subtract 1 
    GridPanel1.Width := GridPanel1.Width + 1; // recover width by adding 1 
end; 
+0

http://qc.embarcadero.com/wc/qcmain.aspx?d=45827 – manlio

2

/私のために動作しませんコントロールを無効(幅を変更しますRAD Studioの最新バージョンでは何かが変更されましたか?)

はとにかくその線に沿って同様の、単純な回避策がある:やや関連

procedure TForm1.FormResize(Sender: TObject); 
begin 
    GridPanel1.ControlCollection.BeginUpdate; 
    GridPanel1.ControlCollection.EndUpdate; 
end; 
関連する問題