Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Timer: speichern in ini und auslesen... (https://www.delphipraxis.net/1156-timer-speichern-ini-und-auslesen.html)

Christian Seehase 25. Okt 2002 23:42

Moin Anfänger,

und hier das Beispiel.
Da bleibt vermutlich noch ein wenig zum Überdenken ;-)

Es ist die Komplett Unit, ich hab' nur ein Formular mit einem Edit versehen:

Code:
[b]unit[/b] MAIN;

[b]interface[/b]

[b]uses[/b]
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,IniFiles,
  ComCtrls, StdCtrls;

[b]type[/b]
  TForm1 = [b]class[/b](TForm)
    Edit1: TEdit;
    [b]procedure[/b] FormCreate(Sender: TObject);
    [b]procedure[/b] FormDestroy(Sender: TObject);
  [b]private[/b]
    [color=#000080]{ Private-Deklarationen }[/color]
    FIniFile : TIniFile;
  [b]public[/b]
    [color=#000080]{ Public-Deklarationen }[/color]
  [b]end[/b];

[b]var[/b]
  Form1: TForm1;

[b]resourcestring[/b]
  _rsLastAccess = 'LetzterZugriff';
  _rsDate      = 'Datum';
  _rsTime      = 'Zeit';

[b]const[/b]
  _asDays : [b]array[/b] [1..7] [b]of[/b] [b]string[/b] = ('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');

[b]implementation[/b]

[color=#000080]{$R *.DFM}[/color]

[b]procedure[/b] TForm1.FormCreate(Sender: TObject);

[b]var[/b]
  sWork : [b]string[/b];

[b]begin[/b]
  [color=#000080]// Da die Resourcen im OnDestroy Event wieder freigegeben werden[/color]
  [color=#000080]// entfällt der try/finally Block hier.[/color]
  [color=#000080]// In finally würde eh' nichts stehen[/color]
  FIniFile  := TIniFile.Create(ExtractFilePath(paramstr(0))+'Zeiten.ini');
  sWork     := FIniFile.ReadString(_rsLastAccess,_rsDate,DateToStr(Now));
  [color=#000080]// Mal etwas kompakter zusammengeschrieben[/color]
  Edit1.Text := Format('Sie haben am %s dem %s um %s ...',[_asDays[DayOfWeek(StrToDate(sWork))],sWork,FIniFile.ReadString(_rsLastAccess,_rsTime,TimeToStr(now))]);
[b]end[/b];

[b]procedure[/b] TForm1.FormDestroy(Sender: TObject);
[b]begin[/b]
  [color=#000080]// Falls Create schon fehlgeschlagen ist gibt's auch nichts[/color]
  [color=#000080]// zu schreiben oder freizugeben[/color]
  [b]if[/b] Assigned(FIniFile) [b]then[/b]
  [b]begin[/b]
    FIniFile.WriteString(_rsLastAccess,_rsDate,DateToStr(Now));
    FIniFile.WriteString(_rsLastAccess,_rsTime,TimeToStr(Now));
    FIniFile.UpdateFile;
    FreeAndNil(FIniFile);
  [b]end[/b];
[b]end[/b];

[b]end[/b].
Zitat:

Anfänger (der keiner bleiben will)
War jeder auf jedem Gebiet mal auf dem er (oder sie) es nicht mehr ist, und kann es auf anderen Gebieten jederzeit werden ;-)

Mir ist niemand bekannt, der, z.B. Delphi, mit den Genen geliefert bekommen hat. :mrgreen:

Anfänger 25. Okt 2002 23:59

Ach du dickes Ei

das kann wohl etwas länger dauern.

Vielen Dank... :hello:

und zu
Zitat:

Deswegen gibt es uns ja. :mrgreen: :dancer:
Welch ein GLÜCK... :mrgreen:

und
Zitat:

Dann musst Du ja jedes Jahr Deinen Usernamen ändern... :chat:
wenn das so einfach wäre, dann hät Hamburg schon sein eignen Bill Gates :chat:

Gruß und Dank
Anfänger

Christian Seehase 26. Okt 2002 00:06

Moin Anfänger,

noch ein kleiner Nachtrag zu FreeAndNil.

Weiter oben hatte ich dazu schon was geschrieben.

Gibt's erst ab D5 (wie ich Deinem Posting entnehme), und lässt sich durch

IniFile.Free;
IniFile := nil;

ersetzten.

Anfänger 26. Okt 2002 00:31

Hi Christian,

ich habe es soweit hinbekommen (in einem neuen Testprogramm), aber was muß ich eintragen das auch der Wochetag in der ini steht.
Zur Zeit sieht es so aus.

ist:
[LetzterZugriff]
Datum=26.10.2002
Zeit=01:26:50

soll:
[LetzterZugriff]
Datum=26.10.2002
Zeit=01:26:50
Tag=Sonnabend

Und warum geht das nicht im Progrmm? :?:

Ich habe die Einträge die ich brauch 1:1 übernommen.
Aber trotzdem diese Fehlermeldung:

[Fehler] Unit1.pas(634): Inkompatible Typen
[Fehler] Unit1.pas(636): Record, Objekt oder Klassentyp erforderlich
[Fehler] Unit1.pas(637): Record, Objekt oder Klassentyp erforderlich
[Fehler] Unit1.pas(638): Record, Objekt oder Klassentyp erforderlich
[Fehler] Unit1.pas(639): Record, Objekt oder Klassentyp erforderlich
[Fehler] Unit1.pas(640): Inkompatible Typen: 'String' und 'Pointer'
Code:
procedure TForm1.FormDestroy(Sender: TObject);
begin
     if Assigned(IniFile) then
       begin
         IniFile.WriteString(_rsLastAccess,_rsDate,DateToStr(Now));
         IniFile.WriteString(_rsLastAccess,_rsTime,TimeToStr(Now));
         IniFile.UpdateFile;
         IniFile.Free;
         IniFile := nil;
       end;
end;
Woran kann das liegen, in der Hilfe steht leider nicht das drin was ich suche... :oops:

Vieleicht kannst du mir ja noch ein Tip oder Rat geben.
Ich habe echt keine :idea: mehr.
Zumal das im Testprogramm geht. :?:

Danke und Gruß
Anfänger

Christian Seehase 26. Okt 2002 11:13

Moin Anfänger,

also den Wochentag schreibe ich nicht mit raus, weil sich der über das Datum berechnen lässt.

Was die Fehlermeldungen angeht:
Bist Du sicher, dass IniFile vom Typ TIniFile ist?
So wie ich das sehe ist das ein String, zumindest deutet die letzte Fehlermeldung darauf hin (Zeile 640).

Wäre IniFile vom Typ TIniFile, wäre es ein Pointer, und somit wäre die Zuweisung richtig.

In meinem Beispiel hatte ich es ja als private Feld FIniFile deklariert.
(der Präfix F für Felder ist natürlich nicht zwingend, aber üblich)

Anfänger 26. Okt 2002 13:19

Hallo Christian,

du hast Recht, bei mir wird die ini als string deklariert.
So sieht mein Bereich aus.
Frage bitte nicht nach Einzelheiten was für was steht, da ich die Sachen sozusagen zusammenkopiert und aus Foren mitgenommen habe. :freak:

public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
IniFile : string;
IniUpDate: Boolean;

resourcestring
_rsLastAccess = 'LetzterZugriff';
_rsDate = 'Datum';
_rsTime = 'Zeit';

const
_asDays : array [1..7] of string = ('Sonntag','Montag','Dienstag','Mittwoch','Donners tag','Freitag','Samstag');


implementation
uses unit2;
{$R *.DFM}

Wenn ich jetzt aus dem Typ string ein TIniFile mache,
bekomme ich keine Fehlermeldung, aber ich die ini nicht mehr lesen und
auch nicht mehr reinschreiben :?:
Vielleicht kannst du mir da noch mal helfen.
Gehört vielleicht zu den Grundlagen die mir noch fehlen, aber Literatur ist bestellt und unterwegs. :wink:

Vielen Dank
Anfänger

Daniel B 26. Okt 2002 13:39

Zitat:

Zitat von Anfänger
Gehört vielleicht zu den Grundlagen die mir noch fehlen, aber Literatur ist bestellt und unterwegs.

Hallo Anfänger,

die beste Literatur ist immer noch die OH.
Diese ganzen Schinken für Delphi 6(Kochbuch, Grundlagen und Profiwissen, Nachschlagen und Verstehen, Delphi 6), sind nciht so das ware. Lerne lieber mit der OH zu arbeiten. Solange Du ncihts mit DB machst, langt die OH vollkommen. Und Foren gibt es ja auch noch. Spare Dir lieber das Geld.

Grüsse, DAniel :hi:

Christian Seehase 26. Okt 2002 13:52

Moin Anfänger,

schau Dir doch noch einmal an, wo ich in dem Beispiel Code das IniFile (TIniFile) deklariert habe.

Wenn Du das so übernimmst wird's auch funktionieren.

Wichtig:
Diese INI hat nichts mit Deiner Daten.dat zu tun.

Wie Du es gemacht hast, mit dem ständigen öffnen und schliessen der INI kann man es natürlich auch machen.
Mein Beispiel daran anzupassen ist auch nicht so schwierig, und dann kannst Du auch die Daten.dat dafür verwenden.

Versuch das einfach mal.

Was auch ganz hilfreich sein kann:
Im Einzelschritt durch das Programm gehen (F7/F8 ) und sich mal im ansehen, was denn so in welchen Variablen steht, um festzustellen, welche Funktion welche Auswirkungen hat.

Wie Du ja selber schon gemerkt hast:
Copy&Paste ist ja schön und gut, wenn's denn funktioniert, nutzt aber nichts für das Verständnis wie's funktioniert ;-)

Aber das Verständnis wird auch noch kommen.
Erst langsam, dann schneller.
Das schwierigste ist ja immer der Einstieg in neue Bereiche.

Anfänger 26. Okt 2002 14:25

Hallo,

ich finde OH nicht so gut, liegt vielleicht auch am fehlenden Grundwissen.
Naja ich hoffe das ich mit den Buch was anfangen kann.
Am besten wäre ein Buch mit Beispielen und nicht so wie die OH.
Die setzt finde ich sc´hon mehr Grundwissen vorraus.

Von der F7/F8 habe ich schon gehört und gesehen, aber wenn ich damit durch Programm gehe, sehe ich zwar was gerade gemacht wird, aber was genau dahinter steckt ist für mich ein GROßES :?: .

Aber es gibt ja auch noch das Forum hier und das ist gut so. :hello:

Gruß
Anfänger

Daniel B 26. Okt 2002 14:40

Zitat:

Zitat von Anfänger
ich finde OH nicht so gut, liegt vielleicht auch am fehlenden Grundwissen.

Naja, mit ein bisschen überlegen, könnte mans ich das was man haben möchte auf Englisch übersetzen und damit in der OH suchen. Die OH ist im Vergleich zu diesen ganezn Büchern richtig und die Beispiele immer sinnvoll und nciht mit umständlichen Code beschrieben.

Zitat:

Von der F7/F8 habe ich schon gehört und gesehen, aber wenn ich damit durch Programm gehe, sehe ich zwar was gerade gemacht wird, aber was genau dahinter steckt ist für mich ein GROßES :?: .
Dieses Zeilenweise durchgehen nennt man Debuggen. Sinnvoll wenn man z.B. Variablen hat.
Zum Bleistift eine for Schleife. Du gehst also mit F7 oder F8 die Schleife immer wieder durch. Wenn Du nun den Cursor über dem i hälst, nicht klickst, dann kannst Du sehen, welchen Wert i gerade hat. Das lässt sich auf vielen sachen anwenden.
Im Editor ist doch links so ein grauer Balken, wenn Du nun vor eine Zeile mit der Maus auf diesen Balken klickst, dann wird ein Breakpoint gesetzt. Ist so ein roter Punkt. Wenn Du nun das Programm mit F7/F8 startest, dann wird Dein Programm an diesem Punkt hängen bleiben. Je nach Code ist zu dem Zeitpunkt noch nciht einmal ein Formular zu sehen. Jetzt kannst DU mit F7 oder F8 immer Zeile- oder Prozedurenweise Schritt für Schritt was abarbeiten lassen, da kann man nun die Maus über Variablen o.ä. drüber halten und sehen was sie gerade für einen Wert haben.

Grüsse, Daniel :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 Uhr.
Seite 2 von 3     12 3      

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