AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Timer: speichern in ini und auslesen...
Thema durchsuchen
Ansicht
Themen-Optionen

Timer: speichern in ini und auslesen...

Ein Thema von Anfänger · begonnen am 25. Okt 2002 · letzter Beitrag vom 26. Okt 2002
Antwort Antwort
Seite 1 von 3  1 23      
Anfänger

Registriert seit: 24. Okt 2002
Ort: Hamburg
17 Beiträge
 
Delphi 4 Standard
 
#1

Timer: speichern in ini und auslesen...

  Alt 25. Okt 2002, 22:59
Hi und Nabend,
ich möchte gern das aktuelle Datum mit Uhrzeit beim beenden speichern.
Die Zeit und das Datum werden in der Statubar angezeigt.

Code:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Statusbar1.Panels.Items[1].Text   := FormatDateTime(' dddd',Date) + ' der ' + FormatDateTime('dd.mm.yyyy',Date);
Statusbar1.Panels.Items[2].Text   := FormatDateTime('hh:mm:ss',Time);
end;
wie bekomme ich das hin, das das aktuelle Datum mit Uhrzeit in einer ini beim Beenden gespeichert wird und beim Neustart wieder in ! 2 Labeln ! (einmal Datum und Tag ) und (einmal Uhrzeit) geschrieben wird.

( So sollte es aussehen: Sie haben am Sonnabend d. 25.10.2002 um 23.01 den....)

Wer kann mir helfen und gibt auch ein Codebeispiel dazu.

Vielen Dank
Anfänger
Anfänger aus HH
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 25. Okt 2002, 23:25
Moin Anfänger,

also erst einmal die INI:

Falls Du noch nicht damit gearbeitet hast:
Du musst unter Uses noch die Unit IniFiles hinzufügen.
Damit Du beim Start die Werte laden, und beim Beenden speichern kannst, solltest Du Dir ein Feld im private Bereich für die INI anlegen.
Erzeugt wird diese dann im OnCreate Ereignis des Formulares (dort werden dann auch die Daten gelesen).
Gespeichert (und das Objekt wieder freigegeben) im OnDestroy des Formulares.
Mit den Funktionen DateToStr bzw. TimeToStr kannst Du dann das aktuelle Datum (Funktion: Now) in die INI schreiben (Methode: TIniFile.WriteString)
Mit StrToDate, StrToTime, ReadString und einer Umwandlung des Datums mit Hilfe von DayOfWeek kannst Du das ganze dann wieder auslesen.
(für die Umwandlung von DayOfWeek in den entsprechenden Text gibt's auch ein schönes Beispiel in der Hilfe)
Im Prinzip könntest Du auch mit den TIniFile Methoden WriteDate bzw. Time (oder den Read Gegenstücken) Datum und Zeit speichern, aber da Du sie anschliessend eh' wieder als String brauchst halte ich den anderen Weg auch für gangbar. Es gibt halt viele Möglichkeiten.

Ich bastele noch ein Beispiel, aber ich denke, dass Du mit diesen Info's auch schon klarkommen kannst. Zumindest hast Du Stichworte zum Nachschlagen für Einzelheiten.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Anfänger

Registriert seit: 24. Okt 2002
Ort: Hamburg
17 Beiträge
 
Delphi 4 Standard
 
#3
  Alt 25. Okt 2002, 23:34
Hallo Christian,

Danke für die Stichwörter.
Es wäre jedoch nett wenn du da ein Beispiel hättest, da ich
noch so ziemlich am Anfang steh.

Das speichern in eine ini ist kein Problem mehr, (jedenfalls im Moment)

Vielleicht kannste mir ja son Beispiel mal basteln...

Danke
Anfänger
Anfänger aus HH
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#4
  Alt 25. Okt 2002, 23:39
Hallo Anfänger,

wenn Du das z.B. in einem Timer mit 100ms stellst, dann bekommst Du ständig die aktuelle uhrzeit mit Datum.

Label1.Caption := DateTimeToStr(Now);
Statt dem Label könntest Du das auch direkt in die Ini schreiben.

Kannst Du das mit der Ini wirklich? Zeig doch mal ein bisschen Code, wie weit Du schon bist.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Anfänger

Registriert seit: 24. Okt 2002
Ort: Hamburg
17 Beiträge
 
Delphi 4 Standard
 
#5
  Alt 25. Okt 2002, 23:47
Hallo Daniel gerne doch


Code:
procedure TForm1.schreibe_ini;
var IniFile : TIniFile;
begin
     try
        IniFile:=TIniFile.create(ExtractFilePath(Paramstr(0))+'daten.dat');
{Telekom}
        IniFile.WriteString ('Wert(/)','Telekom',Label33.Caption);
        if Edit1.Text <> '' then
        IniFile.WriteString ('Anzahl','Telekom',Label32.Caption);
        if Edit3.Text <> '' then
        IniFile.WriteString ('Kurs-Zeitwert(brutto)','Telekom',Label36.Caption);
        if Edit4.Text <> '' then
        IniFile.WriteString ('Kurs-Zeitwert(netto)','Telekom',Label37.Caption);
        if Edit5.Text <> '' then
        IniFile.WriteString ('TagesWert','Telekom',Edit5.Text);
     finally
       IniFile.Free;
     end;
end;


procedure TForm1.lese_ini;
var IniFile : TIniFile;
begin
     IniUpdate      := true;
     IniFile        := TIniFile.create(ExtractFilePath(Paramstr(0))+'daten.dat');
{Telekom}
     Label32.Caption := IniFile.ReadString('Anzahl','Telekom',Label32.Caption);
     Label36.Caption := IniFile.ReadString('Kurs-Zeitwert(brutto)','Telekom',Label36.Caption);
     Label37.Caption := IniFile.ReadString('Kurs-Zeitwert(netto)','Telekom',Label37.Caption);
     Label33.Caption := IniFile.ReadString('Wert(/)','Telekom',Label33.Caption);
     Edit5.Text     := IniFile.ReadString('TagesWert','Telekom',Edit5.Text);
     IniUpdate      := false;
   IniFile.Free
end;
Das habe ich aus dem Forum und aus Büchern entnommen,
und funzt auch soweit.

Gruß
Anfänger
Anfänger aus HH
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6
  Alt 26. Okt 2002, 00:04
Beim ersten Code sitzt der try-finally-Block falsch und im zweiten Code fehlt er ganz.

Code:
[b]procedure[/b] TForm1.schreibe_ini;
[b]var[/b] IniFile : TIniFile;
[b]begin[/b]
        IniFile:=TIniFile.create(ExtractFilePath(Paramstr(0))+'daten.dat');
     [b]try[/b]
[color=#000080][i]{Telekom}[/i][/color]
        IniFile.WriteString ('Wert(/)','Telekom',Label33.Caption);
        [b]if[/b] Edit1.Text <> '' [b]then[/b]
        IniFile.WriteString ('Anzahl','Telekom',Label32.Caption);
        [b]if[/b] Edit3.Text <> '' [b]then[/b]
        IniFile.WriteString ('Kurs-Zeitwert(brutto)','Telekom',Label36.Caption);
        [b]if[/b] Edit4.Text <> '' [b]then[/b]
        IniFile.WriteString ('Kurs-Zeitwert(netto)','Telekom',Label37.Caption);
        [b]if[/b] Edit5.Text <> '' [b]then[/b]
        IniFile.WriteString ('TagesWert','Telekom',Edit5.Text);
     [b]finally[/b]
       IniFile.Free;
     [b]end[/b];
[b]end[/b];
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#7
  Alt 26. Okt 2002, 00:04
Hi,

egal ob Du liest oder schreibst, verwende immer einen Try..Finally Block. Und schreibe das IniFile.Create vor das Try.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 26. Okt 2002, 00:13
Moin Anfänger,

zu schreibe_ini:

Das try gehört hinter die Create Zeile.

Grund:
Der try/finally Block wird auch Resourcen Schutzblock genannt.
Mit diesem soll verhindert werden, dass belegte Resourcen nicht wieder freigegeben werden.
Da vor dem Create noch keine Resourcen belegt wurden, macht das try dort auch keinen Sinn.

Statt IniFile.Free ist es meist besser (wenn auch nicht notwendig) FreeAndNil(IniFile) zu schreiben. IniFile dient hier nur als Beispiel, es bezieht sich auf jede Freigabe mit Free.

Grund:
FreeAndNil führt intern IniFile.Free gefolgt von IniFile := nil aus. Damit wird zum einen die Resource wieder freigegeben, und zum anderen IniFile auf einen definierten Wert gesetzt. Würde das nicht passieren, würde IniFile auf die alte Adresse zeigen, und man könnte nicht mit Assigned feststellen, ob das Objekt nun noch existiert oder nicht.
Deshalb ist es in diesem Falle auch nicht notwendig, da ja, zumindest zur Zeit, keinerlei Gefahr besteht, dass noch einmal auf IniFile innerhalb der Prozedur zugegriffen wird.
Es schadet aber meiner Ansicht nach nichts sich daran zu gewöhnen. Wenn man nicht gerade eine Delphi Version benutzt, die FreeAndNil noch nicht kennt, so dass man gezwungen ist die := nil Zeile selber zu schreiben, ist es auch nicht sehr viel aufwändiger.

Um sicherzustellen, dass die Daten auch wirklich auf die Platte geschrieben werden, könnte, nachdem der letzte Wert geschrieben wurde, eine Zeile IniFile.UpdateFile nicht schaden.

Grund:
In Windows 95 (eventuell auch 98/ME) werden die Zugriffe auf Ini Dateien gepuffert, also nicht sofort wirklich auf die Platte geschrieben. Durch Update.File lässt sich also die Gefahr eines Datenverlustes verringern.


zu lese_ini:

hier fehlt der try/finally Block.

Was ist eigentlich IniUpdate?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Anfänger

Registriert seit: 24. Okt 2002
Ort: Hamburg
17 Beiträge
 
Delphi 4 Standard
 
#9
  Alt 26. Okt 2002, 00:34
HI Nachtschwärmer,

soviel Info auf mal und das am Abend ...

Die fehlenden Blöcke habe ich eingetragen und umgeschrieben.
Das "IniUpdate" (gestohlen mit den ) hat mir mal ein Bekannter empfohlen, da ich ja mit dem speichern auch gleich die Proceduren
"schreibe_ini" und "lese_ini" durchführe und so die Felder aktuallisiere.
IniUpdate benutze ich schon, steht in "lese_ini".
Bei FreeAndNil(IniFile); kommt folgende Meldung:
[Fehler] Unit1.pas(271): Undefinierter Bezeichner: 'FreeAndNil'

Leider steh ich da noch am Anfang.

In diesem Zusammenhang vielen Dank an die Delphianer in diesem Forum,
für die Unterstützung und auch netten Tips und Tricks.
So macht das programieren auch Spaß
Leider ist das nicht in jedem Forum so...

Gruß
Anfänger (der keiner bleiben will)
Anfänger aus HH
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#10
  Alt 26. Okt 2002, 00:39
Zitat von Anfänger:
soviel Info auf mal und das am Abend ...
Wor müssen unser ganzes Geld in teuere Delphi Raumschiff Versionen reinstecken und können uns deswegen kein Bett leisten. Oder die Frauen sind der Meinung das wir noch Arbeiten sollten.

Zitat:
Leider ist das nicht in jedem Forum so...
Deswegen gibt es uns ja.

Zitat:
Anfänger (der keiner bleiben will)
Dann musst Du ja jedes Jahr Deinen Usernamen ändern...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz