AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi Sounds Problem

Ein Thema von Windowscratcher · begonnen am 9. Mai 2012 · letzter Beitrag vom 20. Mai 2012
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    
Windowscratcher

Registriert seit: 9. Mai 2012
24 Beiträge
 
#11

AW: Delphi Sounds Problem

  Alt 10. Mai 2012, 15:36
Ich weiß echt nicht, was ich falsch mache.
Ich hab mir grade den Anhang von @Popov runtergeladen. Hat alles geklappt. Nur wenn ich das mache, klappt es wieder nicht!
Hier mein Code:
Code:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  Menus, ExtCtrls, ComCtrls, Buttons, StdCtrls, Unit2, mmSystem;

type

  { TForm1 }

  TForm1 = class(TForm)
    EndeBtn: TButton;
    OptionenBtn: TButton;
    StartenBtn: TButton;
    Panel1: TPanel;
    procedure EndeBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure OptionenBtnClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.lfm}

{ TForm1 }

procedure PlayMySound(SndName: String); //uses mmSystem
var
  FilePath: String;
begin
  FilePath := ExtractFilePath(ParamStr(0)) +'Musik\' + SndName + '.wav';

  if FileExists(FilePath) then
    //SndPlaySound(PAnsiChar(FilePath), SND_ASYNC ); //Alternative
    PlaySound(PChar(FilePath), hInstance, SND_ASYNC or SND_FILENAME);
end;

procedure TForm1.FormCreate(Sender: TObject);

begin

end;

procedure TForm1.EndeBtnClick(Sender: TObject);
begin
  close;
end;

procedure TForm1.OptionenBtnClick(Sender: TObject);
begin
  Form2.ShowModal;
  PlayMySound('Modem');
end;

end.
Das komische ist, dass wenn ich bei "procedure PlayMySound" den Unterordner wegmache, höre ich nicht mal ein Fehlerton, sondern einfach nichts. In dem Beispiel wollte ich zum Test einen Ton für den Optionenbutton ertönen lassen. Ich will gar nicht wissen, wie das wird, wenn ich noch zusätzlich das Dokument dem Lehrer gebe, in dem ich alles erklären muss... -.-

PS: Danke für die zahlreichen Antworten!

Geändert von Windowscratcher (10. Mai 2012 um 15:39 Uhr)
  Mit Zitat antworten Zitat
Cencil

Registriert seit: 10. Mai 2012
1 Beiträge
 
#12

AW: Delphi Sounds Problem

  Alt 10. Mai 2012, 15:59
Das komische ist, dass wenn ich bei "procedure PlayMySound" den Unterordner wegmache, höre ich nicht mal ein Fehlerton, sondern einfach nichts. In dem Beispiel wollte ich zum Test einen Ton für den Optionenbutton ertönen lassen. Ich will gar nicht wissen, wie das wird, wenn ich noch zusätzlich das Dokument dem Lehrer gebe, in dem ich alles erklären muss... -.-

PS: Danke für die zahlreichen Antworten!
Liegt an dieser Zeile hier
if FileExists(FilePath) then Die prüft ob die Datei überhaupt existiert, falls ja, wird PlaySound aufgerufen. Wenn du die Zeile entfernst, hast du deinen Fehler-Ton wieder. Wenn dann noch immer nur der Fehler-Ton erläutet solltest du evtl. nochmal den Pfad prüfen
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#13

AW: Delphi Sounds Problem

  Alt 10. Mai 2012, 16:00
Das komische ist, dass wenn ich bei "procedure PlayMySound" den Unterordner wegmache, höre ich nicht mal ein Fehlerton, sondern einfach nichts.
Logisch, weil die Existenz der abzuspielenden Datei vorher geprüft wird - existiert sie nicht, wird gar nicht erst versucht, sie abzuspielen.

Zitat:
In dem Beispiel wollte ich zum Test einen Ton für den Optionenbutton ertönen lassen.
Vor dem modalen Anzeigen der Form2 den Sound abspielen lassen, ist notwendig, denn modales Anzeigen bedeutet, dass der Codefluss unterbrochen wird und erst nach dem Schließen des modalen Fensters fortgesetzt wird. Konkret auf deinen Code bezogen bedeutet das, dass PlayMySound erst ausgeführt wird, nachdem Form2.ShowModal fertig ist. Die Anweisungen auszutauschen, wäre daher schonmal eine gute Idee .

Falls der Sound aber auch dann nicht abgespielt wird, solltest du selber untersuchen, indem du sogenannte Breakpoints (in den deutschen Delphi- und Lazarus-Umgebungen heißen sie wohl Haltepunkte) setzt, also Punkte, an denen der Debugger die Ausführung des Programms anhält. Kommt der Debugger an einem solchen Punkt an, kann man mit F7 bzw. F8 die Anweisungen im Code Schritt für Schritt durchgehen und so sehen, welche Anweisungen ausgeführt werden und welche nicht. Diese Methode ist für die Fehlersuche unverzichtbar und insofern empfehle ich dringend, das möglichst schnell zu verinnerlichen.

MfG Dalai
  Mit Zitat antworten Zitat
Windowscratcher

Registriert seit: 9. Mai 2012
24 Beiträge
 
#14

AW: Delphi Sounds Problem

  Alt 10. Mai 2012, 16:13
@Dalai Hab mal den Debugger laufen lassen (F8) und der hat ganz normal compiliert. Dann hab ich F7 ausprobiert und dann haben sich ganz viele andere Units geöffnet. Ich bin überhaupt nicht zu meinen Programmcodes gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#15

AW: Delphi Sounds Problem

  Alt 10. Mai 2012, 16:18
Tipp: Haltepunkt(e) dort setzen, wo es mit dem Debuggen losgehn soll.
Dann mit F9 beginnen und so lange mit F7/F8 weitermachen, bis man den Code durch hat. Oder mit F9 weiter bis zum nächsten Haltepunkt.

(es gibt auch noch mehr nützliche Tasten-Kombinationen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#16

AW: Delphi Sounds Problem

  Alt 10. Mai 2012, 16:25
@Dalai Hab mal den Debugger laufen lassen (F8) und der hat ganz normal compiliert.
Natürlich hat er das, sofern keine Syntaxfehler drin sind.

Zitat:
Dann hab ich F7 ausprobiert und dann haben sich ganz viele andere Units geöffnet. Ich bin überhaupt nicht zu meinen Programmcodes gekommen
Deshalb der Hinweis auf die Haltepunkte. Der Sinn dahinter ist, Schritt für Schritt durch den Code zu gehen, aber alle unwichtigen Units außen vor zu lassen. Setz mal einen Haltepunkt in der Zeile 45 der Unit1 (if FileExists() ), indem du auf die Zeilennummer in deinem Lazarus klickst. Dann wird die Zeile rot hinterlegt und wenn du nun dein Programm ganz normal (mit F9) ausführst, hält der Debugger an genau dieser Stelle an, wenn du auf den OptionenBtn klickst. Und erst jetzt kommt das F7 bzw. F8 zum Einsatz.

Ich hoffe, die Sache ist nun etwas klarer.

MfG Dalai


PS: Wobei mich etwas wundert, dass solche Grundlagen nicht schon vermittelt wurden, denn solch theoretische Sachen sollten vor dem Praxiseinsatz schon bekannt sein, um sinnvoll arbeiten zu können. Und dazu zähle ich auch die Kenntnis der Begrifflichkeiten wie "kompilieren" & Co aus dem früheren Verlauf der Diskussion.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#17

AW: Delphi Sounds Problem

  Alt 10. Mai 2012, 16:29
oder ohne Haltepunkte, aber nur wenn man Geduld hat (oder neugierig ist)
F8 bis zu "Application.Run;"
dann
F7 und man ist in seinem Programm.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Windowscratcher

Registriert seit: 9. Mai 2012
24 Beiträge
 
#18

AW: Delphi Sounds Problem

  Alt 10. Mai 2012, 16:54
Ich verstehe noch nicht ganz, was der bewirken soll.
Ich hab mal Zeile 40 markiert, und dann F9 gedrückt. Dann hat sich das Programm gestartet und danach hat das Programm wieder zur Unit gewechselt. Es hat als erstes "begin" grün markiert (falls es nicht grün ist, wisst ihr, dass ich eine Rot-Grün Sehschwäche hab ), dann die nächste Zeile "FilePath := ....", dann wieder die nächste "if..." und dann hat es einfach alles bis zum nächstgelegenen "end" übersprungen und danach ist es zum "end" des OptionenBtn gegangen. Dann haben sich wieder die Unit-Fenster geöffnet...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#19

AW: Delphi Sounds Problem

  Alt 10. Mai 2012, 17:16
@p80286:

Ich weiß nicht wie es in Lazarus aussieht, aber
geh im Delphi mal in die Projektoptionen, aktiviere dort "Mit Debug-DCUs kompilieren" und nun schau was bei deinem F7 passiert.
(alle Delphi-Versionen ala Standard, Personal, Starter und Trial sind davon ausgeschlossen)

Auch drittanbieter Units, welche mit Debiginfos kompiliert sind, machen diesbezüglich sehr viel Spaß.
(Eurekalog, DevExpress und Co. sind diesbezüglich der pure Horror)

In einigen älteren Delphis gibt es den spaß, daß alle beigelegten Indy-Units mit Debuginfos kompiliert wurden.
(obwohl eigentlich/theoretisch zwei Varianten bei lagen, aber leider waren auch die NonDebug-Dateien mit Debuginfos versehn )
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (10. Mai 2012 um 17:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#20

AW: Delphi Sounds Problem

  Alt 10. Mai 2012, 17:23
Und was verstehst du jetzt daran nicht? Das von dir beobachtete Verhalten ist der abgelaufene Codefluss oder Block von Anweisungen, die wirklich ausgeführt wurden. Hast du dich noch nicht gefragt, wie man feststellt, ob ein Programm die Anweisungen ausführt, die man sich im Kopf vorstellt? Genau dafür sind der Debugger und die Haltepunkte da (es gibt noch mehr Dinge, aber die sind weniger wichtig).

Im Konkreten hast du also festgestellt, dass Anweisungen übersprungen wurden, die deiner Meinung nach ausgeführt werden sollten. Nun weißt du, welche das sind und solltest untersuchen, warum das so ist. Am einfachsten ist es wohl, sich den Pfad der abzuspielenden Datei mal mittels ShowMessage anzeigen zu lassen und zu prüfen, ob's diese Datei wirklich gibt. In Codeform:
Delphi-Quellcode:
procedure PlayMySound(SndName: String); //uses mmSystem
var
  FilePath: String;
begin
  FilePath := ExtractFilePath(ParamStr(0)) +'Musik\' + SndName + '.wav';
  ShowMessage(FilePath); //<-- Diese Zeile hinzugefügt
  if FileExists(FilePath) then
    //SndPlaySound(PAnsiChar(FilePath), SND_ASYNC ); //Alternative
    PlaySound(PChar(FilePath), hInstance, SND_ASYNC or SND_FILENAME);
end;
MfG Dalai
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    

 

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 23:13 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