Autor Beitrag
matt1
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 02.02.09 22:31 
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:
ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 02.02.09 22:36 
Moin und :welcome: im Forum!

user profile iconmatt1 hat folgendes geschrieben Zum zitierten Posting springen:
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:

user profile iconmatt1 hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
There are 10 types of people - those who understand binary and those who don´t.
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: 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:

ausblenden 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
  {... mach und tu ...}
end;

procedure TParserDemoF.ProcessBatch(parm1:String; parm2:String) ;
begin
     myTimer := TTimer.Create(self) ;
     myTimer.Enabled := True ;
     myTimer.Interval := 20000 ;
     myTimer.OnTimer := MyTimerEvent ;
end ;

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
matt1 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 02.02.09 23:19 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Mo 02.02.09 23:23 
Neue Frage, neuer Thread!

Nur, weil es ein Einzeiller ist, antworte ich mal drauf:
ausblenden Delphi-Quelltext
1:
  Self.Hide();					

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 03.02.09 01:43 
user profile iconDunkel hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
  Self.Hide();					
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 03.02.09 11:16 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 03.02.09 11:34 
Aber nur bei sehr neuen Delphiversionen ;-).
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 03.02.09 13:36 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Aber nur bei sehr neuen Delphiversionen ;-).
Delphi 7 ist sehr neu? :nixweiss:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 03.02.09 14:57 
Sorry, ich habe das mit MainFormOnTaskbar verwechselt. :oops:
Das gibt es erst bei neueren Versionen.
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 03.02.09 16:17 
...oder man nimmt eine DLL, da kann man auch Timer nutzen und hat kein Formular.
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
myTimer.Name:= 'myTimer';					


Bis bald Chemiker
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 03.02.09 21:47 
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
...oder man nimmt eine DLL, da kann man auch Timer nutzen und hat kein Formular.
Und wer soll die DLL dann laden? :gruebel:
matt1 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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