Mouse Pozisyonu Hakkında [Çözüldü]

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Mouse Pozisyonu Hakkında [Çözüldü]

Mesaj gönderen xozcanx »

Kod: Tümünü seç

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Caption:=IntToStr(x)+'-'+IntToStr(y);
end;
Merhaba;
Yukarıdaki kod ile Form üzerindeki mousen pozisyonunu bulabiliyoruz. Fakat form üzerine bir TPanel varsa ve Aling =AlClient ise mouse pozisyonunu alamıyoruz. Genel olarak Form üzerindeki Mouse kordinatlarına nasıl ulaşabiliriz.

Teşekkürler.
En son xozcanx tarafından 06 Ara 2014 02:36 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Mouse Pozisyonu Hakkında [Çözülmedi]

Mesaj gönderen G.Arkas »

Aynı kodu Panelin MouseMove eventine yazarsan istediğini alırsın. basit mantık!
Resim
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Mouse Pozisyonu Hakkında [Çözülmedi]

Mesaj gönderen xozcanx »

G.Arkas yazdı:Aynı kodu Panelin MouseMove eventine yazarsan istediğini alırsın. basit mantık!
Merhaba;
Kusura bakmayın soru eksik oldu sanırım.
MouseMove eventi olan tüm nesnelerde yukarıdaki kod çalışıyor fakat örnek olarak TWebBrowser üzerinde yapamıyoruz. Yada 3. parti bir bileşen varsa ve yine MouseMove Eventi yoksa yukarıdaki kod çalışmıyor. Farklı bir yöntem olarak ne izleyebiliriz?

Teşekkürler.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Mouse Pozisyonu Hakkında [Çözülmedi]

Mesaj gönderen SimaWB »

Windows'un WM_SETCURSOR mesajını yakalayıp işleyebilirsiniz:

Kod: Tümünü seç

private
  procedure WMSetCursor(var Msg: TWMSetCursor); message WM_SETCURSOR;

Kod: Tümünü seç

procedure TForm1.WMSetCursor(var Msg: TWMSetCursor);
var
  p: TPoint;
begin
  inherited;
  GetCursorPos(p);
  Caption := Format('X:%d,   Y:%d', [p.X, p.Y]);
end;
There's no place like 127.0.0.1
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Mouse Pozisyonu Hakkında [Çözülmedi]

Mesaj gönderen SimaWB »

Bir ekleme yapayım, belki işinize yarar: Eğer mouse'un hangi bileşen üzerinde olduğunu tespit etmek isterseniz FindVCLWindow(p) size bileşeni döndürür:

Kod: Tümünü seç

var
  p: TPoint;
  C: TWinControl;
begin
  inherited;
  GetCursorPos(p);
  C := FindVCLWindow(p);
  if Assigned(C) then
    Caption := C.Name;
end;
There's no place like 127.0.0.1
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Mouse Pozisyonu Hakkında [Çözülmedi]

Mesaj gönderen xozcanx »

SimaWB yazdı:Windows'un WM_SETCURSOR mesajını yakalayıp işleyebilirsiniz:

Kod: Tümünü seç

private
  procedure WMSetCursor(var Msg: TWMSetCursor); message WM_SETCURSOR;

Kod: Tümünü seç

procedure TForm1.WMSetCursor(var Msg: TWMSetCursor);
var
  p: TPoint;
begin
  inherited;
  GetCursorPos(p);
  Caption := Format('X:%d,   Y:%d', [p.X, p.Y]);
end;
SimaWB yazdı:Bir ekleme yapayım, belki işinize yarar: Eğer mouse'un hangi bileşen üzerinde olduğunu tespit etmek isterseniz FindVCLWindow(p) size bileşeni döndürür:

Kod: Tümünü seç

var
  p: TPoint;
  C: TWinControl;
begin
  inherited;
  GetCursorPos(p);
  C := FindVCLWindow(p);
  if Assigned(C) then
    Caption := C.Name;
end;
Hocam cevabınız ve ilginiz için Teşekkürler.
Form üzerinde Groupbox,Memo,Panel,Edit,Button hangisinin üzerine gelirsem geleyim Procedure işe yarıyor.Süper!
Fakat ikinci mesajımda verdiğim örnekteki gibi WebBrowser üzerine geldiğimde işlemiyor. :(
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Mouse Pozisyonu Hakkında [Çözülmedi]

Mesaj gönderen esistem »

Selam;

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.Caption:=inttostr(mouse.CursorPos.x)+' / '+inttostr(mouse.CursorPos.y);
end;
Yukarıdaki kod tüm ekrandaki mouse pozisyonunu verir. Sen formun left ve top unu baz alarak formda hangi koordinatlarda olduğunu bulabilirsin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Mouse Pozisyonu Hakkında [Çözülmedi]

Mesaj gönderen mrmarman »

WebBrowser boş iken Delphi'ye aittir ama herhangi bir sayfa Navigate edildiğinde bu durum farklılaşır.

Aşağıda iki farklı yöntem önereceğim. Her ikisi de çalışacaktır.
1. Yöntem forma bir tane Timer koyup bağımsızlaştırma

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
var
  p, p2: TPoint;
  iGenelX, iGenelY,
  wbX, wbY : Integer;
begin
    GetCursorPos(p); // Burası tüm Windows odaklı sonuç verir.
    p2 := ScreenToClient( p ); // Burası Formunun iç kısmına odaklı sonuç verir.
    iGenelX := p2.X;
    iGenelY := p2.Y;
    wbX := iGenelX - WebBrowser1.Left;
    wbY := iGenelY - WebBrowser1.Top;
    Caption := Format('X:%d,Y:%d üzerinden WebBrowser X:%d,Y:%d', [iGenelX, iGenelY, wbX, wbY]);
end;
2.Yöntem sistem mesajlarından yola çıkarak Mouse takip

Kod: Tümünü seç

  private
    procedure AppMsg(var Msg: TagMsg; var Handled: Boolean);

procedure TForm1.FormCreate(Sender: TObject);
begin
  WebBrowser1.Navigate('http://www.google.com.tr');
  Application.OnMessage   :=   AppMsg;
end;

procedure TForm1.AppMsg(var Msg: TagMsg; var Handled: Boolean);
var
  p, p2: TPoint;
  iGenelX, iGenelY,
  wbX, wbY : Integer;
begin
  if  Msg.Message = WM_MOUSEMOVE then
  begin
    GetCursorPos(p); // Burası tüm Windows odaklı sonuç verir.
    p2 := ScreenToClient( p ); // Burası Formunun iç kısmına odaklı sonuç verir.
    iGenelX := p2.X;
    iGenelY := p2.Y;
    wbX := iGenelX - WebBrowser1.Left;
    wbY := iGenelY - WebBrowser1.Top;
    Caption := Format('X:%d,Y:%d üzerinden WebBrowser X:%d,Y:%d', [iGenelX, iGenelY, wbX, wbY]);

    Handled := True;
  end;
end;

Resim
Resim
Resim ....Resim
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Mouse Pozisyonu Hakkında [Çözülmedi]

Mesaj gönderen xozcanx »

mrmarman ve esistem verdiğiniz bilgiler için teşekkürler.
Timer Kullanımı değil de Procedure olarak kullandım ve istediğim sonucu aldım.
Cevabın açıklayıcı ve öğretici olması çok güzel olmuş.

İyi Çalışmlar.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Cevapla