AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi wave nach Textausgabe abspielen, Reihenfolge stimmt nicht
Thema durchsuchen
Ansicht
Themen-Optionen

wave nach Textausgabe abspielen, Reihenfolge stimmt nicht

Ein Thema von youare2 · begonnen am 4. Nov 2003 · letzter Beitrag vom 4. Nov 2003
Antwort Antwort
youare2

Registriert seit: 4. Nov 2003
Ort: Lindlar
5 Beiträge
 
#1

wave nach Textausgabe abspielen, Reihenfolge stimmt nicht

  Alt 4. Nov 2003, 10:29
Hallo,

ich schreibe zur Zeit an einem kleinen Programm, um meiner Tochter das Alphabet spielerisch beizubringen.

Grundidee: Eine Taste wird gedrückt - der Buchstabe wird in einem Textfeld angezeigt - Buchstabe wird vorgelesen.

Mein Problem: die Reihenfolge der Ausgabe ist nicht richtig. Ich habe einen Button eingebaut, der die Buchstaben in dem Memo-Fenster anzeigen soll und anschließend die Wave abspielen soll. Nur leider werden erst alle Wave-Dateien abgespielt und dann das Memofenster aktualisiert. Hier ein Ausschnitt aus der Source:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Text:=Memo1.Text + 'A';
PlaySound(PChar('a.wav'), 0, SND_SYNC);
Memo1.Text:=Memo1.Text + 'B';
PlaySound(PChar('b.wav'), 0, SND_SYNC);
Memo1.Text:=Memo1.Text + 'C';
PlaySound(PChar('c.wav'), 0, SND_SYNC);
end;
Hat jemand einen Tip wie ich die Reihenfolge steuern kann? Wunsch: erst automatisch den Buchstaben ins Memofenster eintragen und anschließend die Wave abspielen.

[edit=Daniel B]Delphi-Tags eingefügt. Mfg, Daniel B[/edit]
Danke

youare2
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: wave nach Textausgabe abspielen, Reihenfolge stimmt nich

  Alt 4. Nov 2003, 10:36
Das Problem ist, das die Zuweisung an Memo1.Text das Neuzeichen bei naechster Gelegenheit anweist.
Die naechste Gelegenheit ist aber erst nach Ende von Button1Click wenn wieder Messages verarbeitet werden.
Also muss das Neuzeichnen erzwungen werden.
Ein Aufruf von Update nach jeder Memo-Zuweisung soltle das Problem loesen.
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#3

Re: wave nach Textausgabe abspielen, Reihenfolge stimmt nich

  Alt 4. Nov 2003, 11:02
Probiers mal mit Application.ProcessMessages;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Text:=Memo1.Text + 'A';
Application.ProcessMessages;

PlaySound(PChar('a.wav'), 0, SND_SYNC);
Memo1.Text:=Memo1.Text + 'B';
Application.ProcessMessages;

PlaySound(PChar('b.wav'), 0, SND_SYNC);
Memo1.Text:=Memo1.Text + 'C';
Application.ProcessMessages;

PlaySound(PChar('c.wav'), 0, SND_SYNC);
end;
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
youare2

Registriert seit: 4. Nov 2003
Ort: Lindlar
5 Beiträge
 
#4

Re: wave nach Textausgabe abspielen, Reihenfolge stimmt nich

  Alt 4. Nov 2003, 11:16
Danke.

Habe es direkt ausprobiert:

Memo1.Text:=Memo1.Text + 'A';
Update;
PlaySound(PChar('a.wav'), 0, SND_SYNC);

Funktioniert jetzt einwandfrei.
Danke

youare2
  Mit Zitat antworten Zitat
youare2

Registriert seit: 4. Nov 2003
Ort: Lindlar
5 Beiträge
 
#5

Re: wave nach Textausgabe abspielen, Reihenfolge stimmt nich

  Alt 4. Nov 2003, 11:19
Auch die Lösung mit : Application.ProcessMessages; funktioniert.

Gibt es einen Unterschied zwischen den Lösungen bzw. hat eine Lösung einen Vorteil? Speicherplatz oder ähnliches?
Danke

youare2
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#6

Re: wave nach Textausgabe abspielen, Reihenfolge stimmt nich

  Alt 4. Nov 2003, 11:43
Während Update lediglich die visuelle Erscheinung eines Controls (und ggf. dessen untergeordneten Controls) auf dem Bildschirm aktualisiert, wird mit Application.Processmessages die Botschaften-Warteschlange des Programms abgearbeitet.

Durch Änderung des Inhalts des Memos war hier ua eine Botschaft zum Neuzeichnen des Memos enthalten, die letztlich den selben Effekt hat, wie der direkte Aufruf von Update.
Neben diesen Botschaften, werden auch andere, wie solche, zum Bewegen des Fensters, verarbeitet, so dass Dein Fenster nicht "wie abgestürzt" wirkt (das wäre bei Update der Fall, wenn Du probierst, das Fenster während der Tonwidergabe zu verschieben).

Trotzdem birgt der Ansatz, alle Botschaften zu verarbeiten, Gefahren: Wenn Du während der Durchführung der Methode Button1Click erneut auf den Button klickst, wird sie erneut in einer zweiten Version ausgeführt und erst anschließend nach Application.Processmessages der ersten Version fortgefahren. Andere Randerscheinungen können auftreten, wenn man zwischenzeitlich auf das "X" des Fensters klickt oder Controls (zB Edit-Felder) verändert, deren Werte für die Berechnung innerhalb einer Methode ausschlaggebend sind.
gruß, choose
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#7

Re: wave nach Textausgabe abspielen, Reihenfolge stimmt nich

  Alt 4. Nov 2003, 11:45
Die erste Variante zwingt nur das Memo zum Update. Die zweite (meine) Variantekann z.B. auch innerhalb von langen Schleifen aufgerufen werden und lässt die Anwendung ihre Nachrichten abarbeiten. Darunter befindet sich in dem Fall auch die Aufforderung zum aktualisieren des Memo.

Processmessages kann dann von Vorteil sein, wenn die Sounds lang sind und während dem abspielen z.B. Teile vom Fenster verdeckt waren und neu gezeichnet werden müssen.
Aber Processmessages macht eh nicht anderes als, unter anderem, Update aufzurufen.

Ansonsten würd ich sagen ist es egal. Processmessages wird sowieso mehrmals in der Sekunde von der Anwendung aufgerufen, solange sie im Leerlauf ist, aber sobald eine Prozedur abgearbeitet wird eben nicht mehr.

EDIT:
OK, choose hat die bessere Erklärung geliefert, ich zieh mich zurück
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz