2009-08-14 7 views
0

私はWM_MOVEWM_ENTERSIZEMOVEを送信するには?あなたがあなたの人生で見てきたif文

procedure TForm15.WMMove(var Message: TMessage); 
begin 
if((((TWMMove(Message).XPos + Self.Width >= Form14.Left) and (TWMMove(Message).XPos <= Form14.Left)) or 
    ((TWMMove(Message).XPos <= Form14.Left + Form14.Width) and (TWMMove(Message).XPos >= Form14.Left))) and 
(((TWMMove(Message).YPos + Self.Height >= Form14.Top) and (TWMMove(Message).YPos <= Form14.Top)) or 
    ((TWMMove(Message).YPos <= Form14.Top + Form14.Height) and (TWMMove(Message).YPos >= Form14.Top)))) 
then begin 
    Self.DragKind := dkDock; 
end else Self.DragKind := dkDrag; 
end; 

に呼び出され、次のコードを持っていることは、おそらく最も醜いですが、それは問題ではありません。 :)

現在のフォーム(Self)がmainForm(Form14)のどこかにある場合、DragKindを変更することになっています。それはdkDockにDragKindを設定すると

しかし、それはユーザーがフォームを移動を停止しない限り、currentForm(セルフ)ドッキング可能を作成し、それを再び移動を開始するので、私は次のことをやろうとしているされていません。

上記のステートメントからの結果がゼロ以外であるとdkDockは、その後、フォームに次のメッセージを送信する設定されている場合://は

WM_ENTERSIZEMOVEが//しかし再び

移動を開始フォームを移動を停止

WM_EXITSIZEMOVE 、私どのように行うのか分からない:

SendMessage(Self.Handle,WM_EXITSIZEMOVE,?,?); 

は私がランダムパラメータ(1,1)が、正しい方法ではないのですがないeffect.Maybeを使用してみましたか?

+3

'Message'を' TMessage'ではなく 'TWMMove'として宣言すれば、これらの型キャストをすべて避けることができます。多くの例については、残りのVCLソースを参照してください。また、自分の好意を持ってフォームに意味のある名前を付けるので、14番目のフォームが何であるか、そして15番目のフォームが何であるかを覚える必要はありません。 –

+0

私は間違った問題を解決しようとしていると思います。 dkDragとdkDockを切り替えたり、ドッキングするフォームにdkDockを使用したり、ドッキングメッセージを処理して特定の場所にフォームをドッキングすることを許可/拒否したりしないでください。これらの2つのモードを切り替える際に問題が発生した場合は、マウスのドラッグが進行中に切り替えられないという兆候です。 – mghie

答えて

2

2つのメッセージが通知であるようです。直接送信すると、おそらく何もしません。 Raymond Chenがかつて言いましたように(恐ろしく言い換えれば)、直接これらのメッセージを送って行動を期待するのは、針をゲージに動かすことによってガスタンクを補充しようとするようなものです。

WM_SIZINGとWM_MOVINGは、ウィンドウのサイズと位置を変更してさらに変更をブロックするユーザーを監視するために使用できるメッセージです。 MSDNから

:画面座標における ウィンドウの現在位置とRECT構造 に

lParamに

ポインタ。 にドラッグすると、 の四角形の位置が変更されます。アプリケーションは、この構造体のメンバーを に変更する必要があります。

メンバーを変更すると、強制的にウィンドウを1つの位置に保持できます。

+0

フォームの移動を停止する方法を提案できますか? –

+0

WM_MOVINGに渡された矩形を変更して、ウィンドウを1つの位置に保持します。 – Michael

+0

私はこれを "Message.LParam:= 0;"他のコードはありませんが、フォームは通常どおりその所有権を変更し続けます。 –

1

これは通知メッセージです。が原因で、フォームの移動が中止されます。
両方のパラメータは無視されます(未使用)。

+0

まあ、私の主張は、フォームを動かすことを止めなければならないということでした。それをするメッセージを知っていますか? –

関連する問題