Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

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;
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
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

Konuyu Paylaş : facebook gplus twitter





Konuyu Okuyanlar: 1 Ziyaretçi