Kursor ıle ılgılı

Başlatan z, 03 Ağustos 2015, 19:53:19

z

Form üzerine picrturebox, memo, butonlar vs vs var.

Amacım mouse picturebox üzerinde gezerken mouse coordinatlarını almak ve özel cursor çizmek. Bunu zaten picturebox'ın  mouse eventleri ile yapabiliyor ve cursorumu çizebiliyorum.

Fakat mouse picturebox'ın dışına çıktığında çizdiğim cursoru yok etmem lazım.

Mouse'ı çık hızlı hareket ettirip picture box dışına hatta form dışına çıkartsam bile bu amacım geröeklenebilmeli.

Bunu nasıl yaparım?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

picturebox üzerinde gezerken mouse coordinatlarını alabiliyorsak, alınan koordinata bakiveririz. Acaba picturebox sınırına gelmiş mi? Mesela en sağa geldiyse oradan daha sağa gitmiş, artık picturebox dışına çıkmış denebilir. 1piksel hata payı olur. kursor, Çok kenara gelmesin.

fatih6761

Hocam Delphi de kursor kontrole girdi/kontrolden çıktı durumunda tetiklenen bir olay / event handler mekanizması yok mu? Olması lazım, vardır illaki?
Bununla kursörü değiştirmek sürekli mouse koordinatını alıp içinde mi diye kontrol etmekten daha verimli olur sanki.

z

Sorun şu;

Picturebox üzerine gezinirken sorun yok. Kursorumu ilgili mouse koordinatına çiziyorum.

Fakat mouse çok hızlı şekilde picturebox üzerinde uzaklaştırırsam event üretilemeden mouse dışarı çıkmış oluyor.

Benim amacım kursor picturebox içinde değilse çizdiğim kursoru silmek.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

Formun mouse move olayına  kod yazınca sorun düzeliyor galiba. Az önce denedim.

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Label1.Caption := inttostr(X);
  if X < PaintBox1.Width then
    Cursor := crHandPoint;

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin

  if X > PaintBox1.Left + PaintBox1.Width then

    Cursor := crDefault;
end;

z

Bunda da şöyle bir sorun var;

Eğer form üzerinde sadece picturebox olsaydı sorun yoktu. Picturebox'ın mouse eventine kursor çizme rutinimi, formun mouse eventine de cursor silme rutinimi eklerdim.

Fakat form üzerinde bir sürü nesne varsa bu durumda tüm nesnelerin mouse eventine silme rutini yazmam gerekiyor.

Üstelik mouse form dışına hızlıca kaçırılırsa buna da çözüm gerekiyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

#6
Timer ayarlanır. interval 50ms gibi olur. kursor nerede? diye bakıp düzeltme yapar.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if ((yataypos < (Image1.Left + Image1.Width)) and
    (dikeypos < (Image1.Height + Image1.top))) then
    cursor := crCross
  else
    cursor := crDefault;

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  yataypos := X;
  dikeypos := Y;
end;