Hallo zusammen.
Ich habe mich am Wochenende ein wenig weiter mit der Modulentwicklung beschäftigt.
Ich wollte mein Modul erweitern und brauchte dafür einen Timer, nach längeren versuchen einen API Timer in einer Hilfsklasse umzusetzen
[ mit SetTimer, einer WndProc und AllocateHWnd ]
- was aus mir nicht begreiflichen Gründen gescheitert ist!
Deshalb habe ich nochmal die 3 Beispiel Pojekte die ich damals von Paresy bekommen habe durchsucht und herausgefunden, das IPS bereits Timer zur verfügungstellt.
Ich habe mich also daran gemacht aus dem UOneWire-Modul die Timerbefehle zu portieren.
Aber leider klappt das auch nicht.
Ich habe mal alle relvanten Stellen herausgeschrieben:
TIPSMyModule = class(TIPSModuleObject,
IIPSOneWire,
IIPSTMEXClient,
IIPSModule)
private
fTimer : TTimerID;
.
.
.
//--- Private Procedures/Functions
procedure UpdateEvent; stdcall;
procedure StartTimer;
constructor Create(IKernel: IIPSKernel; InstanceID: TInstanceID); override;
destructor Destroy; override;
.
.
.
implementation
.
.
.
//------------------------------------------------------------------------------
constructor TIPSMyModule.Create(IKernel: IIPSKernel; InstanceID: TInstanceID);
begin
inherited;
fTimer := fKernel.TimerPoolEx.RegisterTimer('UpdateEvent', fInstanceID, UpdateEvent);
.
.
.
//Load/Apply Settings
ConstructorPostProcess;
end;
//------------------------------------------------------------------------------
destructor TIPSMyModule.Destroy;
begin
//Save Settings
DestructorPreProcess;
//Cleanup custom Object
if fTimer <> 0 then
fKernel.TimerPoolEx.UnregisterTimer(fTimer);
.
.
.
inherited;
end;
//------------------------------------------------------------------------------
procedure TIPSMyModule.StartTimer;
begin
fKernel.TimerPoolEx.SetInterval(fTimer, 1000);
end;
//------------------------------------------------------------------------------
procedure TIPSMyModule.UpdateEvent;
begin
fKernel.LogMessage(KL_MESSAGE, 0, 'MyModule', '*****Timer******');
end;
.
.
.
end.
Es wird nie eine Message geloggt => Timer läuft nicht.
Hab ich was vergessen/falsch gemacht?
Sehe ich richtig das der Timer mit SetInerval automatisch gestartet wird oder muss ich den noch mal von Hand starten?
Wie Stoppe ich den Timer wieder? (muss ich Ihn das Interval auf „0“ setzen oder den Timer „unregistern“).
Generell finde ich es recht schwierig Module zu entwickeln ohne einen größeren Blick auf den „Rahmen“ zu haben. Gibt es mitlerweile eine kleine Funktions/Klassen Übersicht die einem zeigt was alles möglich ist? Oder mehr Beispielprogramme das man sich das selbst erschließen kann?
Vielen Dank für Eure Hilfe,
MfG Huelke