Herkese iyi çalışmalar.
Bir butona tıklandığında mouse'un tuşunun basılı kaldığı süre içersinde bir işlem yaptırtmak istiyorum ama bir türlü beceremedim. OnClick ve OnMouseDown olayları işime yaramıyor. Çünkü bu olaylar mouse tuşunun basılı kaldığı süre içersinde değilde bir sefer çağırılıyor. Yani TUpDown bileşenin ilişkilendirildiği(Associate) nesneye uyguladığı olayı yapmak istiyorum (TUpDown bileşeni işime yaramıyor).TUpDown bileşeninin kodunu biraz inceledim 'TUDClickEvent' diye bir olay kullandığını gördüm ama delphi profesyonel anlamda bilmediğim için birşeyler anlamadım. Yardımcı olacak arkadaşlara şimdiden teşekkürler.
Buton olayları
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Anlamadım
Öncelikle bu kadar Hızlı bir cevap verdiğiniz için tekrar teşekkür ediyorum.
Ama tam olarak ne yapmam gerektiğini anlamadım. Kendimi tam olarak ifade edemediğimi düşünüyorum. Aşağıda sizin cevabınızdan sonra bir örnek yaptım ama program kilitleniyor .Doğal olarak kilitlenmesi gerekir tabiki sadece ne yapmak istediğimi biraz daha iyi anlata bilmek için bu örneği yaptım.
Örnekte eğer butonun tag ındaki değer 1 ise label1'in posisyonu 1 piksel artıyor (up) , 2 ise label1'in posisyonu 1 piksel azalıyor (Down). Bu olayın kullanıcı elini mouse'un tuşunu bırakmadan devam etmesi gerekiyor. TUpDown bileşeninin ilişkilendirildiği(Associate) nesnenin değerini bir arttırması yada azaltması gibi.
procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
booleandeger:=True;
while booleandeger do
begin
case TControl(sender).Tag of
1:label1.Top:=label1.Top+1;
2:label1.Top:=label1.Top-1;
end;
end;
end;
procedure TForm1.SpeedButton2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
booleandeger:=false;
end;
Ama tam olarak ne yapmam gerektiğini anlamadım. Kendimi tam olarak ifade edemediğimi düşünüyorum. Aşağıda sizin cevabınızdan sonra bir örnek yaptım ama program kilitleniyor .Doğal olarak kilitlenmesi gerekir tabiki sadece ne yapmak istediğimi biraz daha iyi anlata bilmek için bu örneği yaptım.
Örnekte eğer butonun tag ındaki değer 1 ise label1'in posisyonu 1 piksel artıyor (up) , 2 ise label1'in posisyonu 1 piksel azalıyor (Down). Bu olayın kullanıcı elini mouse'un tuşunu bırakmadan devam etmesi gerekiyor. TUpDown bileşeninin ilişkilendirildiği(Associate) nesnenin değerini bir arttırması yada azaltması gibi.
procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
booleandeger:=True;
while booleandeger do
begin
case TControl(sender).Tag of
1:label1.Top:=label1.Top+1;
2:label1.Top:=label1.Top-1;
end;
end;
end;
procedure TForm1.SpeedButton2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
booleandeger:=false;
end;
Merhaba,
koda ekleme yaptım, test ettim, onayladım
Kolay gelsin.
koda ekleme yaptım, test ettim, onayladım

Kod: Tümünü seç
procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
booleandeger:=True;
while booleandeger do
begin
// Sleep(10); {bu da işlemi biraz yavaşlatır}
Application.ProcessMessages;
case TControl(sender).Tag of
1:label1.Top:=label1.Top+1;
2:label1.Top:=label1.Top-1;
end;
end;
end;
Timer daha avantajlı
Bu serferde ProcessMessages'i geç algılıyor. Bundan dolayıda Label1'in posisyonunu, birer birer değilde 50-60 pixel birden kaydırıyor. Buton ile yapmak istediğim bu olayı DelphiTurk Formunada sormuştum orada bir arkadaşın tavsiyesi ile aşağıdaki kodu yazdım. Gayet güzel çalışıyor. Ben bu olayı global windows mesaj yöneticileri ile yapmak istemiştim ama buda işe yarıyor.
Kod: Tümünü seç
var n:Byte=0;
..
procedure TForm1.SpeedButton1MouseDown(Sender: TObject;Button: TMouseButton; Shift:TShiftState; X, Y: Integer);
begin
n:=TControl(sender).Tag;
Timer1.Enabled:=true; // Interval değeri 50
end;
procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;Shift:TShiftState; X, Y: Integer);
begin
n:=0;
Timer1.Enabled:=False;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
case n of
1:label1.Top:=label1.Top+1; //
2:label1.Top:=label1.Top-1;
end;
end;