0

FormOnResizeイベントで発生するコードをいくつか配置しました。ただし、サイズ変更が大きい場合にのみイベントを呼び出すようです。これを変更する方法はありますか?

私が持っていると言う

procedure TForm1.Resize(Sender: TObject);
begin
  RePaint();
end

フォームのサイズが変更されるたびに(大きいまたは小さい)、再描画を実行したいと思います。幅/高さをチェックするチェックを追加できると思いますが、そうする場合は、なぜイベントのサイズ変更を使用するのでしょうか。たぶん、両方を行うサイズ変更以外の別のイベントがありますか?グレンありがとう

4

2 に答える 2

3

ここで2つの質問があります。

まず、OnResizeフォームのサイズがいずれかの方向に変更されたときにトリガーされます。限目。

第二に、フォームが小さくなったときになぜRepaint 機能しないのかは、おそらくあなたが自分で絵を描いているからです。通常は、Canvas.Cliprect塗り直すだけです。フォームが小さくなると、表示される領域は変更されず、クリッピング領域は空になります。結局のところ、以前よりもペイントすることはありません。フォームが一方向に大きくなると、同様のことが起こります。クリッピング領域は、フォームの表面に追加された部分のみで構成されます。繰り返しますが、前に表示された領域はそのまま残り、更新されません。フォームが両方向に拡大した場合にのみ、クリッピング領域を単一の長方形にすることができなくなり、完全なサーフェスになります。

解決策は、Windowsに、フォームのコンテンツ全体を任意のサイズ変更で再描画するように通知することですInvalidate(または、フォームをUpdateすぐに再描画する必要がある場合)。また、OnPaintイベントでカスタム描画を実行します。

于 2012-08-02T10:37:39.443 に答える
1

OnResize イベントは、フォームのサイズが以前よりも大きくなったり小さくなったりしても、なんらかの方法でサイズ変更されたときにトリガーされます。

これを証明するには、新しいプロジェクトを作成し、きれいなフォームにメモを置き、次のコードを OnResize イベントに追加します。

procedure TForm1.FormResize(Sender: TObject);
begin
  Memo1.Lines.Add(Format('%d,%d', [Width, Height]));
end;

プロジェクトを実行し、フォームの端をドラッグして大きくしたり小さくしたりします。常に発生し、イベントがトリガーされる回数もわかります。

また、フォームには OnPaint イベントが含まれていることにも注意してください。

于 2012-08-02T07:21:03.557 に答える