Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Timer zur Laufzeit erstellen und einsetzen
matt1 - Mo 02.02.09 22:31
Titel: Timer zur Laufzeit erstellen und einsetzen
Hallo,
ich brauche einen Timer für eine Art "crawler" program, also ohne Forms, ohne Paletten. Läuft alles batch. Mein Problem ist dass ich den Timer zwar zur Laufzeit erstellen kann, aber wie kriege ich den OnTimer Event richtig hin?
also etwa so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TParserDemoF.ProcessBatch(parm1:String; parm2:String) ; var myTimer: TTimer ; begin myTimer := TTimer.Create(self) ; myTimer.Enabled := True ; myTimer.Interval := 20000 ; myTimer.OnTimer(myTimer) ; end ; |
Der Compiler schluckt das soweit, aber ich versteh nicht, wo ich jetzt den OnTimer event codieren soll und bin auch nicht sicher, ob der obige Code überhaupt so funktionieren wird. Hat jemand ein kleines Beispiel? vermutlich ist meine Frage eher dumm, aber ich brauche Delphi nur gelegentlich.
Vielen Dank schonmal.
Matt
Moderiert von
Narses: Delphi-Tags hinzugefügt
Narses - Mo 02.02.09 22:36
Titel: Re: Timer zur Laufzeit erstellen und einsetzen
Moin und :welcome: im Forum!
matt1 hat folgendes geschrieben : |
also ohne Forms, ohne Paletten. Läuft alles batch. |
Du willst eine Konsolenanwendung schreiben? Dann verabschiede dich schonmal vom TTimer, der läuft da nicht, dafür brauchst du eine MessageLoop, und die ist erst im TApplication-Objekt drin. :idea:
Wenn es denn unbedingt eine Kommandozeilenanwendung werden soll, dann brauchst du schon einen Thread, um einen Timer nachzubilden. :nixweiss:
matt1 hat folgendes geschrieben : |
Mein Problem ist dass ich den Timer zwar zur Laufzeit erstellen kann, aber wie kriege ich den OnTimer Event richtig hin? |
Möglicherweise hat sich dein "Problem" grade erledigt ;) ansonsten mach eine VCL-Anwendung und verstecke das Hauptformular. :idea:
cu
Narses
Dunkel - Mo 02.02.09 23:04
Nabend!
Wie Narses schon schrieb, ist ein TTimer in einer Konsolen-Applikation nicht möglich. Nichts desto trotz, der Vollständigkeit halber, ein Beispiel einer manuellen Zuweisung einer Event-Behandlung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| Type TParserDemoF = class(TForm) private myTimer: TTimer ; procedure MyTimerEvent(Sender: TObject); end;
procedure TParserDemoF.MyTimerEvent(Sender: TObject); begin end;
procedure TParserDemoF.ProcessBatch(parm1:String; parm2:String) ; begin myTimer := TTimer.Create(self) ; myTimer.Enabled := True ; myTimer.Interval := 20000 ; myTimer.OnTimer := MyTimerEvent ; end ; |
matt1 - Mo 02.02.09 23:19
Titel: Re: Timer zur Laufzeit erstellen und einsetzen
Narses hat folgendes geschrieben : |
Möglicherweise hat sich dein "Problem" grade erledigt ;) ansonsten mach eine VCL-Anwendung und verstecke das Hauptformular. :idea: |
vielen Dank euch beiden. Ja das mit dem versteckten Hauptformular wäre vermutlich am einfachsten, da ich eine bestehende Applikation einfach umschreiben muss, so dass sie in Batch läuft. Einfach ohne User-Input, alles über Parms gesteuert. Aber wie geht das mit dem verstecken - so grob ausgedrückt.
tx,
Matt
Dunkel - Mo 02.02.09 23:23
Neue Frage, neuer Thread!
Nur, weil es ein Einzeiller ist, antworte ich mal drauf:
jaenicke - Di 03.02.09 01:43
Dunkel hat folgendes geschrieben : |
|
Dann muss es aber schon angezeigt gewesen sein. Am einfachsten ist es, einfach den Projektquelltext umzuschreiben und das Formular zwar zu erzeugen, aber gar nicht erst anzuzeigen. ;-)
Dann ist es quasi wie ein unsichtbares Fensterhandle zum Botschaftsempfang. Das wäre die andere Möglichkeit, die aber etwas mehr Aufwand bedeutet. ;-)
JayEff - Di 03.02.09 11:16
jaenicke hat folgendes geschrieben : |
Am einfachsten ist es, einfach den Projektquelltext umzuschreiben und das Formular zwar zu erzeugen, aber gar nicht erst anzuzeigen. ;-) |
Was sich, wenn ich nicht irre, über ShowMainForm := False erreichen lässt, oder? Diese Zeile schreibe man in die .dpr-Datei vor das Application.Run (oder doch vor die CreateForms?) und freue sich über ein nicht angezeigtes Fenster :zustimm:
wie sie sehn, sehn sie nix
jaenicke - Di 03.02.09 11:34
Aber nur bei sehr neuen Delphiversionen ;-).
JayEff - Di 03.02.09 13:36
jaenicke hat folgendes geschrieben : |
Aber nur bei sehr neuen Delphiversionen ;-). |
Delphi 7 ist sehr neu? :nixweiss:
jaenicke - Di 03.02.09 14:57
Sorry, ich habe das mit MainFormOnTaskbar verwechselt. :oops:
Das gibt es erst bei neueren Versionen.
Delete - Di 03.02.09 16:17
...oder man nimmt eine DLL, da kann man auch Timer nutzen und hat kein Formular.
Chemiker - Di 03.02.09 19:42
Hallo matt1,
vielleicht noch ein Hinweis.
Wenn Du den Timer zur Laufzeit erstellen willst, solltest Du in auch einen Namen geben.
Delphi-Quelltext
1:
| myTimer.Name:= 'myTimer'; |
Bis bald Chemiker
jaenicke - Di 03.02.09 21:47
hathor hat folgendes geschrieben : |
...oder man nimmt eine DLL, da kann man auch Timer nutzen und hat kein Formular. |
Und wer soll die DLL dann laden? :gruebel:
matt1 - Mi 04.02.09 15:45
dank an alle, Problem ist gelöst. Ich starte die Applikation normal, FormCreate() wird ausgeführt, doch bevor die Form am Bildschirm erscheint, rufe ich die Batch Routine auf, und aktiviere den Timer. Am Schluss dann einfach
myTimer.Enabled := false ;
self.Hide ;
close ;
und die Applikation endet ohne Fehlermeldung. Während der Laufzeit ist die Form zwar sichtbar, aber man kann nichts eingeben und daher stört es micht nicht.
Matt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!