Autor |
Beitrag |
derKopf
Hält's aus hier
Beiträge: 15
|
Verfasst: Di 06.12.05 21:45
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
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
      
Beiträge: 449
WinXP Pro SP2
Opera; Delphi 3 Pro; Delphi 2005, Turbo Delphi, dev-c++, Eclipse, MS Visual Studio .NET 2003, MS Visual C++
|
Verfasst: Di 06.12.05 21:55
 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 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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 
Hält's aus hier
Beiträge: 15
|
Verfasst: Di 06.12.05 22:41
Hier mal die Button und Timer Procedure von Form1.....
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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: 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...
_________________ Na denn, dann. Bis dann, denn.
|
|
P_G
      
Beiträge: 75
Win XP
Delphi 7 / 8 Enterprise
|
Verfasst: 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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: 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; ... ... |
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
derKopf 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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... 
Einloggen, um Attachments anzusehen!
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: 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 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: 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
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: 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
      
Beiträge: 97
WIN XP
D5 Prof
|
Verfasst: 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
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: 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
      
Beiträge: 97
WIN XP
D5 Prof
|
Verfasst: Fr 09.12.05 12:05
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: 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 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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;
|
|