フォームのリサイズ完了後に処理を行うには

解決


るるとん@K  2004-05-16 00:43:44  No: 8992  IP: [192.*.*.*]

APIかなにかで出来るのでしょうか?
宜しくお願いします

編集    削除
sss  2004-05-16 00:49:14  No: 8993  IP: [192.*.*.*]

OnResize じゃだめなの? ヘルプより

OnResize イベントは,コントロールのサイズが変更された直後に発生します

編集    削除
るるとん@K  2004-05-16 01:01:29  No: 8994  IP: [192.*.*.*]

onResizeはフォームサイズ変更中、マウスが移動する度に発生します

編集    削除
sss  2004-05-16 01:09:58  No: 8995  IP: [192.*.*.*]

> onResizeはフォームサイズ変更中、マウスが移動する度に発生します

procedure TForm1.FormResize(Sender: TObject);
begin
  Memo1.Lines.Add('OnResize');
end;

これで確認したけど、そんなことはないぞ。ヘルプどおり。

編集    削除
るるとん@K  2004-05-16 01:16:44  No: 8996  IP: [192.*.*.*]

>procedure TForm1.FormResize(Sender: TObject);
>begin
>  Memo1.Lines.Add('OnResize');
>end;
大量にAddされますよ

編集    削除
るるとん@K  2004-05-16 01:18:38  No: 8997  IP: [192.*.*.*]

Win98だからですか?

編集    削除
sss  2004-05-16 01:25:43  No: 8998  IP: [192.*.*.*]

ふーん、そうなの?

type
  TForm1 = class(TForm)
    Memo1: TMemo;
  private
    { Private 宣言 }
  public
    procedure WMSize(var Msg:TWMSize);message WM_SIZE;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.WMSize(var Msg: TWMSize);
begin
  inherited;
  if Msg.SizeType = SIZE_RESTORED then
    Memo1.Lines.Add('Sized!');
end;

これではどう?

編集    削除
るるとん@K  2004-05-16 01:30:38  No: 8999  IP: [192.*.*.*]

onResizeと同じ事になります

編集    削除
sss  2004-05-16 01:35:47  No: 9000  IP: [192.*.*.*]

そう、じゃ、そっちの環境では、サイズ完了が頻繁に起こっている、という
ことで、<ほんと>の完了と区別するのは難しそう。マウスが押されている
かどうかを判断するくらいですかね。

編集    削除
るるとん@K  2004-05-16 01:43:02  No: 9001  IP: [192.*.*.*]

onResizeって環境によって違うんですね!知りませんでした。
>マウスが押されているかどうかを判断するくらいですかね。
Form1のonMouseDownで
 ReleaseCapture;
 Self.Perform(WM_NCLBUTTONDOWN,HTCAPTION,0); 
というようにしてサイズ変更を開始した場合
>ReleaseCapture;
があるのでonMouseUpが利用できないのです
それからそちらのOSは何ですか?

編集    削除
sss  2004-05-16 03:52:52  No: 9002  IP: [192.*.*.*]

Form の端は、クライアント領域じゃないので OnMouseDown/Up イベントは
利用できない。GetAsyncKeyState(VK_LBUTTON) の戻り値の最上位ビット
を調べるくらいかな。

編集    削除
Mark  2004-05-16 04:24:45  No: 9003  IP: [192.*.*.*]

Windows、画面のプロパティ、効果
「ウィンドウの内容を表示したままドラッグする」
これ有効にしてるとOnResizeが大量に実行される。

編集    削除
るるとん@K  2004-05-16 04:59:28  No: 9004  IP: [192.*.*.*]

>Windows、画面のプロパティ、効果「ウィンドウの内容を表示したままドラッグする」これ有効にしてるとOnResizeが大量に実行される。
そうなんですか。
サイズ変更中、内容を隠そうとしたのですが、
これをチェックしている人は、画面がちらつくのを覚悟の上なわけですね。
解決とします。ありがとうございました。

編集    削除
sss  2004-05-16 07:04:42  No: 9005  IP: [192.*.*.*]

> 解決とします。

解決してないよー。
マウスボタンの押し下げを検出する件はどうなったのよ?

編集    削除
るるとん@K  2004-05-16 19:09:37  No: 9006  IP: [192.*.*.*]

>マウスボタンの押し下げを検出する件はどうなったのよ?
マウスボタンの押し下げを検出する必要は無くなりました。
有り難うございました

編集    削除
sss  2004-05-16 21:34:37  No: 9007  IP: [192.*.*.*]

> マウスボタンの押し下げを検出する必要は無くなりました。

そうですか。で、どうやって、

> フォームのリサイズ完了後に処理を行うには

この問題を可決したのか、今後の参考のために教えてください。

編集    削除
るるとん@K  2004-05-16 22:11:46  No: 9008  IP: [192.*.*.*]

>フォームのリサイズ完了後に処理を行うには
onResizeメソッドを使用します
設定によりリサイズ中動かすたびに呼び出され、
画面がちらつくことがありますが、
これは、ユーザーが任意に設定したものであり、
画面のちらつきは承知していると考え、
リサイズ中に頻繁に呼び出されてもよい
と、考えました

編集    削除
sss  2004-05-17 01:32:27  No: 9009  IP: [192.*.*.*]

> これは、ユーザーが任意に設定したものであり、

しかし、開発者である るるとん@K さんでさえ、最初は知らなかったのでは?
ユーザがどうして「承知している」と考えられますか?

編集    削除
るるとん@K  2004-05-17 02:04:01  No: 9010  IP: [192.*.*.*]

私がonResizeで行おうとしていた処理は、パネル等の位置の修正などであり、
途中で頻繁に呼び出されても、特に支障はありません。

編集    削除
sss  2004-05-17 04:00:27  No: 9011  IP: [192.*.*.*]

> 特に支障はありません。

つまり、どうでもいいことをわざわざ質問したのですね。
分かりました。答える方がバカでした。

編集    削除