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.
< 다음은 소스를 수정한 부분입니다.
참고하세요>
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.