PaintBox内のマウス移動をPixelsの一定間隔で移動したい

解決


青い稲妻  2006-02-27 00:20:15  No: 20226

青い稲妻です。

PaintBox内のマウス移動なんですが、PaintBox内のPixelsの一定間隔(X:10  Y:10)でマウス移動したいと思い、以下のソースを実行しましたが、一定間隔ではなく、通常のマウス移動になります。

どなたか、アドバイスをお願いします。

function MouseMsgHookProc(nCode: Integer; wParam: WPARAM;
                                    lParam: LPARAM): LRESULT; stdcall;
var
  pms: PMouseHookStruct;
begin
     Result:=0;
     if nCode < 0 then begin
       Result := CallNextHookEx(MouseHook, nCode, wParam, lParam);
       exit;
     end else begin
       pms:=PMouseHookStruct(lParam);
       {nCodeがHC_ACTIONの時のみ操作可能}
       if nCode = HC_ACTION then begin

           if wParam=WM_MOUSEMOVE then
           begin
             SendNotifyMessage(OutputWnd, WM_MOUSEMOVE, wParam, MAKELONG(pms^.pt.x+100, pms^.pt.y+100));
           end;

       end;
     end;
     CallNextHookEx( MouseHook, nCode, wParam, lParam);
end;

(*************************************************
PaintBoxのPixelsを視覚的に表示するボタン
*************************************************)
procedure TForm1.Button1Click(Sender: TObject);
var
  x,y: integer;
begin

  x := 0;
  while(x < PaintBox1.Width) do
  begin
    y := 0;
    while(y < PaintBox1.Height) do
    begin
      PaintBox1.Canvas.Pixels[x, y] := clGreen;
      y := y + 10;
    end;
    x := x + 10;
  end;
  OutputWnd := PaintBox1.Parent.Handle;

end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  // 確認用です。
  Edit1.Text := Format('X=%d Y=%d', [X,Y]);
end;


ママん  2006-02-27 01:12:26  No: 20227

カーソルを直接使うのは多分無理です。
カーソルを不可視化して、カーソルもどきのグラフィックを表示するのは如何でしょうか?
そのほうがシステムにもよさげですし。


ヒマジン by JohnLemon  2006-02-27 02:53:13  No: 20228

10ドット単位でクロスカーソル移動。

var
  CX, CY: Integer;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  mx, my: Integer;
begin
  mx := (X div 10) * 10 + 5;
  my := (Y div 10) * 10 + 5;
  if (CX <> mx)or(CY <> my) then begin
    with PaintBox1.Canvas do begin
      Pen.Color := clLime;
      Pen.Mode := pmXOR;
      MoveTo(CX-5,CY); LineTo(CX+6,CY);
      MoveTo(CX,CY-5); LineTo(CX,CY+6);
      CX := mx;
      CY := my;
      MoveTo(CX-5,CY); LineTo(CX+6,CY);
      MoveTo(CX,CY-5); LineTo(CX,CY+6);
    end;
  end;
end;


青い稲妻  2006-02-27 03:01:59  No: 20229

ママんさん、ヒマジン b yJohnLemon  さん、有難うございます。
何とか出来そうです。m(_ _)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加