Autor Beitrag
derKopf
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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;
ausblenden 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 user profile iconTino: Delphi-Tags hinzugefügt.
Moderiert von user profile iconTino: Titel geändert.
Moderiert von user profile iconTino: Topic aus Multimedia / Spiele / Grafik verschoben am Mi 07.12.2005 um 16:17
DarkLord05
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
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++
BeitragVerfasst: Di 06.12.05 21:55 
:welcome: hier...
zu deinem Problem:

Mach die Überprüfung mit nem Timer (den so auf 750 ms stellen).

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
...
 Uhrzeit, Datum : String// Globale Variablen
...
 Uhrzeit = ZeitEdit.Text; // Wenn auf deinen "Start"Button geklickt 
 Datum = DatumEdit.Text;   // wird wird das hier in die Variablen geschrieben.
...
 Timer.Enable := True; // Hier wird ein Timer gestartet der Überprüft wie spät es ist.
...
// Im Timer
 UhrzeitX = TimeToStr (Time);
 DatumX = DateToStr (Date);
 IF UhrzeitX = Uhrzeit then
  if DatumX = Datum then
   begin
    //Dieses und jenes Passiert
   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 user defined image klicken.
derKopf Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Di 06.12.05 22:41 
Hier mal die Button und Timer Procedure von Form1.....



ausblenden volle Höhe 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:
//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) then
 if  (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 then
if    ADate >= Date then
      ShowMessage('Wecker eingestellt')
else
      ShowMessage('Ungültige Zeit/Datum');
end;


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 07.12.05 17:00 
Die Bedingung
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 75

Win XP
Delphi 7 / 8 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 07.12.05 17:15 
Titel: Re: Logikproblem
Hallo!

user profile iconderKopf 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Fr 09.12.05 10:35 
Setz mal

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Fr 09.12.05 10:44 
In Etwa So...
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 97

WIN XP
D5 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 97

WIN XP
D5 Prof
BeitragVerfasst: Fr 09.12.05 12:05 
wie machst du es denn nu
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Fr 09.12.05 12:23 
user profile iconmehmeh 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 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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;