マウスドラッグ中にボタンを離させるには?


桂木  2006-07-09 20:04:10  No: 22457  IP: 192.*.*.*

マウスドラッグ(ウィンドウを動かしている)の最中にマウスボタンを離させる処理をするにはどうすればいいのでしょうか
postMessage(form1.Handle,WM_RBUTTONUP,0,0);
としてもうまくいきません

よろしくお願いします

編集 削除
kkk  2006-07-10 04:56:26  No: 22458  IP: 192.*.*.*

ドラッグ中ということは 'SetCapture' 状態なのでReleaseCaptureが必要だと思います。
でもそうするとドラッグがキャンセルされて元の位置に戻ってしまいますが。

編集 削除
桂木  2006-07-10 13:20:42  No: 22459  IP: 192.*.*.*

ありがとうございます

元の位置に戻さずに処理したいのですが、そういう方法は無いんでしょうか

編集 削除
kkk  2006-07-11 05:22:03  No: 22460  IP: 192.*.*.*

あまりスマートな方法ではないですが位置を再セットしてみるとか
---------------------------------------
interface
・・・
const
  WM_DELAYEDEVENT = WM_APP+1;
  EV_SETPOS = 0;

type
  TForm1 = class(TForm)
・・・
  private
    procedure WmDelayedEvent(var Msg:TMessage); message WM_DELAYEDEVENT;
・・・
  end;

implementation

procedure TForm1.WmDelayedEvent(var Msg: TMessage);
begin
  if Msg.WParam = EV_SETPOS then
  begin
    SetBounds(Msg.LParamLo, Msg.LParamHi, Width, Height);
    Msg.Result := 1;
  end;
end;

procedure TForm1.hogehoge;
begin
  ReleaseCapture;
  PostMessage(Form1.Handle, WM_DELAYEDEVENT, EV_SETPOS, Left + (Top shl 16));
end;
---------------------------------------
ドラッグをキャンセルさせる時に hogehogeを呼べばよいかな
(あくまでも参考ということで)

編集 削除