Hi again,
es funktioniert irgendwie, aber mache ich das so richtig?
strenggenommen darf es so eigentlich noch gar nicht funktionieren (Erklärung weiter unten)…
Die Prozedur von Dir habe ich übernommen und in meine Unit
gepackt,
OK
dann in meinem Hauptprogramm eine neue Variable
eingefügt TickEvent: TNotifyEvent
Achtung: Das ist überflüssig! Eine solche Prozedurvariable wird nicht benötigt! Also weg damit!
und eine neue Prozedur geschrieben
procedure TickEvent(Sender. TObject);
begin
beep;
end;
Eine neue Prozedur mußt Du schreiben, aber es muß unbedingt eine Methode von „Form1“ sein, also procedure TForm1. TickEvent(Sender. TObject). Ist das bei Dir der Fall? Diese Prozedur muß dann natürlich noch in der Formulardeklaration eingetragen werden (am zweckmäßigsten wahrscheinlich im PRIVATE-Teil).
Bei dem Versuch, eine gewöhnliche Prozedur an „MakeMeATimer“ zu übergeben, würdest Du eine Fehlermeldung erhalten („inkompatible Typen“), weil „TNotify“ deklariert ist als „PROCEDURE (Sender: TObject) OF OBJECT“, nicht als „PROCEDURE (Sender: TObject)“.
Starten tue ich das ganze mal zum Testen in FormCreate mit
MakeMeATimer(From1, TickEvent);
nun macht mein Rechner jede Sekunde beep :o)
Mhh, „Beep“ ist nicht ganz unkritisch. „Beep“ ist eine VCL-Prozedur (definiert in Unit SysUtils), die ihrerseits die Windows-Funktion „MessageBeep“ aufruft. Die Sounds, die „MessageBeep“ letztendlich abspielt, hängen von der Einstellung in Systemsteuerung/Audioschemata ab. Wenn dort nun „Kein Sound“ gewählt ist (wie bei mir z. B.), hat Beep keine Wirkung. Daher könnte es sein, daß der Test eines mit Beep „überwachten“ Programms auf Rechner A erfolgreich ist, auf Rechner B aber fehlschlägt, und die Ursache dafür nicht im Programm liegt. Der, der dann im Code nach dem Fehler sucht, hat ein hübsches Problem.
Eine Alternative wäre z. B. die Zeile „Caption := IntToStr(Random(1000000))“. Die „Caption“ ist dabei die Titelzeile des Fensters. Das ist eine praktisch 100%ig sichere Überwachungsmöglichkeit.
Mit freundlichem Gruß
Martin