Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Datum + Zeit + Ini


chickenfigt1989 - Mo 15.08.11 22:42
Titel: Datum + Zeit + Ini
Hallo,
Wie kann ich aus einer Ini datei eine Uhrzeit auslesen und der variable Zielzeit zuweisen?

Mit folgenden klappt es leider nicht:


Delphi-Quelltext
1:
Zielzeit:=ini.ReadDate('Daten''Zeiten''');                    


lg


elundril - Mo 15.08.11 22:46

Warum funktionierts denn nicht? Was sagt dir der Compiler denn?

lg elundril


chickenfigt1989 - Mo 15.08.11 22:48

[Error] Unit1.pas(80): Incompatible types: 'TDateTime' and 'String'
Nur wie geht es den richtig?
hab schon soviel getestet


acnut - Mo 15.08.11 23:18

probiers mal mit strtotime(blabla)


FinnO - Mo 15.08.11 23:18

Du hast den defaultwert auch auf '' und nicht auf ein Datum (z.B. now) gesetzt.

Fehlermeldungen lesen hilft.


chickenfigt1989 - Mo 15.08.11 23:24

Wenn ich es so mache kommt eine Acces Violation:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.FormActivate(Sender: TObject);
var
  ini: TIniFile;
       begin
Zielzeit:= Ini.ReadDateTime('Daten''Zeiten', Zielzeit);
end;

end.

Und hier:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.FormActivate(Sender: TObject);
var
  ini: TIniFile;
       begin
Zielzeit:= Ini.ReadDateTime(strtotime('Daten''Zeiten', Zielzeit));
end;

end.

Kommt folgendes:

Delphi-Quelltext
1:
[Error] Unit1.pas(79): Too many actual parameters                    


lg

Nachtrag:

Hier ist der defaultwert nicht auf 0


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:
24:
25:
procedure TForm1.Button1Click(Sender: TObject);
var
  ini: TIniFile;
  filename: String;
begin
  filename := ExtractFilePath(ParamStr(0)) + 'einstellungen.ini';
  ini := TIniFile.Create(filename);


  Zielzeit := now + 1;  

  // INI Datei im Programmverzeichnis anlegen

  try
    
    ini.WriteDateTime('Daten','Zielzeit',Zielzeit);
      finally
      ini.Free;  
  end;


  // Timer Starten. 
  Timer1.Enabled:=true;

end;


jaenicke - Mo 15.08.11 23:56

user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich es so mache kommt eine Acces Violation:
Du hast das ini Objekt nicht erstellt.

user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Kommt folgendes:

Delphi-Quelltext
1:
[Error] Unit1.pas(79): Too many actual parameters                    
StrToTime erwartet nur einen String. Du musst also wie gestern auch StrToTime auf einen aus der Ini ausgelesenen String anwenden.

Den Code hast du doch dort auch schon gehabt:
user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
Zeit:=StrtoTime(ini.ReadString('Zeit','Zeit1',''));                    


Oh mann habs doch geschnallt


chickenfigt1989 - Di 16.08.11 00:08

Danke hat geklappt.

Habe nun folgenden Code:


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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)       
    Button1: TButton;
    Label1: TLabel;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormActivate(Sender: TObject);
      private                        
    Zielzeit: TDateTime;
    { Private declarations }
  public                        
    { Public declarations }
  end;

var            
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  ini: TIniFile;
  filename: String;
begin
  filename := ExtractFilePath(ParamStr(0)) + 'einstellungen.ini';
  ini := TIniFile.Create(filename);


  Zielzeit := now + 1;  
  

  try
   
    ini.WriteDateTime('Daten','Zielzeit',Zielzeit);
      finally
      ini.Free; 
  end;


  
  Timer1.Enabled:=true;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  
  Label1.Caption:= TimeToStr(zielzeit - now); 


  
  if now >= Zielzeit then     
                
  begin
  Showmessage('Klappt');
  Timer1.enabled:=false;
  end;


end;

procedure TForm1.FormActivate(Sender: TObject);
var
  ini: TIniFile;
  filename: String;
begin
  filename := ExtractFilePath(ParamStr(0)) + 'einstellungen.ini';
  ini := TIniFile.Create(filename);

StrtoDateTime(ini.ReadString('Daten','Zielzeit',''));
end;


end.

Wenn ich das Programm starte ---> Button klick ---> Programm beende ---> Programm neu starte wieso wird die restzeit dan nicht im label angezeigt?


bummi - Di 16.08.11 07:51

Schau Dir mal Zeile 81 an un überlege was Du da eigentlich schreiben wolltest....


Horschdware - Di 16.08.11 09:42

Also Sorry, jetzt geht mir hier aber die Hutschnur hoch!! :evil: :evil:
Chickenfight, was du hier machst ist echt unter aller Kanone!

Zur Info: Wir haben uns gestern knapp eine Stunde im ICQ unterhalten, nachdem chicken mich zuvor hier im Forum mehrfach per PN gebeten hatte ihm zu helfen. Die ausführliche Anleitung per PN, wie man das Projekt umsetzt und welche Schlüsselwörter in der Suche zum Erfolg führen (inklusive Beispiele) haben wohl nicht gereicht.
Also eine ganze Stunde Zeit aufgebracht, um per ICQ die letzten Unklarheiten zu beseitigen und sogar ein Bisschen Grundlagenwissen zu vermitteln. Dazu gabs Codebeispiele und Hilfestellung jeglicher Art. Sogar das halbe Projekt haben wir so umgesetzt. Warum? Aus reiner Nächstenliebe, Altruismus, nennt es wie ihr wollt...

Dummerweise wurde NICHTS - und ich wiederhole das: NICHTS - von dem, was ich gesagt hatte sinnvoll umgesetzt. Stets ein Copy&Paste ohne nachzudenken. Eine Variable heisst anders? Egal. Variable ist schon Deklariert? Egal, in der Methode nochmal deklarieren. Vergleiche zweier Variablen? Keine Ahnung wie das geht. Und so weiter und so fort.
Jeglicher Unsinn den man sich eben vorstellen kann.

Grundlagen verstanden: Nein.
Ratschläge und Anleitungen befolgt: Nein.
Buch gekauft: Nein (5 EUR sind zu teuer).
Tutorial gelesen: ja, aber nichts verstanden.

Und jetzt kommt heute morgen (Nacht) hier ein Thread, der die letzten paar Codezeilen, die du dir hättest LOCKER zusammenreimen können (anhand von dem was ich dir geschrieben habe) und bittest darum, dass dir das jemand macht. Noch nicht einmal die Ini sprichst du richtig an, obwohl ich dir das einmal komplett geschrieben habe - mit allem drum und dran.

Und dann kommt noch dazu, dass du hier diesen "Quelltext"(-stummel) postest, meine Kommentare entfernt hast und - da ich mit keinem Wort erwähnt werde - ihn wohl als deinen eigenen ausgibst.

Sag mal, schämst du dich nicht?


Zitat: "Ich lerne eher durch rumprobieren". Nein, tust du nicht. Du lernst nichts.
Wenn man jetzt inzwischen vier(!) Wochen für läppische 30 Zeilen Code benötigt, dann hat das Ganze keinen Sinn. Insbesondere wenn man dazu noch andere Personen miteinbindet und deren Hilfe ignoriert.

Chickenfigt, ich bin gerade so was von sauer, das glaubst du mir nicht! :evil:


PS:
@Rest: TInifiles kennt ein ReadDateTime. Da spart man sich die manuelle Umwandlung. :idea:


noch ein edit:
chicken: hör bitte ENDLICH auf, hier ständig komplette Quelltexte zu posten und zu schreien "geht nicht", bevor du dir keine eigenen Gedanken zum Problem gemacht hast.
Wie die Restzeit ausgegeben wird und dass du beim Programmstart, wenn die Zielzeit geladen wurde den Timer starten musst, das hatten wir gestern AUCH geklärt!


Xion - Di 16.08.11 11:00

TIniFiles sind wirklich einfach zu nutzen.

Ein super Tutorial gibts hier:
http://www.kuknet.de/tutorial1.pdf
Ich glaube es gibt niemanden, der das nicht kapiert...


DonManfred - Di 16.08.11 14:34

user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
Ich glaube es gibt niemanden, der das nicht kapiert...


Sorry das ich das schreiben muss aber wie es scheint hast Du die - sehr stark ausgebildete(!) - Lernrsistenz von chickenfight nicht beachtet. :D

Der Post über deinen sagt eigentlich alles. :-/

Nichts desto trotz bewundere ich (Hut ab davor!) die Mühen die sich hier so manche geben (Horschdware, jaenicke, Du um nur ein paar zu nennen) um Chicken IMMER WIEDER helfen zu "wollen". Auch wenn er es schon dutzenderweise bewiesen hat, das er scheinbar nicht LernFÄHIG ist. Er war, ist und wird wohl auch immer ein C&P-Programmierer bleiben. Schade eigentlich das er die gutmütigkeit der User hier immer wieder aufs neue auf die Probe stellt. :-(


chickenfigt1989 - Di 16.08.11 15:00

@Horschdware


Ich hab keine Kommentare gelöscht und wir haben gar nichts gestern in Icq besprochen.
Ich hab dich per pn gebeten mehr aber nicht

lg


Horschdware - Di 16.08.11 15:04

Entschuldigung, wie bitte?
Soll ich die Logs aus dem ICQ hier posten?

Der Quelltext der oben von dir gepostet wurde, stammt - bis auf ein paar Zeilen - von mir und war mit Kommentaren versehen marke "Hier wird die Ini angesprochen", "Hier werden die Resourcen wieder freigegeben", "Public Bereich des TForm1", etc.

Ich hoffe mal, du willst jetzt hier nicht im Ernst behaupten, ich hätte mir den gestrigen Abend nur ausgedacht. :!:


chickenfigt1989 - Di 16.08.11 15:06

Ich will hier keinen Beschuldigen ect.
jedoch lass ich mir nicht unterstellen ich sei Dumm und so.

Ich habe seit gut 6 Monaten kein Icq Account mehr.

lg


Horschdware - Di 16.08.11 15:10

Du hast mich hier im Forum per PN gebeten, dass wir uns im ICQ treffen, hast mir deine ICQ Nummer gegeben.
Zitat:

Von: chickenfigt1989
Verfasst: Mo 15.08.11 17:36
Titel: Re: Mal eine Frage Zitat
Hab dich eh schonmal geaddet musst mich nur noch hinzufügen.

396547XXX

lg

Meine Freundin saß gestern Abend neben mir und hat sich darüber lustig gemacht, was wir da treiben.
Ich sehe sogar in oben gepostetem Code die Stellen, an denen meine Kommentare waren - da ist jetzt viel leerer Raum entstanden.

Ich lasse mich doch hier nicht von dir veralbern!


edit: sogar die verhackte Einrückung von gestern Abend ist so geblieben!


chickenfigt1989 - Di 16.08.11 15:12

Ja wie bereits gesagt hab ich schon lange kein ICQ mehr.
Naja kann auch irgendnen text schreiben und behaupten denn hast du mir per pn geschrieben


Horschdware - Di 16.08.11 15:14

Ok, ich denke hier reicht das langsam. Das hat jetzt langsam Kindergarten Niveau erreicht.

Ich melde dich jetzt bei einem Moderator und bitte im gleichen Zug darum, diesen Thread zu schliessen.


chickenfigt1989 - Di 16.08.11 15:28

Ja meld mich weist du ich lass mir nichts unterstellen.
Nur weil du meinst das sei dein code.
Nein das ist mein Code denn ich per Copy & Paste zuammengeschustert hab


Horschdware - Di 16.08.11 15:34

user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:

Nein das ist mein Code denn ich per Copy & Paste zuammengeschustert hab


Das ist doch glatt gelogen. Die Konstruktion oben mit try..finally kennst du doch selbst gar nicht. Sieht man ja an dem zweiten Mal als du auf ne Ini zugreifen willst.
Darüber hinaus: Du hast mir heute Nacht noch deinen aktuellen Stand per PN zugeschickt. Da sind sogar noch Kommentare von mir UND dir drin!

Siehe:
Von: chickenfigt1989
Verfasst: Di 16.08.11 00:03
Titel: Re: Mal eine Frage
user profile iconchickenfigt1989 hat folgendes geschrieben:
So sieht es jetzt aus:

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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)        /// TForm1 !!
    Button1: TButton;
    Label1: TLabel;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormActivate(Sender: TObject);
      private                         // <---- private
    Zielzeit: TDateTime;
    { Private declarations }
  public                         // <------ public
    { Public declarations }
  end;

var             /// <---- Globale Variablen!
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  ini: TIniFile;
  filename: String;
begin
  filename := ExtractFilePath(ParamStr(0)) + 'einstellungen.ini';
  ini := TIniFile.Create(filename);
//     /ermittele HIER die zielzeit/!

  Zielzeit := now + 1;  // Aktueller Zeitstempel + 24 Stunden

  // INI Datei im Programmverzeichnis anlegen

  try
    // Versuche Zielzeit zu speichern
    ini.WriteDateTime('Daten','Zielzeit',Zielzeit);
      finally
      ini.Free;  // Resourcen freigeebn
  end;


  // Timer Starten. Bitte du
  Timer1.Enabled:=true;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Ausgabe der Restzeit in Label.- Du bitte
  Label1.Caption:= TimeToStr(zielzeit - now); //     Richtig so?


  // Vergleiche aktuelle Zeit mit Zielzeit. Wenn größer/gleich, dann reagieren
  if now >= Zielzeit then     // Anfängerfehler. Seite 1 im Buch. Semikolon falsch
                // Du sollst auf Größer/Gleich vergleichen. Was amchst du? Das Gegenteil
  begin
  Showmessage('Klappt');
  Timer1.enabled:=false;
  end;


end;

procedure TForm1.FormActivate(Sender: TObject);
var
  ini: TIniFile;
  filename: String;
begin
  filename := ExtractFilePath(ParamStr(0)) + 'einstellungen.ini';
  ini := TIniFile.Create(filename);

StrtoDateTime(ini.ReadString('Daten','Zielzeit',''));
end;


end.

Allerdings wenn ich das Programm starte wird die restzeit nicht in label angezeigt.
...


Ich lasse mich genauso wenig als Lügner darstellen. Glaub mir das!
Ich kann nur - im Gegensatz zu dir - meine Version belegen.

Normalerweise wäre so etwas wie eine Entschuldigung von deiner Seite aus her angebracht. Aber du reitest dich gerade nur noch mehr rein. Traurig, wirklich!


Tintenblut - Di 16.08.11 15:42

user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Nein das ist mein Code denn ich per Copy & Paste zuammengeschustert hab


@user profile iconHorschdware Er hat doch ausdrücklich gesagt, dass er sich den Code per Copy & Paste zusammengeschustert hat.
Wahrscheinlich den gesamten Quellcode? Und die Kommentare musste er rausnehmen, weil das sonst aufgeflogen wäre -> zu wenig Rechtschreibfehler


chickenfigt1989 - Di 16.08.11 15:43

Tintenblut geh stinken

Horschdware

Aha ja kann auch irgendwas schrieben und sagen ähm hast du mir per pn gesschriebn


ZeitGeist87 - Di 16.08.11 15:45

Zeile 81 schickst du ins Nirwana..

Tipp: :=


chickenfigt1989 - Di 16.08.11 15:47

wenn ich nun Zielzeit:= mach hört der Timer aber nicht mehr auf.

lg


Martok - Di 16.08.11 15:52

Wie von mehreren angefragt, ist hier Feierabend.

Vom TE ist keinerlei Eigeninitiative erkennbar, der Umgangston ist unter aller Kanone, und die aktuellen Aktionen in der SB sprechen ja wohl für sich.


Wir werden das im Team prüfen und angemessene Maßnahmen ergreifen.