C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[58574] Re:함수에 쿨타임 주기
장성호 [nasilso] 1171 읽음    2009-09-17 17:55
음...

다음과 같이 하면 timer도 필요없구..
button이 여러개라도 상관이 없으며..
Button별로 CoolTime을  모두 다르게 줄수도 있습니다.


class TButton : public Stdctrls::TButton
{
    int m_iClickTime;
    int m_iCoolTime;
public:


    __fastcall TButton(TComponent* Owner)
        : Stdctrls::TButton(Owner)
    {
        m_iClickTime=GetTickCount();
        m_iCoolTime=0;
    }
    DYNAMIC void __fastcall Click()
    {
        if((GetTickCount()-m_iClickTime) < m_iCoolTime ) return;
        Stdctrls::TButton::Click();

        m_iClickTime=GetTickCount();
    }

public:
	__property int CoolTime = {read=m_iCoolTime, write=m_iCoolTime};

};

#define TButton ::TButton

class TForm1 : public TForm
{
__published:	// IDE-managed Components
    TImage *Image1;
    TButton *Button1;
    TButton *Button2;
    TButton *Button3;
    TButton *Button4;
    //....

};


위와같이 TForm1 선언 앞쪽에...

Stdctrls유닛의 TButton을 교체식클래스로 새로만들어 정의 했습니다.
기본적으로 CoolTime은 0 이구요
설정하기에 따라 달라 집니다. tickcount를 이용한것 이므로 1000 이 1초를 타나냅니다.

그런다음 다음과 같이 Button7의 CoolTime을 바꿔보면서..
Button7을 클릭해보세요
Memo장에 직히는 log를 통해 아무리 빨리 클릭해도 cooltime 안에는 OnClick이벤트가 호출되지 않을것입니다.

void __fastcall TForm1::Button7Click(TObject *Sender)
{
    Memo1->Lines->Add(Now().FormatString("hh:nn:ss zzz"));
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button8Click(TObject *Sender)
{
    if(Button7->CoolTime==0)
        Button7->CoolTime=2000;
    else
        Button7->CoolTime=0;

}
//---------------------------------------------------------------------------




그럼...

정문환 님이 쓰신 글 :
: 예를들어 어떤 버튼을 클릭하면 목록을 refresh하는 메소드가 있다고 치구요.
:
: 목록refresh양이 많아서 2초 동안은 버튼이 여러번 눌려진다해도 눌러지는 것을 무시하고
: 딱 한 번만 처리하려고 합니다.
: (물론 버튼을 비활성화하고 2초후에 다시 활성화해도되지만 여기서는비활성화되지 않게 하고싶습니다.)
:
: timer를 사용하면 되는것같은데 한 개라면 문제가 없는데 10개의 버튼을 만든다고 하면
: 각각의 timer를 10개씩이나 만들어야 하는데 비효율적인것같아서 질문드립니다.
:
: timer를 하나로 사용하는 방법 또는 timer외에 다른 방법이 있을까요?

+ -

관련 글 리스트
58563 함수에 쿨타임 주기 정문환 1318 2009/09/17
58574     Re:함수에 쿨타임 주기 장성호 1171 2009/09/17
58575         Re:Re:함수에 쿨타임 주기 Gromit 1065 2009/09/17
58566     Re:꼭 2초가 아니라면.... B초보 1028 2009/09/17
58569         Re:Re:꼭 2초가 아니라면.... Gromit 973 2009/09/17
58572             Re:Re:Re:꼭 2초가 아니라면.... 1 961 2009/09/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.