buttona 3 defa basınca işlem yapsın ?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
buttona 3 defa basınca işlem yapsın ?
Arkadaşlar,
bir buttona 5 saniye içinde 3 defa basınca işlem yapsın nasıl yapabilirim ?
xe8 kullanıyorum
teşekkürler.
bir buttona 5 saniye içinde 3 defa basınca işlem yapsın nasıl yapabilirim ?
xe8 kullanıyorum
teşekkürler.
Re: buttona 3 defa basınca işlem yapsın ?
if i = 1 then begin
timer1.interval :=5000;
i:=i+1;
end else if i< 4 then i := i+1;
if i= 4 then begin
// 3.kez basılınca yapılacak işlem
end;
timer1.interval programı
begin
i:=1;
timer1.interval:=0;
end;
ben böyle yazardım. i global değişken
timer1.interval :=5000;
i:=i+1;
end else if i< 4 then i := i+1;
if i= 4 then begin
// 3.kez basılınca yapılacak işlem
end;
timer1.interval programı
begin
i:=1;
timer1.interval:=0;
end;
ben böyle yazardım. i global değişken
....
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: buttona 3 defa basınca işlem yapsın ?
Merhaba aşağıdaki gibi yaptım teşekkürler.
Kod: Tümünü seç
procedure TForm1.btn1Click(Sender: TObject);
begin
btn1.Tag := btn1.tag + 1;
if btn1.Tag = 5 then ShowMessage('test');
exit;
end;
Re: buttona 3 defa basınca işlem yapsın ?
Sorduğunuz sorunun cevabı bu yazdığınız kodlar olduğuna emin misiniz?
There's no place like 127.0.0.1
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: buttona 3 defa basınca işlem yapsın ?
evet aslında 5 saniyede olmuyor ama şimdilik buda işimi görür
ama 5 saniye olarak nasıl yapabilirim yazarsanız sevinirim teşekkürler.

Re: buttona 3 defa basınca işlem yapsın ?
Kod: Tümünü seç
var
Form1: TForm1;
st:cardinal=0; // Zaman kontrolü
bts:Byte=0; // Basım adedi kontrolü
implementation
.......
...
procedure TForm1.Button1Click(Sender: TObject);
begin
inc(bts,1);
if st=0 then st:=GetTickCount; // Uses kısmına windows gerekebilir.
if bts=3 then
begin
if (GetTickCount-st)/1000<5 then showmessage('Yapılacak İşlem');
st:=0;
bts:=0;
end;
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: buttona 3 defa basınca işlem yapsın ?
hocam
GetTickCount; burda hata veriyor, delphi 7 de çalışıyor ama xe8 de çalışmıyor
procedure TANA_SAYFA_PENCERE.Image4Click(Sender: TObject);
begin
inc(bts,1);
if st=0 then st:=GetTickCount;
if bts=3 then
begin
if (GetTickCount-st)/1000<5
then
showmessage('Yapılacak İşlem');
st:=0;
bts:=0;
end;
end;
GetTickCount; burda hata veriyor, delphi 7 de çalışıyor ama xe8 de çalışmıyor
procedure TANA_SAYFA_PENCERE.Image4Click(Sender: TObject);
begin
inc(bts,1);
if st=0 then st:=GetTickCount;
if bts=3 then
begin
if (GetTickCount-st)/1000<5
then
showmessage('Yapılacak İşlem');
st:=0;
bts:=0;
end;
end;
Re: buttona 3 defa basınca işlem yapsın ?
Yine "hata veriyor" demişsiniz ama hatayı yazmamışsınız 
Biz tahmin yaparak devam edelim en iyisi: XE8 için System.Classes unitini eklemelisiniz.

Biz tahmin yaparak devam edelim en iyisi: XE8 için System.Classes unitini eklemelisiniz.
There's no place like 127.0.0.1
Re: buttona 3 defa basınca işlem yapsın ?
Butona basınca timeri enable degilse enable yapıp, 5000 ms süreli timera da button tıklama bilgisi 3 olduğunda şeklinde yazip timer için 5000 ms sonunda Disabled yazardım sanırım ben.
Kodu yazsam daha iyiydi
Kodu yazsam daha iyiydi

Re: buttona 3 defa basınca işlem yapsın ?
Merhaba,
Aşağıdaki kod Delphi 10.1 altında sorunsuz çalışmakta ve istenildiği gibi 5 saniye içinde 3 tıklama kontrolünü yapmaktadır.
Aşağıdaki kod Delphi 10.1 altında sorunsuz çalışmakta ve istenildiği gibi 5 saniye içinde 3 tıklama kontrolünü yapmaktadır.
Kod: Tümünü seç
unit Unit15;
interface
uses
Winapi.Windows,
Winapi.Messages,
System.SysUtils,
System.Variants,
System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls;
type
TForm15 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
StartTime: Cardinal;
ClickCount: Byte;
public
{ Public declarations }
end;
var
Form15: TForm15;
implementation
{$R *.dfm}
procedure TForm15.Button1Click(Sender: TObject);
procedure ResetClickState();
begin
Button1.Tag := 0;
StartTime := 0;
ClickCount := 0;
end;
const
ClickLimit = 3;
TimeLimit = 5;
begin
if Button1.Tag = 0 then
begin
Button1.Tag := 1; // Tıklama süreci başladı
StartTime := GetTickCount();
ClickCount := 1;
Exit();
end;
inc(ClickCount);
if ClickCount = ClickLimit then
begin
if ((GetTickCount() - StartTime) div 1000) <= TimeLimit then
begin
ShowMessage('Clicked 3 times in 5 secs');
ResetClickState();
end;
end
else
if ClickCount > ClickLimit then
begin
Beep(); // Kullanıcıya bir geri bildirim olarak ses çıkaralım. Zamanında işlem gerçekleşmedi
ResetClickState();
end;
end;
end.
Re: buttona 3 defa basınca işlem yapsın ?
En temizi kendi custom bileşeninizi create edip, 3 tane tarihi tutacak bir array oluşturup, her seferinde yeni tarihi en eski tarihin üzerine yazıp istediğiniz 3 tarih belli bir süre aralığını sığıyorsa (3 sn, 5 sn. neyse) yazacağınız yeni bir eventi tetikleyebilirsiniz. Ya da bir seferlik kullanılacak bir şey ise bu işi değişkenlerle de yapıp onclick'de bu değerleri aynı şekilde kontrol edebilirsiniz.
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: buttona 3 defa basınca işlem yapsın ?
Merhaba,
Cevabınız için çok teşekkür ederi.
StartTime := GetTickCount(); // bu satırda hata veriyor uses kısmına sizin verdiklerinizi ekleyincede System.Classes sayfasında hata veriyor
Cevabınız için çok teşekkür ederi.
StartTime := GetTickCount(); // bu satırda hata veriyor uses kısmına sizin verdiklerinizi ekleyincede System.Classes sayfasında hata veriyor
Kod: Tümünü seç
procedure PropertyNotFound(const Name: string);
begin
raise EReadError.CreateResFmt(@SUnknownProperty, [Name]);
end;
Re: buttona 3 defa basınca işlem yapsın ?
Hatanın ne olduğunu bizimle paylaşabilir misiniz? Mesajlar kısmında fare sağ tuş tıklayarak hata mesajını hafızaya kopyalayabilirsiniz.erdogan_ozkaya yazdı:Merhaba,
Cevabınız için çok teşekkür ederi.
StartTime := GetTickCount(); // bu satırda hata veriyor uses kısmına sizin verdiklerinizi ekleyincede System.Classes sayfasında hata veriyor
Kod: Tümünü seç
procedure PropertyNotFound(const Name: string); begin raise EReadError.CreateResFmt(@SUnknownProperty, [Name]); end;
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: buttona 3 defa basınca işlem yapsın ?
Aşağıdaki kod işini görmesi lazım
Kod: Tümünü seç
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
procedure prc_Sifirla;
begin
(Sender as TButton).Hint := IntToStr(GetTickCount);
(Sender as TButton).Tag := 1;
(Sender as TButton).Caption := IntToStr((Sender as TButton).Tag);
end;
begin
if (Sender as TButton).Hint = '' then
prc_Sifirla
else
begin
if (GetTickCount - StrToInt((Sender as TButton).Hint) ) <= 5000 then
begin
(Sender as TButton).Tag := (Sender as TButton).Tag + 1;
if (Sender as TButton).Tag = 3 then
(Sender as TButton).Caption := '5 sn. doldu'
else
if (Sender as TButton).Tag < 3 then
(Sender as TButton).Caption := IntToStr((Sender as TButton).Tag)
else
if (Sender as TButton).Tag > 3 then
begin
prc_Sifirla;
(Sender as TButton).Caption := IntToStr((Sender as TButton).Tag);
end;
end
else
prc_Sifirla;
end;
end;
end.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana