Hallo Zusammen,
ich schreibe grade an einem Plugin für eine FremdanbieterSoftware.
Dieses Plugin muss als
DLL bereitgestellt werden.
Nun ist es aber so das mein Prototyp einen
API-Timer (mittels SetTimer) verwendet.
Da mein Plugin kein WindowHandle hat, und ich das auch zu Problemen führen könnte, habe ich eine kleine Hilfsklasse erstellt.
Diese holt sich ein WindowHandle und implementiert die WndProc Procedure, so dass sie auf WindowsMessages reagieren könnte.
Das Problem ist:
Mittels SendMessage lässt sich die WndProc funktion ordnungsgemäß ausführen,
SetTimer jedoch tut garnichts, sorgt also für keine WM_TIMER Message die dann meinen Code anstoßen würde.
Wo ist das Problem? Was mache ich falsch?
Hier mal der Code der Hilfsklasse:
Das "Kernel" Zeug könnt Ihr ignorieren - es dient nur zur kommunikation mit der Hauptklasse.
Delphi-Quellcode:
TDllTimer=
class(TObject)
private
FWndHandle : HWND;
myKernel: IIPSKernel;
// The Link to the Main Application (not Important for this Issue)
public
procedure WndProc(
var Msg: TMessage);
constructor Create(IKernel: IIPSKernel);
destructor Destroy;
override;
property WindowHandle: HWND
read FWndHandle;
end;
implementation
constructor TDllTimer.Create(IKernel: IIPSKernel);
begin
myKernel:=IKernel;
// The Link to the Main Application (not Important for this Issue)
// Get a Window Handle
FWndHandle := AllocateHWnd(WndProc);
// This Works:
SendMessage(FWndHandle,WM_TIMER, 1,0);
// This does not:
SetTimer(FWndHandle, 1, 1000,
nil);
end;
destructor TDllTimer.Destroy;
begin
DeAllocateHWnd(FWndHandle);
inherited Destroy;
end;
procedure TDllTimer.WndProc(
var Msg: TMessage);
begin
myKernel.LogMessage(KL_MESSAGE, 0, '
My Timer', '
Any EVENT' );
// Just for debugging
if Msg.Msg = WM_TIMER
then
myKernel.LogMessage(KL_MESSAGE, 0, '
My Timer', '
TIMER EVENT' );
// Just for debugging
Msg.Result := DefWindowProc(FWndHandle, Msg.Msg, Msg.wParam, Msg.lParam);
end;
Vielen Vielen Dank.
Bin noch nicht wirklich lang mit Delphi unterwegs - aber für dieses Plugin gings nicht anders!
MfG
Huelke