質問

長い時間をかけて取り組んでも解決できない問題があります。

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

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

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

マリウス。

役に立ちましたか?

解決

ああ、私も同様の問題がありました。これは、VCLにおけるサイズ変更の問題に関連している可能性があります。あなたはアンドレアスHausladenするによって修正しようとする場合があります。ほとんどの場合には私のために動作するようです。

他のヒント

一つコツを見つけました。

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; 

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

とにかくその線に沿って同様の、簡単な回避策があります:

procedure TForm1.FormResize(Sender: TObject);
begin
  GridPanel1.ControlCollection.BeginUpdate;
  GridPanel1.ControlCollection.EndUpdate;
end; 

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

所有者通話GridPanel.Invalidateのサイズ変更に。 私はそれをテストしていません。私はそれが仕事だ願っています。

scroll top