buttona 3 defa basınca işlem yapsın ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen erdogan_ozkaya »

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.
boreas
Üye
Mesajlar: 120
Kayıt: 05 Tem 2007 12:39
Konum: Ankara

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen boreas »

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
....
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen erdogan_ozkaya »

yapamadım ya :(
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen erdogan_ozkaya »

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;
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen SimaWB »

Sorduğunuz sorunun cevabı bu yazdığınız kodlar olduğuna emin misiniz?
There's no place like 127.0.0.1
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen erdogan_ozkaya »

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.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen loaded »

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.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen erdogan_ozkaya »

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;
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen SimaWB »

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.
There's no place like 127.0.0.1
10.Köy
Üye
Mesajlar: 54
Kayıt: 29 Ara 2015 07:41

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen 10.Köy »

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 :)
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen ertank »

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.

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.
edo
Üye
Mesajlar: 40
Kayıt: 05 Haz 2005 11:12

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen edo »

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.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen erdogan_ozkaya »

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;
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen ertank »

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;
Hatanın ne olduğunu bizimle paylaşabilir misiniz? Mesajlar kısmında fare sağ tuş tıklayarak hata mesajını hafızaya kopyalayabilirsiniz.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: buttona 3 defa basınca işlem yapsın ?

Mesaj gönderen adelphiforumz »

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
Cevapla