私は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を使用してみましたか?
'Message'を' TMessage'ではなく 'TWMMove'として宣言すれば、これらの型キャストをすべて避けることができます。多くの例については、残りのVCLソースを参照してください。また、自分の好意を持ってフォームに意味のある名前を付けるので、14番目のフォームが何であるか、そして15番目のフォームが何であるかを覚える必要はありません。 –
私は間違った問題を解決しようとしていると思います。 dkDragとdkDockを切り替えたり、ドッキングするフォームにdkDockを使用したり、ドッキングメッセージを処理して特定の場所にフォームをドッキングすることを許可/拒否したりしないでください。これらの2つのモードを切り替える際に問題が発生した場合は、マウスのドラッグが進行中に切り替えられないという兆候です。 – mghie