Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
MouseUp'taki Shift: TShiftState;
#1
Merhabalar.
 Objelerin MouseUp ve MouseDown olaylarında yer alan Shift: TShiftState; MouseDown da sorunsuz çalışıyor. MouseUp ta ise işlev görmüyor.

 Bunun nedeni nedir?

Aşağıdaki kodu MouseDown ve MouseUp olaylarında deneyebilirsiniz.

if Shift = [ssLeft] then ShowMessage('Çalıştı');
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
Cevapla
#2
Merhaba,
Sebebini açıklayayım.
Muhtemelen iki kodunuz da çalışıyor.
Shift tuşuna basılı iken, Mause ile tıklama yaptığınızda ekrana bir mesaj geliyor. Siz bu mesajı Ok'lerken Ana uygulamadan çıkıp harici bir pencereye yeniden tıklıyorsunuz. Doğal olarak Mause bırakma işi form üzerinde gerçekleşmediğinden OnMauseUp olayınız çalışmıyor. 

Aşağıdaki gibi deneyin ve formunuzun Caption'unu gözlemleyin.

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if ssShift in Shift then
   Caption:='Mause butonu tıklanmış';
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if ssShift in Shift then
   Caption:='Mause butonu bırakıldı';
end;
Cevapla
#3
Biraz daha açayım.

 MouseDown olayında ShiftState ile klavye ve Mouse olaylarını yakalarken neden MouseUp ile her ikisini yakalayamıyoruz? MouseUpta neden Mouse butonları için neden MouseButton kullanmak durumundayız?

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Single);
begin
 if Button = TMouseButton.mbRight then Memo1.Lines.Add('dbR');
 if Button = TMouseButton.mbLeft then Memo1.Lines.Add('dbL');
 if (ssLeft in Shift) then Memo1.Lines.Add('dsL');
 if (ssRight in Shift) then Memo1.Lines.Add('dsR');
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Single);
begin
 if Button = TMouseButton.mbRight then Memo1.Lines.Add('ubR');
 if Button = TMouseButton.mbLeft then Memo1.Lines.Add('ubL');
 if (ssLeft in Shift) then Memo1.Lines.Add('usL');
 if (ssRight in Shift) then Memo1.Lines.Add('usR');
end;
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Shift+Ctrl+C sorunu [ÇÖZÜLDÜ] woywod 5 2.492 22-02-2021, Saat: 20:44
Son Yorum: woywod



Konuyu Okuyanlar: 1 Ziyaretçi