Formun dışındaki alanda farenin tipi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Formun dışındaki alanda farenin tipi

Mesaj gönderen qamyoncu »

Merhabalar, soru başlıkta.. Denediğim ve çalışmayan bazı yolları yazayım, yardımlarınız için şimdiden sağolun :

Kod: Tümünü seç

if screen.cursor=crHandPoint then
.....

Kod: Tümünü seç

if screen.cursors[ord(screen.cursor)]=crHandPoint then
.....

Kod: Tümünü seç

var
p:TCursor;
...
...
p:=GetCursor();
if p=crHandPoint then
.....
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Formun dışındaki alanda farenin tipi

Mesaj gönderen emin_as »

GetCursor ve GetCursorInfo ile istediğin bilgiyi elde edebilirsin.
İlk fonksiyon HICON döndürür, diğeri ise TCursorinfo döndürür.
Windows.pas içinde bu fonksiyonları bulabilirsin.
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Re: Formun dışındaki alanda farenin tipi

Mesaj gönderen qamyoncu »

Teşekkürler hocam.. Çözüm:

Kod: Tümünü seç

var
CI: TCursorInfo;
begin
CI.cbSize := SizeOf(CI);
    if GetCursorInfo(CI) then
      begin
        if CI.hCursor=65555 then   //crIBeam(İmleç) için
          showmessage('asd');
      end;
end;
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Re: Formun dışındaki alanda farenin tipi

Mesaj gönderen qamyoncu »

crIBeam için kendim deneyerek 65555 numarasını bulmuştum. Fakat crHandPoint için bu numarayı alamadım. Her deneyişimde numara değişiyor :? Tüm fare tipleri için bu değerleri bulabileceğimiz bir yer varsa verirseniz sevinirim :)
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Formun dışındaki alanda farenin tipi

Mesaj gönderen SimaWB »

Controls.pas içerisinde şunlar var :

Kod: Tümünü seç

type TCursor = -32768..32767


const
  crDefault     = TCursor(0);
  crNone        = TCursor(-1);
  crArrow       = TCursor(-2);
  crCross       = TCursor(-3);
  crIBeam       = TCursor(-4);
  crSize        = TCursor(-22);
  crSizeNESW    = TCursor(-6);
  crSizeNS      = TCursor(-7);
  crSizeNWSE    = TCursor(-8);
  crSizeWE      = TCursor(-9);
  crUpArrow     = TCursor(-10);
  crHourGlass   = TCursor(-11);
  crDrag        = TCursor(-12);
  crNoDrop      = TCursor(-13);
  crHSplit      = TCursor(-14);
  crVSplit      = TCursor(-15);
  crMultiDrag   = TCursor(-16);
  crSQLWait     = TCursor(-17);
  crNo          = TCursor(-18);
  crAppStart    = TCursor(-19);
  crHelp        = TCursor(-20);
  crHandPoint   = TCursor(-21);
  crSizeAll     = TCursor(-22);
There's no place like 127.0.0.1
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Re: Formun dışındaki alanda farenin tipi

Mesaj gönderen qamyoncu »

Malesef bu kodlar işe yaramıyor..

2 Label koyun formunuza ve label1'in Cursor'u crIBeam, label2'nin Cursor'u crHandPoint yapın... Label1 ve Label2'nin click olaylarına:

Kod: Tümünü seç

var
CI: TCursorInfo;
begin
CI.cbSize := SizeOf(CI);
    if GetCursorInfo(CI) then
      begin
        if CI.hCursor=65555 then                           //////Breakpoint ekleyelim birde buraya
          begin
              (Sender as TLabel).Caption:='asd';
          end;
      end;
end;
Fare label1e tıkladığında label'1in captionu İmleç olmalı. Ve denediğinizde olacaktır da. Aynı şekilde bir de breakpoint ekleyip label2'ye tıklayalım. Unitimizin içerisinden breakpointin olduğu satıra bakıp CI.HCursor değerini alalım. Aynı işlemi uygulamayı kapatıp tekrar açarak yaptığımızda CI.HCursor değeri farklı bir değer çıkıyor. Oysa farenin şekli aynı, hep crHandPoint.. Ve bu nedenle 65555 yerine crHandPoint tipi için yazacak değer bulamadım.. Bulduğum başka numaralar:
crNo: 65573
crHourGlass: 65557
crArrow: 65553
crHelp: 65577 vs vs..
Sorun çıkartanlar ise:
crHandPoint
crDrag
crNoDrop
crMultiDrop... daha başka da olabilir hepsini denemedim.

Sanki taşıma gerektiren işlemlerdeki fare tipi sorun çıkartıyor :? :roll:
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Formun dışındaki alanda farenin tipi

Mesaj gönderen emin_as »

Aşagıdaki linklere gözat belki aradığın şeyi bulabilrsin.

http://msdn.microsoft.com/en-us/library ... S.85).aspx
http://msdn.microsoft.com/en-us/library ... S.85).aspx
http://msdn.microsoft.com/en-us/library ... S.85).aspx

Bu arada breakpointtan sonra çalışan fonksiyonlara pek güvenme, beklediğin cursor bilgisi getirmeyebilir. O nedenle bir tane memo koyup, degerleri buraya ekle.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Formun dışındaki alanda farenin tipi

Mesaj gönderen SimaWB »

Kusura bakmayın tam olarak ne yapmak istediğinizi anlayamadım ama HICON tipi ile TCursor tipleri arasında karşılaştırma yapıyorsunuz. HICON negatif değer almaz ama TCursor alır. O şekilde karşılaştırma yapmanız yanlış olur.
Daha önce dediğim gibi, ne yapmak istediğinizi tam bilmiyorum ama şöyle birşey işinizi görmez mi :

Kod: Tümünü seç

  case (Sender as TLabel).Cursor of
    crDefault   : (Sender as TLabel).Caption := 'crDefault';
    crHandPoint : (Sender as TLabel).Caption := 'crHandPoint';
    crIBeam	    : (Sender as TLabel).Caption := 'crIBeam';
  end;
There's no place like 127.0.0.1
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Re: Formun dışındaki alanda farenin tipi

Mesaj gönderen qamyoncu »

emin_as yazdı: Bu arada breakpointtan sonra çalışan fonksiyonlara pek güvenme, beklediğin cursor bilgisi getirmeyebilir. O nedenle bir tane memo koyup, degerleri buraya ekle.
Teşekkür ediyorum...
crHandPoint --> 65583 :)

@SimaWB, ilginiz ve bilgileriniz için teşekkürler, fakat işimi göremedi. Bir tekrar olarak yapmak istediğimi anlatayım: Fare ekranın herhangi bir yerinde iken timer ile(invertal'i 1) sürekli farenin şeklini kontrol edip, eğer crHandPoint ise bazı işlemler yaptırmak istiyordum Şu kod ile oldu:

Kod: Tümünü seç

var
CI: TCursorInfo;
begin
CI.cbSize := SizeOf(CI);
    if GetCursorInfo(CI) then
      begin
        if CI.hCursor=65583 then                           
          begin
              ...
          end;
      end;
end;
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
Cevapla