Entwickler-Ecke

Sonstiges (Delphi) - Ist Zeitpunkt abgelaufen ?


Tarry - Do 07.02.08 18:34
Titel: Ist Zeitpunkt abgelaufen ?
Hi,
entweder steh ich auf dem Schlauch oder mein Delphi spinnt... (ich vermute mal ersteres ;))

Folgender Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Zeit := Now;
for i := 0 to lbxDatum.Count-1
do begin
    if (Zeit >= StrToDate(lbxDatum.Items[i])) and (Zeit >= StrToTime(lbxZeit.Items[i]))
    then begin
          // Wecken
         end;
   end;


Sollte eigentlich erkennen wann der Weckzeitpunkt abgelaufen ist und dann die entsprechende Prozedure ausführen, allerdings
führt er diese einfach immer aus egal ob der Zeitpunkt schon vorbei ist oder nicht... :(

Könnt ihr mir helfen?

Gruß
Tarry


Hexenkönig - Do 07.02.08 18:41

könnte es sein, dass die Funktion strtodate und now verschiedene Formate zurückgeben?
Wie zum Beispiel T/M/J und M/T/J und es daraufhin zu fehlinterpretationen kommt?


Yogu - Do 07.02.08 18:46

Now ist vom Typ DateTime. Du kannst Now nicht einzeln mit Date und Time vergleichen.


Delphi-Quelltext
1:
2:
3:
4:
5:
for i := 0 to lbxDatum.Count-1 do
  if Now >= (StrToDate(lbxDatum.Items[i]) + StrToTime(lbxZeit.Items[i])) then
  begin
    // Wecken
  end;

Außerdem empfehle ich dir eine bessere Codeformatierung, das hat schon manchen Fehler sichtbar gemacht ;)


Tarry - Do 07.02.08 18:48

user profile iconHexenkönig hat folgendes geschrieben:
könnte es sein, dass die Funktion strtodate und now verschiedene Formate zurückgeben?
Wie zum Beispiel T/M/J und M/T/J und es daraufhin zu fehlinterpretationen kommt?

Ne, das Problem liegt bei der Zeit, da stimmt das Format aber, hab's überprüft....


Yogu - Do 07.02.08 18:54

Hast du meinen Post gesehen? So wie du es geschrieben hast, kann es gar nicht klappen. Eine Zeitangabe ist immer am 1. 1. 1970, das kannst du so gar nicht mit einem wirklichen Datum vergleichen. Du musst noch das Datum dazuaddieren.


Tarry - Do 07.02.08 18:54

user profile iconYogu hat folgendes geschrieben:
Außerdem empfehle ich dir eine bessere Codeformatierung, das hat schon manchen Fehler sichtbar gemacht ;)

DANKE, das klingt gut, ich werd's gleich mal testen ;)

Gruß
Tarry

EDIT: Die Formatierung ist so, wie ich's in der Schule gelernt habe...

Moderiert von user profile iconNarses: Zitat gekürzt


GTA-Place - Do 07.02.08 19:20

Dann zeig deinem Lehrer wie man richtig formatiert ;-)


Yogu - Do 07.02.08 19:24

user profile iconTarry hat folgendes geschrieben:
Die Formatierung ist so, wie ich's in der Schule gelernt habe...

user profile iconGTA-Place hat folgendes geschrieben:
Dann zeig deinem Lehrer wie man richtig formatiert

Das solltest du wirklich tun. Es ist immer gut, wenn du die gleiche Syntax hast, wie sie auch Delphi nimmt. Das ist einfach nur besser, wenn du einen Fehler suchst. Beispielsweise fehlen öfters einfach nur end;s. Solche kleinen Fehlerchen kriegst dur raus, wenn du den Code gut formatierst.


Tarry - Do 07.02.08 19:30

user profile iconYogu hat folgendes geschrieben:
Beispielsweise fehlen öfters einfach nur end;s. Solche kleinen Fehlerchen kriegst dur raus, wenn du den Code gut formatierst.

Ob nen end; fehlt sehe ich doch auch bei:


Delphi-Quelltext
1:
2:
3:
4:
if true
then begin
      tuwas;
      tuwas;


Wie ist denn die richtige Formatierung ?


Gruß
Tarry

Moderiert von user profile iconNarses: Zitat gekürzt


Yogu - Do 07.02.08 19:40

Jetzt werden wir aber arg OffTopic :wink:

Die richtige Formatierung ist die, die Borland für Delphi gewählt hat. Du siehst sie schon bei der einfachen Unit eines Formulars - und noch mehr, wenn du den Quelltext eines Formulars anzeigst, oder eine Event-Prozedur erstellst. Wenn du Zugriff auf die Delphi-Units hast, dann siehst du da auch, wie die formatiert sind.

Bei deiner Formatierung kommt man schnell mal zum rechten Rand, weil du mit so vielen Leerzeichen einrückst.

Hier mal ein Beispiel:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure Prozeder(Parameter1: Stringvar Parameter2: Integer);
var i: Integer;
begin
  Parameter2 := 0;
  for i := 1 to Length(Parameter1) do
  begin
    case Parameter[i] of
      #13: inc(Parameter2);
      '-': dec(Parameter2);
    end;
  end;
end;


Tarry - Do 07.02.08 20:00

Danke, werds mir für meine zukünftigen Projekte merken, glaub aber nicht, dass ich den Wecker, den ich grade programiere noch umschreibe... ;)

Gruß & Danke
Tarry

EDIT: Wie mache ich das denn bei if, then else ?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if true then
begin
  TuWas;
  TuWas;
end;
else
begin
  TuWas;
  TuWas;
end;


Das sieht doch irgendwie beschei...den aus.... ;)

Moderiert von user profile iconNarses: Zitat entfernt


Yogu - Do 07.02.08 20:35

Ich hab dir mal per PN geschrieben. Und nun schleunigst Back To Topic! :mahn: