Entwickler-Ecke
Sonstiges (Delphi) - In welches Ereignis muss ich meine Logprozedur schreiben?
majolo - Fr 20.12.02 14:17
Titel: In welches Ereignis muss ich meine Logprozedur schreiben?
Hallo,
habe ein kleines Problem.ich möchte gerne protokollieren,wann mein Programm gestartet und wann beendet wurde.Dafür habe ich eine Timer mit folgendem Befehl ausgerüstet, der mir aktuelle Uhrzeit und Datum in eine Variable schreibt:
Quelltext
1: 2: 3: 4:
| var dt:string; begin dt:=DateTimeToStr(now); end; |
In meiner StartLog-Prozedur sollte dann die Startzeit in eine INI geschrieben werden.Nur mit welchem Event muss ich die Prozedur aufrufen?OnShow,OnCreate klappen nicht.Das festhalten der endzeit klappt einwandfrei über Onclose.Die Prozedur ist genauso wie die Log.Startprozedur,heißt nur anders.
Danke
majolo
PS:Hoffentlich wars verständlich
Renegade - Do 09.01.03 23:07
Moin erstmal!
Versuchs mal im Ereignis onShow. Mußt dann nur einen boolean setzen, damit das loggen nicht jedes mal ausgeführt wird, wenn dein Form angezeigt wird (visible:=true).
Gruß Renegade
Delete - Fr 10.01.03 08:52
Titel: Re: In welches Ereignis muss ich meine Logprozedur schreiben
| majolo hat folgendes geschrieben: |
| OnShow,OnCreate klappen nicht. |
Warum nicht?
Bei mir hat ein kleiner Test problemlos geklappt.
Tino - Fr 10.01.03 10:40
Hallo,
so weit ich das verstanden habe will majolo doch protokolieren wann seine Anwendung gestartet und beendet wurde. Also warum nicht diese Protokolierung in die Projektdatei einbauen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| program Project1;
uses Forms, Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
begin // Hier den Startzeitpunkt in die Logdatei schreiben
Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run;
// Hier den Endzeitpunkt in die Logdatei schreiben end. |
Gruß
TINO
Delete - Fr 10.01.03 11:53
Is´ ja richtig, Tino. Das beantwortet aber nicht meine Frage, warum es z.B. im "OnCreate" nicht gehen soll. :)
Wolff68 - Fr 10.01.03 19:20
Eventuell deshalb:
| majolo hat folgendes geschrieben: |
| Dafür habe ich eine Timer mit folgendem Befehl ausgerüstet |
Was bitte willst mit einem Timer???
Und in einer Ini könntest immer nur den letzten Aufruf protokollieren.
Ich würde folgendes machen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| procedure TForm1.FormCreate(Sender: TObject); var Datei : TextFile; begin AssignFile(Datei, 'C:\Zeiten.txt'); IF FileExists('C:\Zeiten.txt') then begin try Append(Datei); WriteLn(Datei, 'Start : '+DateTimeToStr(Now)); CloseFile(Datei); except ShowMessage('Datei konnte nicht geöffnet werden !'); end; end else begin try ReWrite(Datei); WriteLn(Datei, 'Start : '+DateTimeToStr(Now)); CloseFile(Datei); except ShowMessage('Datei konnte nicht erzeugt werden !'); end; end; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var Datei : TextFile; begin AssignFile(Datei, 'C:\Zeiten.txt'); IF FileExists('C:\Zeiten.txt') then begin try Append(Datei); WriteLn(Datei, 'Ende : '+DateTimeToStr(Now)); CloseFile(Datei); except ShowMessage('Datei konnte nicht geöffnet werden !'); Exit; end; end; // Den Else-Teil kann man weglassen, // da die Datei ja ggf. beim Programmstart erzeugt wurde. end; |
Vorteil: Du hast nicht nur den letzten Aufruf, sondern ALLE Aufrufe in der Datei.
Nachteil: Dito :o Die Datei wächst und wächst,...
Entweder also Im OnCreate generell mit ReWrite arbeiten, dann machst immer eine neue (leere) Datei und verlierst die letzten Aufrufe (Dann kannst gleich mit Ini arbeiten), oder Du löschst ab einer gewissen Größe oben 2 Zeilen raus. (Was in einem weiteren Topic enden wird...) Hatte ich aber auch schonmal gemacht. Nur WO!?
PS: Den Code kannst unter einbeziehung diverser Units auch wie Tino sagte in das Hauptprogramm schreiben. Wobei es eventuell dennoch sicherer ist die Datei vor den Application aufrufen zu schliessen und später neu aufzumachen. (Offene Dateien sind bei einem Programmabsturz nicht so der Hit)
Tino - Sa 11.01.03 14:37
| MathiasSimmack hat folgendes geschrieben: |
| Is´ ja richtig, Tino. Das beantwortet aber nicht meine Frage, warum es z.B. im "OnCreate" nicht gehen soll. :) |
Ich habe auch keine Antwort auf diese Frage. Denn eigentlich sollte das ja im OnCreate und im OnDestroy auch funktionieren.
Gruß
TINO
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!