TTimer ohne Fenster

Hallo,

ich habe hier eine DLL die eine Pause machen soll… Eigentlich ganz einfach, mit Sleep… Das geht aber leider nicht, da dadurch irgendwie Programm wie Installshield und einige Datenbanken nicht mehr funktionieren:frowning:
Am besten wäre eine TTimer. Ich schaffe es jedoch nicht, dem Ereignis OnTimer eine Prozedur zuzuweisen, da ich kein Formular habe…
Vielleicht hat ja jemmand noch eine besserer Idee, ein Programm anzuhalten, ohne das andere Applikationen oder die Recourcen behindert werden.

Vielen Dank schon ein mal!!!

Setzt den Timer in ein DataModule oder probier diese Proc:

procedure Delay(MS : Integer);

var
FirstTickCount : LongInt;

begin
FirstTickCount := GetTickCount;
repeat
Application.ProcessMessages;
until ((GetTickCount - FirstTickCount) >= LongInt(MS));
end;

Wie wärs mit der API-Funktion „SET TIMER“ aus der user32 DLL?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Sebastian,
Du kannst auch ohne Formular mit der TTimer-Komponente von Delphi arbeiten, da sie ja keine sichtbare Komponente ist. Du mußt sie nur in der DLL zur Laufzeit erzeugen und auch zur Laufzeit ein OnTimer-Ereignis zuweisen. Das tust Du in irgendeiner Prozedur, die von Deiner DLL zum Anfang aufgerufen wird bzw. im Initialization-Teil der Unit. Beispiel:

var
 MyTimer : TTimer;

procedure Irgendwas;
begin
 MyTimer := TTimer.Create(Self); // bzw. nil
 if Assigned(MyTimer) then
 MyTimer.OnTimer := MyTimerEvent; 
end;


procedure MyTimerEvent(Sender: TObject);
begin
 // mach was...
end;

Das Ganze geht natürlich auch mit API-Funktionen, dann kannst Du Dir das Einbinden der ExtCtrls-Unit sparen…Vergiß übrigens nicht, die Komponente am Schluß wieder freizugeben, Du hast ja kein Formular, das das für Dich erledigt :o)

Gruß Thomas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]