Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wecker - Abruf Problem (https://www.delphipraxis.net/65129-wecker-abruf-problem.html)

Z32 12. Mär 2006 19:03


Wecker - Abruf Problem
 
Hallo, :hi:

Ich habe da eine Frage.

Also ich möchte einen Wecker programmieren. Geht auch alles schon bis auf die erweiterungs Funktion. Also der Benutzer hat die möglichkeit ein Datum einzugeben und um wieviel Uhr es an diesem Datum dann klingel soll. Beide eingaben schreibe ich getrennt in eine txt Datei. Also eine txt Datei für Datum und eine für Uhrzeit. Dann habe ich im Timer Ereignis dieses geschrieben:

Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
var dat, tim, datdat, timtim: string;
begin
datdat := datetostr (date);
timtim := timetostr (time);
datum.Lines.LoadFromFile('datum.txt');
uhrzeit.Lines.LoadFromFile('uhrzeit.txt');
dat := (datum.text);
tim := (uhrzeit.text);
if dat = datdat then
if tim = timtim then
sndplaysound(PChar('Glockenspiel.wav'),snd_sync);
end;
Für Erklärung: dat und tim sind die ausgelesenen Werte und datdat und timtim sind Uhrzeit und Datum real. Und datum.lines... und uhrzeit.lines... sind zwei Memo Felder, wo angezeigt werden soll, wann es klingel, also was man abgespeichert hat.

So und jetzt habe ich das Problem, dass die Werte anscheinend nicht ausgelesen werden. Es klingelt nähmlich nicht, auch wenn die Eingaben stimmen. Und ich weiß leider nicht wo es hakt.

Kann mir vielleicht einer helfen ???

Flare 12. Mär 2006 19:10

Re: Wecker - Abruf Problem
 
Zitat:

Delphi-Quellcode:
if dat = datdat then
if tim = timtim then
sndplaysound(PChar('Glockenspiel.wav'),snd_sync);

Du solltest die if-Blöcke mit einem begin und end umschließen, ich weiß nicht ob er das auch ohne so macht.

Delphi-Quellcode:
if dat = datdat then
begin
  if tim = timtim then sndplaysound(PChar('Glockenspiel.wav'),snd_sync);
end;
Oder einfach in eine Anweisung stecken

Delphi-Quellcode:
if (dat = datdat) AND (tim = timtim) then sndplaysound(PChar('Glockenspiel.wav'),snd_sync);

Ultimator 12. Mär 2006 19:11

Re: Wecker - Abruf Problem
 
Ich vermute einfach, dass der Timer nicht die genaue Zeit "trifft", prüfe besser, ob die Weckzeit kleiner (vor) oder gleich der aktuellen Zeit ist.

netscanner 12. Mär 2006 19:15

Re: Wecker - Abruf Problem
 
wie schreibst du die daten denn in die txt dateien?
Sie müssen genau mit dem layout vor aus dem computer ausgelesenen zeit übereinstimmen...

Z32 12. Mär 2006 19:23

Re: Wecker - Abruf Problem
 
Vielen Dank,
für die Schnellen Antworten, aber das mit den If Abfragen habe ich zwar direkt geändert, daran liegt es nicht.
Zu dem Layout. Also so mach ich es Datum: 12.03.2006 Und Uhrzeit: 18:30:25 Und das System mach es doch genauso,
oder irre ich mich ???

Flare 12. Mär 2006 19:34

Re: Wecker - Abruf Problem
 
Schau es dir doch einfach an wie es das System macht :-D

Ich weiß zwar gerade nicht wie es das system macht, ic bin mir aber sicher SO wird es nicht sein wenn es nicht funktioniert. Schreibe dir doch noch einfach 2 kleine Befehle rein um dir das ausgeben zu lassen wie das System die Uhrzeit/Datum anzeigt.


Flare

netscanner 12. Mär 2006 19:39

Re: Wecker - Abruf Problem
 
@ Flare: Doch das System macht es genau so...hab grade selber nachgeschaut

gut vom layout stimmt alles...aber ich glaub ich weiß jetzt worans liegt :wink:
Der Sound wird nur abgespielt, wenn zeit und datum genau mit deiner Vorgabe übereinstimmen.
Und darin liegt der fehler...Der Timer aktuallisiert alle 1s, dass heißt 1s nachdem die Zeit erreicht wurde hört der sound schon wieder auf. Wenn die 1.sekunde in der wave datei stille ist hört man den sound natürlich nicht...
Schreib einfach mal statt dem sound:
Delphi-Quellcode:
showmessage ('Zeit erreicht');
Wenn dann eine Meldung erscheint liegt es wirklich an dem oben genannten problem.
Das kann man aber ganz leicht beheben. Schreib dann einfach in die then anweisung über begin und end;
Delphi-Quellcode:
timer1.Enabled := false;
Dann hört der Timer bei der Zielzeit auf zu Zählen und der Sound müsste abgespielt werden.

So ich hoffe ich hab jetzt nicht ganz daneben gehauen :freak:

Z32 12. Mär 2006 20:02

Re: Wecker - Abruf Problem
 
HUHU,

Leider klappt es immer noch nicht. Habe alles ausprobiert.

Mir ist da aber noch ne andere Idee gekommen. Ich lese die txt Dateien ja in ein Memo Feld ein, um dann den Inhalt aus dem Memo Feld in string Variablen zu kopieren. Kann es sein, dass das nicht möglich ist ??? Gibt es einen Befahel, um eine Txt Datei in einem String zu öffenen ???

Ich würde mich über weitere Antworten sehr freuen :wink:

netscanner 12. Mär 2006 20:09

Re: Wecker - Abruf Problem
 
dafür gibt es einen befehl...
schau mal nach assignfileassignfile...
Daran kanns aber eigentlich nicht liegen, ich hab es genau so probiert (nur mit showmessage) und das klappt...

Z32 12. Mär 2006 20:20

Re: Wecker - Abruf Problem
 
Mit "showmessage" klappst ???

Also bei mir noch nicht, was mache ich denn falsch ??? Hier nochmal der Code mit "Showmessage"

Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
var dat, tim, datdat, timtim: string;
begin
datdat := datetostr (date);
timtim := timetostr (time);
label5.Caption := (datdat);
label4.Caption := (timtim);
datum.Lines.LoadFromFile('datum.txt');
uhrzeit.Lines.LoadFromFile('uhrzeit.txt');
dat := (datum.text);
tim := (uhrzeit.text);
if (dat = datdat) AND (tim = timtim) then showmessage ('Zeit erreicht');
end;
Hat vielleicht noch einer eine andere Idee, oder sieht einen Fehler im Code ???

netscanner 12. Mär 2006 20:40

Re: Wecker - Abruf Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
wie ist deine email adresse?, dann mail ich dir mal meinen code...
EDIT: So ich hab jetzt mal meinen Code angehängt. Bei mir geht er...

Z32 13. Mär 2006 12:45

Re: Wecker - Abruf Problem
 
Hallo,

Mal gucken wie du es gemacht hast, interesiert mich wirklich mal. Nur kann ich leider keine .rar Archive öffnen. Habe nur Winzip, gucke mich aber nach nem Tool dafür um.

Ich hatte da noch so ne andere Idee. Ich habe bei den Memos enabled = false eingestellt, und dachte daran liegts. Tuts aber leider nicht :(

Naja. Aufjeden Fall gucke ich mir mal den Code an, und vielleicht finde ich meinen Fehler ja dann. :-D

Z32 13. Mär 2006 13:05

Re: Wecker - Abruf Problem
 
@ netscanner

Hab mir mal WinRar besorgt, und deine Idee angesehn. Also ich muss dir sagen, dass ich nicht ganz verstehe, was das sein soll. Wofür sind den die 4 Memo - Felder und die ganzen Anzeigen dadrin. Und wann klingelt es den bzw. wo kann man die Zeit eingeben.

Also ich möchte nicht dein Programm schlecht machen. Aber ich verstehe es halt nicht ganz.

netscanner 13. Mär 2006 18:08

Re: Wecker - Abruf Problem
 
ist ja kein problem :-D
ich hab das problem schnell in 3 minuten geschrieben.

Du kannst im programm keine zeit eingeben - war mir zu viel arbeit sorry :pale:
Du musst die zeit bzw datum in der txt datei selber ändern.
Darin wird wahrsch. auch dein Fehler liegen...Wenn du die Weckzeit über dein Programm eingegeben hast guck auch mal ob es wirklich richtig in der txt datei drin steht.

Zu den Memos
Memo1 = Weckzeit
Memo2 = aktuelle Zeit
Memo3 = Weckdatum
Memo4 = aktuelles Datum
Dazu hättest du dir den Source aber nur genauer anschauen müssen :P

Z32 14. Mär 2006 18:48

Re: Wecker - Abruf Problem
 
Gut ok, da hast du recht.

In den txt Dateien von mir steht auch die eingegebene Zahl drin. Aber ich glaube ich weiß wo es happert. In dem Timer muss das programm die txt Dateien ja jede Sekunde öffnen. Ich glaube das geht gar nicht so schnell und oft, oder ???

netscanner 14. Mär 2006 20:07

Re: Wecker - Abruf Problem
 
doch das ginge schon :)
wäre aber blödsinn da hast du recht...
ich pers. würde die textdatei mit button klick einmalig reinladen...
aber wiegesagt bei mir läufts auch so

ChrisE 14. Mär 2006 20:57

Re: Wecker - Abruf Problem
 
Hallo Z32,

also ich weiß ja nicht, ob es dich noch interessiert, aber ich würde das ganze eher so angehen:

Delphi-Quellcode:
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    datdat: String;
    timtim: String;
    dattim: TDateTime;
  end;

var
  Form1: TForm1;

implementation

uses DateUtils;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  sl: TStringList;

begin
  Timer1.Enabled := FALSE;               // Zur Sicherheit
  sl := TStringList.Create;
  sl.LoadFromFile('datumundzeit.txt');   // Einfach mit DateTimeToStr beim speichern der Datei ablegen, dann wirds einfacher
  dattim := StrToDateTime(sl[0]);
  // nur der Vollständigkeit halber
  datdat := DateToStr(dattim);
  timtim := TimeToStr(dattim);
  if dattim > now then begin
    // was passiert wenn der Zeitpunkt in der Zukunft liegt?
    Timer1.Interval := MilliSecondsBetween(now, dattim);
    Timer1.Enabled := TRUE;
  end else begin
    // was ist wenn die Zeit bereits vorbei ist beim öffnen der Anwendung
    ShowMessage('Zeitpunkt liegt in der Vergangenheit');
  end;
  sl.Free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := FALSE;
  sndplaysound(PChar('Glockenspiel.wav'),snd_sync);
end;

end.
Das ganze ist nur ein Vorschlag wie man das "Warten" so einfach wie möglich gestalten kann. Du passt eigentlich nur das Intervall (in Millisekunden) an die Wartezeit an und startest den Timer. Dann bist du schon fertig. Sobald der Timer auslößt, schlatest du Ihn wieder aus und reagierst mit deinem Soundevent.
Alles weitere kannst du herum bauen wie du magst.

Vielleicht bringt es dir ja was.

Gruß, Chris

Z32 15. Mär 2006 15:29

Re: Wecker - Abruf Problem
 
mhh, das sieht aber sehr professionell aus.

Ich glaube das muss ich mir erst mal genauer angucken. :wink:

Sieht kopleziert aus, ist das für nen ganz einfachen Wecker denn nötig ???

Aber ich gucke mal, ob ich vielleicht eine kleine Passage schon übernehmen kann, aufjedenfall danke für deine Idee :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz