Q&A

  • 컴포넌트를 만드는데 타이머를 어떻게 구현해야 할까요?! 프로님들 도와 주세요~!!
Timage를 이용해서 컴포넌트를 만들고 있습니다.

처음 만드는거라..컴포넌트에서 어떤 객체를 불러와서 create(self)시킬 수 있을 거란 것도 겨우 알아냈는데요~

어쨌든 폼에서 이미지에 마우스를 올렸을때 TForm을 show시키는 것을 해봤습니다...잘 됩니다..^^*

그런데..이벤트가 발생할때마다 바로바로 TForm을 show시키면..버벅버벅.화면이 마구 깜빡거립니다..

그래서 타이머를 만들어서 몇초동안 계속 그 같은 이벤트를 발생시키는 넘들만..

진짜로 받아들이게 할라고 하는데..

그래서 Tform이랑 같은 방법으로 타이머를 create를 시켜서 일단 enable을 false로 두고 이벤트가 발생하는 시점에서 true로 한 다음 interval시간이 지나도 같은지를 확인하고 진짜면 처리하는 프로시저로 가게끔 하는 알고리즘입니다.

그런데,,여기서....onTimer를 어떻게 불러와야할까요?

어떻게 선언하며..어떻게 설정을 해야 할지...

도대체 감이 안옵니다...

도저히 못찾겠습니다..프로글래머님들...도와주세요~T.T

----------------------------------컴포넌트를 사용하는 소스------------------------------------------------

procedure TForm1.Image11MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

Image11.MyClick;

end;



----------------------------------컴포넌트 소스------------------------------------------------

unit Image1;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls;



type

TImage1 = class(TImage)

private

{ Private declarations }

protected

{ Protected declarations }

public

{ Public declarations }

Form10: TForm;

Timer1: TTimer;



constructor Create(AOwner: TComponent); override;

procedure MyClick;

procedure Timer; dynamic;

published

{ Published declarations }

end;



procedure Register;



implementation



procedure Register;

begin

RegisterComponents('Samples', [TImage1]);

end;



constructor TImage1.Create(AOwner: TComponent);

begin

inherited;

Form10 := TForm.Create(Self);

Timer1 := TTimer.Create(Self);

Timer1.Interval := 1000;

Timer1.Enabled := false;

// Timer1.onTimer := Timer;

end;



procedure TImage1.MyClick;

begin

Form10.show;

// Timer1.Enabled := true;

end;



procedure TImage1.Timer;

begin

Form10.show;

end;



end.



2  COMMENTS
  • Profile
    전철호 2001.12.04 19:51
    unit Image1;



    < 다음은 소스를 수정한 부분입니다.

    참고하세요>

    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    ExtCtrls;



    type

    TImage1 = class(TImage)

    private

    { Private declarations }

    protected

    { Protected declarations }

    public

    { Public declarations }

    Form10: TForm;

    Timer1: TTimer;



    constructor Create(AOwner: TComponent); override;

    destructor Destroy; override; // 추가

    procedure MyClick;

    procedure Timer(Sender: TObject); // 수정

    published

    { Published declarations }

    end;



    procedure Register;



    implementation



    procedure Register;

    begin

    RegisterComponents('Samples', [TImage1]);

    end;



    constructor TImage1.Create(AOwner: TComponent);

    begin

    inherited;

    Form10 := TForm.Create(Self);

    Timer1 := TTimer.Create(Self);

    Timer1.Interval := 1000;

    Timer1.Enabled := false;

    Timer1.onTimer := Timer;

    end;



    destructor TImage1.Destroy;

    begin

    Form10.Free;

    Timer1.Free;

    Form10 := nil;

    Timer1 := nil;

    end;



    procedure TImage1.MyClick;

    begin

    Form10.show;

    Timer1.Enabled := true;

    end;



    procedure TImage1.Timer(Sender: TObject);

    begin

    Form10.show;

    end;



    end.



  • Profile
    아마글래머 2001.12.04 20:13
    저도 언넝~ 여러 이들에게 도움이 되는 사람이 되겠습니다..