Autor Beitrag
majolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334

Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
BeitragVerfasst: Fr 20.12.02 14:17 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: 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

_________________
Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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:
ausblenden 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
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: 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:
ausblenden volle Höhe 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)

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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