ㅠㅠ
interface
uses
....;
procedure XXXXX(Sender: TObject); // 이거 넣도 에러...
procedure Timer_Create;
implementation
procedure XXXXX(Sender: TObject);
begin
...
...
end;
procedure Timer_Create;
begin
OkTimer := TTimer.Create(nil);
OkTimer.OnTimer := XXXXX; // 요기가 문제입니다.
end;
일단 폼이 없다보니 이런 오류 메시지가 나네요.
Incompatible Types: method pointer and regular procedure
컴포너트를 만드는것도 아니고 걍 폼없는 유닛하나 연결했는데 마침 타이머가 필요해서요.
어떻게 하면 되나요?
하이여, 방가여 남쉐기님
여유로움 KDDG_Check입니다. 커커커
음 일단 에러의 원인은 말그대루 메소드여야 하는데 일반 프로시져를 대입하면 호환이 안된다는 것이지요.
그니까 TTimer.OnTimer는 메소드여야 한다는 말이 겠지요.
해서 걍 가베지 클래스를 하나 만들어 메소드를 만들거나
아님 걍 타이머 클래스를 상속받아서 하나 맹글거나 하면 되겠지요.
예를 들어 보면
콘솔 어플리게이션으루다가
********************************************************
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows, Messages,Dialogs, Forms, ExtCtrls, Classes;
var
TimerCount : integer;
type
TMyTimer = class( TTimer ) //타이머 상속받아서
public
constructor Create( AOwner: TComponent ); override;
procedure TimerProc( Sender: TObject );
end;
TMyClass = class(TComponent) //가베지 클래스
constructor Create( AOwner: TComponent ); override;
procedure TimerProc( Sender: TObject );
end;
{ TMyTimer }
constructor TMyTimer.Create(AOwner: TComponent);
begin
inherited;
OnTimer := TimerProc;
end;
procedure TMyTimer.TimerProc(Sender: TObject);
begin
writeln('Timer1 시간 다 됐다' + IntToStr(TimerCount));
inc(TimerCount);
end;
{ TMyClass }
constructor TMyClass.Create(AOwner: TComponent);
begin
inherited;
end;
procedure TMyClass.TimerProc(Sender: TObject);
begin
writeln('Timer2 시간 다 됐다');
end;
var
testTimer1 : TTimer;
TestTimer2 : TTimer;
TestClass : TMyClass;
begin
{ TODO -oUser -cConsole Main : Insert code here }
timerCount := 0;
TestTimer1 := TMyTimer.Create(Application); //타이머 상속
testTimer1.Interval := 1000;
TestTimer2 := TTimer.Create(Application);
TestTimer2.Interval := 3000;
TestTimer2.OnTimer := TestClass.TimerProc; //가베지 클래스
try
while TimerCount < 10 do Application.ProcessMessages;
finally
testTimer1.Free;
testTimer2.Free;
showmessage('끝났다');
end;
end.
********************************************************
저는 이렇게 해결 했는데, 이게 옳은 방법인지는 모르겠네요.
다른 분들의 더 좋은 방법 있으시면 말씀해 주세요
부디 좋은 결과 있길 바랍니다.
GG KDDG, Forever KDDG
즐스 & 즐프