Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Zwei Datum- und Zeitwerte vergleichen
derKopf - Di 06.12.05 21:45
Titel: Zwei Datum- und Zeitwerte vergleichen
Hi,
ich bin neu hier und habe ein Problem: Ich muss für die Schule als Projekt ein MP3 Wecker machen, soweit läuft auch fast alles, nur 1 bis 2 "kleine" Mängel hat das Dingen noch, und zwar:
Ich habe 2 Labels in einem wird die Uhrzeit angezeigt im anderen das Datum, darunter hab ich 2 Editfelder, wo ich jeweils die Weckzeit bzw. das Weckdatum einstelle. Dann mit druck auf den Button wird die Zeit und das Datum verglichen und dementsprechend Gültig oder Ungültig als Message ausgegeben....aber jetzt soll noch folgendes passieren:
Wenn die Zeit und das Datum gleich ist, soll eine zweite Form öffnen, in der direkt das Lied abspielt, das ich in Form 1 in einem Opendialog geöffnet habe. Dabei habe ich ein paar Probleme:
Meine Befehl im Timer für den Vergleich;
Delphi-Quelltext
1: 2: 3:
| If (ATime=Time) and (ADate=Date) then Form2.ShowModal; |
müsste ja eigentlich stimmen, aber die Form2 wird einfach nicht geöffnet. Aber genau der gleiche Befehl funktioniert in der Button Procedure! Nur hier nicht, warum? Achja
ATime : TDateTime und
Label7.Caption:= Timetostr(Time)... das gleiche natürlich auch fürs Datum.
Mein anderes Problem ist das Direkte öffnen des Liedes in Form2, ich kriegs von der Logik einfach nicht gebacken das sich das automatisch mit Form2 öffnet....ich muss immer erst auf nen Label klicken oder mir wird ne Fehlermeldung, von wegen Dateinamensende nicht gefunden oder so angezeigt....
Ziemlich verwirrend das Ganze, hoffe es kann jemand was verstehen und dementsprechend helfen :shock: 8) :D
Moderiert von
Tino: Delphi-Tags hinzugefügt.
Moderiert von
Tino: Titel geändert.Moderiert von
Tino: Topic aus Multimedia / Spiele / Grafik verschoben am Mi 07.12.2005 um 16:17
DarkLord05 - Di 06.12.05 21:55
:welcome: hier...
zu deinem Problem:
Mach die Überprüfung mit nem Timer (den so auf 750 ms stellen).
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| ... Uhrzeit, Datum : String; ... Uhrzeit = ZeitEdit.Text; Datum = DatumEdit.Text; ... Timer.Enable := True; ... UhrzeitX = TimeToStr (Time); DatumX = DateToStr (Date); IF UhrzeitX = Uhrzeit then if DatumX = Datum then begin end; |
derKopf hat folgendes geschrieben: |
Form2.ShowModal;
müsste ja eigentlich stimmen, aber die Form2 wird einfach nicht geöffnet. Aber genau der gleiche Befehl funktioniert in der Button Procedure! Nur hier nicht, warum? |
Da müsstest du mal zeigen was du da hast, sonst kann man nicht helfen.
//EDIT:
Bin zwar kein Admin, aber wenn du den Titel deines Beitrags änderst, dann gucken sich das bestimmt mehr an, da sie sofort wissen worum es geht. Dafür einfach auf den

klicken.
derKopf - Di 06.12.05 22:14
Danke für deine Antwort, aber das funktioniert nicht so ganz, also den vergleich hab ich genauso geschrieben wie du, tut sich aber nix, das liegt aber daran das mein timer dauerhaft enebled ist...weil er ja noch datum und uhrzeit in den labels anzeigen muss....hehe man ist das verworren ;-)
derKopf - Di 06.12.05 22:41
Hier mal die Button und Timer Procedure von Form1.....
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:
| procedure TForm1.Timer1Timer(Sender: TObject);
var ATime: TDateTime; ADate: TDateTime; begin Label7.Caption:= Timetostr(Time); Label9.Caption:= Datetostr(Date);
if (ATime = Time) then if (ADate = Date) then begin Form2.ShowModal end; end;
procedure TForm1.Button1Click(Sender: TObject); var ATime: TDateTime; ADate: TDateTime;
begin ATime := StrToTime(Edit1.Text); ADate := StrToDate(Edit2.Text); if ATime > Time then if ADate >= Date then ShowMessage('Wecker eingestellt') else ShowMessage('Ungültige Zeit/Datum'); end; |
Moderiert von
raziel: Delphi-Tags hinzugefügt.
alzaimar - Mi 07.12.05 17:00
Die Bedingung
Delphi-Quelltext
1:
| If (aTime=Time) and (aDate=Date) |
ist nun mal nicht erfüllt, denn dann müsste der Timer just genau in der Sekunde aufgerufen werden... manchmal klappt das und manchmal eben nicht...
Wann soll den die Form aufgerufen werden?
Wenn z.B. die Weckzeit überschritten wurde(!), dann aber nur 1x.
Deine Programmlogik ist einfach falsch...
P_G - Mi 07.12.05 17:07
Hi,
1. In welcher Weise gibst du Datum und Uhrzeit in die Editfenster ein?
Dummes Beispiel: '17 Uhr' wird sicher nie zu einem positiven Vergleich mit TDateTime führen. D.h. der eingegebene String muß der TDateTime Konvention entsprechen.
2. Woran koppelst du den Start der mp3-Datei? Wenn du es an OnActivate von Form2 setzt, sollte es eigentlich gehen...
Gruß, P_G
Tino - Mi 07.12.05 17:15
Titel: Re: Logikproblem
Hallo!
derKopf hat folgendes geschrieben: |
Mein anderes Problem ist das Direkte öffnen des Liedes in Form2, ich kriegs von der Logik einfach nicht gebacken das sich das automatisch mit Form2 öffnet....ich muss immer erst auf nen Label klicken oder mir wird ne Fehlermeldung, von wegen Dateinamensende nicht gefunden oder so angezeigt.... |
Bitte erstelle für jede Frage ein eigenes Topic in der richtigen Sparten! Danke!
Gruß
Tino
smiegel - Do 08.12.05 10:30
Hallo,
Dein Problem besteht darin, dass Du die Zeitwerte so einfach nicht vergleichen kannst, weil dort Millisekunden enthalten sind. Ich kann mir nur schwer vorstellen, dass ein Timer auf die Millisekunde genau aufgerufen wird.
Um das Problem zu umgehen, musst Du den Zeitwert vorher umwandeln, um die Millisekunden weg zu bekommen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var std1, min1, min1, ms1, std2, min2, sek2, ms2 :Word; ... ... DecodeTime(Time, std1, min1, sek1, ms1); DecodeTime(aTime, std2, min2, sek2, ms2); if (Date=aDate) and ((sdt1=std2) and (min1=min2) and (sek1=sek2)) then Form2.ShowModal; ... ... |
derKopf - Do 08.12.05 16:02
Hi,
danke für die ganzen Antworten und Hilfestellungen, aber es kommt immer wieder die selbe Fehlermeldung. Hab das gefühl der Mediaplayer kann Mp3´s nicht von alleine abspielen bzw. durch ein Event oder sonstiges starten...Im anhang ist die Fehlermeldung, die erscheint, wenn ich den MP in jeglicher Art automatisch starten lasse...hoffe jemand weiss weiter.
@smiegel
Dein Vergleich funktioniert aber leider auch nicht... :(
Tino - Do 08.12.05 17:01
@derKopf: In diesem Topic bitte nur das Problem "Zwei Datum- und Zeitwerte vergleichen" diskutuieren. Alles andere gehört in einem neuen Topic!
derKopf - Do 08.12.05 22:19
Zitat: |
@derKopf: In diesem Topic bitte nur das Problem "Zwei Datum- und Zeitwerte vergleichen" diskutuieren. Alles andere gehört in einem neuen Topic! |
Ok werde mich dran halten! Aber dann direkt zurück zu dem Problem; schmiegel dein Versuch mit dem vergleich funktioniert leider auch nicht. Hat noch jemand anders eine idee?
Blackheart666 - Do 08.12.05 22:30
Es gäbe noch eine Möglichkeit, Du vergleichst die Zeit <> als dann ist das ohne weiteres zu machen.
Und bei einenem Wecker kommt es auf ne' sec bestimmt nicht an.
derKopf - Fr 09.12.05 10:08
Meinst du anstatt des Gleichheitszeichens, "< >" oder was? Kannst mir mal nen Beispiel geben? hab das so versucht aber er macht trotzdem wieder nichts...
Miri - Fr 09.12.05 10:35
Setz mal
Delphi-Quelltext
1:
| if aktuelle zeit > Weckzeit |
Damit läuft dein Timer und sobald das Intervall ausgelöst wird und die Weckzeit überschritten ist (was bei einem entsprechenden Intervall keine große Verzögerung sein dürfte), wird der Wecker gestartet... Damit musst du nicht auf ne Millisekunde genau die Weckzeit treffen...
Blackheart666 - Fr 09.12.05 10:44
In Etwa So...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Timer1Timer(Sender: TObject); begin if FormatDateTime('hh:mm:ss',Time)>'09:40:00' then Caption:='Es ist 9:40 Uhr'; if FormatDateTime('hh:mm:ss',Time)>'09:41:00' then Caption:='Es ist 9:41 Uhr'; end; |
mehmeh - Fr 09.12.05 10:49
das heißt aber das wenn der wecker ca 7 Uhr angehen soll und du den PC erst 8 Uhr einsachltest, das der wecker trotzdem angeht, weil 8 Uhr größer als 7 ist
Blackheart666 - Fr 09.12.05 10:59
Sollte ja nur ein Bsp.sein das kann Er doch überprüfen ist Systemzeit > als Weckzeit + 1 min bleib ruhig.
mehmeh - Fr 09.12.05 12:05
wie machst du es denn nu
Miri - Fr 09.12.05 12:23
mehmeh hat folgendes geschrieben: |
das heißt aber das wenn der wecker ca 7 Uhr angehen soll und du den PC erst 8 Uhr einsachltest, das der wecker trotzdem angeht, weil 8 Uhr größer als 7 ist |
Man kann ja auch ein Intervall eingeben sprich aktuelle zeit > weckzeit und aktuelle zeit < weckzeit + ne minute
Es ging doch nur ums Prinzip... und außerdem... wenn ich mir nen Wecker stelle, sorge ich auch dafür, dass Batterien drin sind, sonst weckt der mich nämlich auch nich... (sprich, wenn man sich nen Wecker stellt, sollte man auch dafür sorgen, dass er zu der entsprechenden Zeit funktionstüchtig ist ;) )
derKopf - Fr 09.12.05 16:50
Hi, sorry Leute das ich nicht so schnell antworte, aber hatte nur die ersten beiden Stunden Informatik, danach normal Schule.....naja aber anscheinend bin ich zu doof, es will immer noch nicht funktionieren, hier mein Quelltext:
//Uhrzeit und Datum anzeigen****************************************************
procedure TForm1.Timer1Timer(Sender: TObject);
var
ATime: TDateTime;
ADate: TDateTime;
begin
Label7.Caption:= Timetostr(Time);
Label9.Caption:= Datetostr(Date);
//Wenn Zeit erreicht
if (ATime > Time) and
(ADate = Date) then
begin
Form2.ShowModal
end;
end;
//Weckzeit und Datum************************************************************
procedure TForm1.Button1Click(Sender: TObject);
var
ATime: TDateTime;
ADate: TDateTime;
begin
ATime := StrToTime(Edit1.Text);
ADate := StrToDate(Edit2.Text);
if (ATime > Time) and
(ADate >= Date) then
ShowMessage('Wecker eingestellt')
else
ShowMessage('Ungültige Zeit/Datum');
end;
Blackheart666 - Fr 09.12.05 17:28
Ich hab jezt mal angenommen die Form2 soll angezeigt werden wenn die zeit erreicht ist...
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:
| var Form1: TForm1; ADate,ATime: TDateTime; implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Caption:= Timetostr(Time); Label2.Caption:= Datetostr(Date); ATime := StrToTime(Edit1.Text); ADate := StrToDate(Edit2.Text); if (Time >ATime) and (Date =ADate) then begin Timer1.Enabled:=False; Form2.Show; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin ATime := StrToTime(Edit1.Text); ADate := StrToDate(Edit2.Text); if (ATime > Time) and (ADate >= Date) then ShowMessage('Wecker eingestellt') else ShowMessage('Ungültige Zeit/Datum'); end;
end. |
Blackheart666 - So 11.12.05 00:24
Immer noch zu Hoch ? ... dann lass es einfach ...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!