7

長い時間をかけて解決しようとしても解決できない問題があります。

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

このバグが発生した場合、GridPanel を正しく動作させるにはどうすればよいですか? メッセージを送信するだけで十分かもしれません (しかし、何のメッセージでしょうか?)、私にはわかりません。Realign、Refresh などを使用しようとしましたが、役に立ちませんでした。

事前にご協力いただきありがとうございます。

マリウス。

4

5 に答える 5

9

ああ、私も同じような問題を抱えていました。VCL のサイズ変更の問題に関連している可能性があります。Andreas Hausladen による修正を試してみてください。ほとんどの場合、それは私にとってうまくいくようです。

于 2009-05-14T12:57:04.133 に答える
3

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

gridpanelの親の場合は、OnResizegridpanelの幅を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; 
于 2009-09-02T09:17:14.233 に答える
1

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

于 2009-05-14T11:36:26.340 に答える
-1

所有者のサイズ変更時に GridPanel.Invalidate を呼び出します。私はそれをテストしませんでした。それが仕事であることを願っています。

于 2009-05-14T12:16:39.737 に答える