Fórum SetTimer nao aceita funcao membro de objeto #203702
31/12/2003
0
se eui tirar a funcao do objeto o codigo funciona, mais isso nao pe possivel, vou colocar abaixo um exemplo do meu codigo:
type MyClass = class(TWinControl)
constructor Create(AOwner: TComponent); override;
Procedure PintarIni( Handle: HWND; uMsg, idEvent, dwTime: DWORD ); stdcall;
end;
Procedure TCliente.PintarIni( Handle: HWND; uMsg, idEvent, dwTime: DWORD ); stdcall;
begin
end;
constructor TCliente.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
settimer( Handle, 0, 100, @PintarIni);
end;
Alguem pode me ajudar ?
Emilio.cini
Curtir tópico
+ 0Posts
31/12/2003
Beppe
type
TMyClass = class(TWinControl)
private
FTimerProc: Pointer;
procedure TimerProc(Handle: HWND; uMsg, idEvent, dwTime: DWORD); stdcall;
protected
procedure CreateWnd; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
function CreateMethodThunk(const AMethod: TMethod): Pointer;
type
TCallbackThunk = packed record
POPEDX: Byte;
MOVEAX: Byte;
SelfPtr: Pointer;
PUSHEAX: Byte;
PUSHEDX: Byte;
JMP: Byte;
JmpOffset: Integer;
end;
var
Callback: ^TCallbackThunk;
begin
New(Callback);
Callback.POPEDX := $5A;
Callback.MOVEAX := $B8;
Callback.SelfPtr := AMethod.Data;
Callback.PUSHEAX := $50;
Callback.PUSHEDX := $52;
Callback.JMP := $E9;
Callback.JmpOffset := Integer(AMethod.Code) - Integer(@Callback.JMP) - 5;
Result := Callback;
end;
{ TMyClass }
constructor TMyClass.Create(AOwner: TComponent);
var
M: TMethod;
begin
inherited;
M.Code := @TMyClass.TimerProc;
M.Data := Self;
FTimerProc := CreateMethodThunk(M);
end;
procedure TMyClass.CreateWnd;
begin
inherited;
SetTimer(Handle, 0, 5000, FTimerProc);
end;
destructor TMyClass.Destroy;
begin
Dispose(FTimerProc);
inherited;
end;
procedure TMyClass.TimerProc(Handle: HWND; uMsg, idEvent, dwTime: DWORD);
begin
GetParentForm(Self).Caption := GetParentForm(Self).Caption + ´ - ´ + IntToStr(Random(123123));
end;Mas um TTimer ainda seria mais fácil...
Gostei + 0
31/12/2003
Emilio.cini
Gostei + 0
31/12/2003
Emilio.cini
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)