- ベストアンサー
Delphiでアプリが動いたら感知するイベント?
みきだぞ。 メモアプリ作成中~☆ でもでもアプリが動いた時に感知するイベント?がわからないの。 リサイズに関しては分かったんだけど。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>なんかtimer使うとウィンドウを動かす時にカクカクしちゃうし。 timerだと無条件に割り込んでしまいますからね。DelphiではApplication.onIdleを自前で処理できますから、そちらでチェックしてはどうでしょうか?その名のとおり「アプリケーションが暇なとき」にチェックしてくれます。 { Private 宣言 } private svTop: integer; svLeft: integer; procedure ApplicationIdle(Sender: TObject;var Done: Boolean); {チェック開始} svTop := Top; svLeft := Left; Application.OnIdle := ApplicationIdle; {実際の処理} procedure TForm1.ApplicationIdle(Sender: TObject; var Done: Boolean); begin if (Top <> svTop)or(Left <> svLeft) then begin (移動を検知したときの処理) end; Done := false; end; #未検証なので間違いがあったらごめんなさい
その他の回答 (3)
- shimix
- ベストアンサー率54% (865/1590)
蛇足ですが・・ >こういうのってどうやって知ってるんだろう? 私はDelphiを使い始めた頃(TurboAssemblerからDelphi2.0に移行したクチです)にWin32APIの書籍(当然対象言語は「C」)を購入して読み漁りました。DelphiといえどもWin32アプリなので、Win32APIをごにょごにょやって(すごい表現だ・・)動いています。こういうサイト↓あたりでそのあたりが解説されてますので、ご一読ください。 http://homepage2.nifty.com/Mr_XRAY/Halbow/index.html http://delfusa.main.jp/delfusafloor/archive/VA009712_take/delphi/kabetop.htm #昔お世話になったなぁ・・
- sakusaker7
- ベストアンサー率62% (800/1280)
WM_MOVING メッセージに反応してやればいいのでは? リサイズのときというのは WM_SIZEですよね? WM_MOVING Notification () http://msdn2.microsoft.com/en-us/library/ms632632(VS.85).aspx Window Messages http://hp.vector.co.jp/authors/VA034261/winmsg/wm_wnd.html ---- WM_MOVING 説明 WM_MOVINGメッセージはユーザーが移動中のウィンドウに送られてきます。 アプリケーションはこのメッセージを処理することでドラッグされているウィンドウの位置やサイズを知ることができます。 また、必要ならその値を変更することができます。 wParam fwSide = wParam; // edge of window to be moved ウィンドウのどの端がドラッグされたかを示す値が以下の値の組み合わせで与えられます。 WMSZ_BOTTOM ウィンドウの下の辺がドラッグされています。 WMSZ_BOTTOMLEFT ウィンドウの左下の角がドラッグされています。 WMSZ_BOTTOMRIGHT ウィンドウの右下の角がドラッグされています。 WMSZ_LEFT ウィンドウの左の辺がドラッグされています。 WMSZ_RIGHT ウィンドウの右の辺がドラッグされています。 WMSZ_TOP ウィンドウの上の辺がドラッグされています。 WMSZ_TOPLEFT ウィンドウの左上の角がドラッグされています。 WMSZ_TOPRIGHT ウィンドウの右上の角がドラッグされています。 lParam lprc = (LPRECT) lParam; // screen coordinates of drag rectangle ドラッグ矩形(?ウィンドウをドラッグしてるときの点線)をスクリーン座標で表したRECT構造体のアドレスが格納されています。 ドラッグ矩形のサイズや場所をアプリケーションで変えるには、この構造体のメンバを書き換えます。 戻り値 アプリケーションでこのメッセージを処理する場合、TRUEを返さなくてはなりません。 --- Delphiでの例もあった。 Delphi How To - Form OnMoving (WM_MOVING) http://www.cryer.co.uk/brian/delphi/howto_capture_form_moving.htm ごめん。日本語のページあまり見つかんなかった。
お礼
すごい、なんか英語みたい!! だからよくわかんない。 でもこんな事を簡単にかけちゃう人もいるんだねー。 すごいです!!
- shimix
- ベストアンサー率54% (865/1590)
#この項、補足要求にします >アプリが動いた時 ってどういう意味でしょう?Idle状態以外ってことじゃないですよね?ウィンドウを移動させたって意味ですか?
お礼
回答がついたぁ~☆ そう移動した時。 えーとウィンドウを最小化とか閉じたりする所をマウスで移動させた時。 Form1でOnMoseDown,OnPrintとかやってもダメだった。 えーとえーとForm1.Top、Form1.LeftをTimerで表示させるのもいいんだけど、なんかtimer使うとウィンドウを動かす時にカクカクしちゃうし。 困ってるよー。 でもでも答えてくれてありがとう。
お礼
Application.OnIdle超便利だよー。 こういうのってどうやって知ってるんだろう? すっごいうれしいよー。