[Delphi] Beep befehl in schleife setzten.

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von rhino, 22. Februar 2007 .

  1. 22. Februar 2007
    Beep befehl in schleife setzten.

    Hallo.

    Ich bin daran, mir en Wecker zu programmieren.
    Dabei brauch ich den Beep befehl.
    Der sollte ca. 10 mal hintereinander auftönen.
    Doch wie mach ich die Schleife dafür?
    Hab nämlich nicht so viel Ahnung von Delphi.


    Bewertung ist drin


    Gruß

    Rhino
     
  2. 22. Februar 2007
    AW: Beep befehl in schleife setzten.

    Code:
    for i := 1 to [COLOR="Red"]10[/COLOR] do begin
     beep;
    end;
    Die 10 zeigt an wie oft wiederholt wird, der Wert kann natürlich auch ne Variable sein...

    Grundlagen für Delphi gibts übrigens auf Home - Delphi-Treff erklärt

    MfG mighty90
     
  3. 22. Februar 2007
    AW: Beep befehl in schleife setzten.

    Es gibt mehrere Methoden:

    Code:
    [B]var [/B]i:Integer;
    [B]begin[/B]
    
    [..]
    
     [B]for [/B]i:=0 [B]to [/B]50 [B]do[/B]
     [B]begin[/B]
    
     [..]
    
     [B]end[/B];
    
    [...]
    
    [B]end[/B];
    
    oder

    Code:
    [B]var [/B]i:Integer;
    [B]begin[/B]
    
    [..]
    
     [B]while [/B]i < 50 [B]do[/B]
     [B]begin[/B]
     [..]
    
     [B]end[/B];
    
    [...]
    
    [B]end[/B];
    
    oder du benutzt einfach das TTimer - Objekt.

    Und zum abschspielen des SOunds kannst ja TMediaplayer benutzen.

    Mfg

    Rushh0ur
     
  4. 22. Februar 2007
    AW: Beep befehl in schleife setzten.

    Also wenn du das mit der while-Schleife machst, musst du aber beachten, dass du jedes Mal wenn die Schleife durchlaufen wird die Variable (in dem Fall i) hochgezählt wird. (Hoffe das ich da jetzt richtig liege^^)

    Code:
    var i:Integer;
    begin
    
     while i < 10 do
     begin
     [B] i := i + 1;
     beep;[/B]
     end;
    
    end;
    Also für meine Begriffe nur umständlich, ohne das es irgendeinen Vorteil zur For-Schleife gibt, bei deinem Beispiel.

    MfG mighty90
     
  5. 23. Februar 2007
    AW: Beep befehl in schleife setzten.

    uses windows;
    var i : integer;
    begin
    for i := 1 to 10 do
    windows.beep(freq,dur);
    end;

    freq und dur sind integer, dabei ist ersteres die frequenz in hertz und zweiteres die dauer des beepens in milisekunden.
    gebeept wird über den systemspeaker.
     
  6. 23. Februar 2007
    AW: Beep befehl in schleife setzten.

    danke , danke.
    Das hat mir geholfen.
    Doch jetzt geht mein beep befehl nicht mehr.

    ich schreib

    beep;

    zu einem Button (onclick) und es geht nicht.
    Es kommt aber ein Ton aus dem Headset.
    Gestern hat der Beep befehl noch funktioniert.
    Was ist da los?

    Gruß

    Rhino

    Ps: Bewertung hat jeder
     
  7. 23. Februar 2007
    AW: Beep befehl in schleife setzten.

    hmm ich bin auch noch ziemlich neu....wie issen der befehl, wenn ich mittem player n sound öffnen will?
    und wie kann ich den timer programmieren, also das er meinetwegen den sound nach ner halben std abspielt?
     
  8. 23. Februar 2007
    AW: Beep befehl in schleife setzten.

    da gibts sogar sowas wie ne suchfunktion....

    Tipps & Tricks&nbsp;- Delphi-Treff <--- sound ohne Player
    Tipps & Tricks&nbsp;- Delphi-Treff <--- Video mit Player (also müsste des auch so mit nem Sound gehen)

    Und wenn man Timer eingibt, gibts auch nen paar Beispiele, wo nen Timer drin is.

    Bsp. von mir:
    Code:
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
     sndPlaySound(PChar('C:\Datei.wav'),SND_SYNC);
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     Timer1.Interval := [COLOR="Red"]1[/COLOR] * 1000;
     Timer1.Enabled := True;
    end;
    
    Auf dem Fenster sind nur ein Button und ein Timer. Beim öffnen des Formulars ist der Timer ausgeschaltet (Enabled --> False).
    Nach dem Klick auf den Button wird als erstes die Zeit "eingestellt" (ich weis nich wie ichs sonst nennen soll^^), in welchen Zeitabständen der Timer halt seine Aktion ausführt. Die rote 1 stellt den Abstand in Sekunden dar, und deine gewünschten 30 Minuten wären 1800 Sekunden.
    mit Timer1.Enabled := True; wird der Timer aktiviert, und führt in dem Bespiel nach 1 Sekunde den Befehl sndPlaySound(PChar('C:\Datei.wav'),SND_SYNC); aus.

    Was fehlt in dem Beispiel??
    Ich denke mal, das der Sound auch irgendwann wieder aufhören soll zu spielen, also musste das noch irgendwie mit reinbringen und wenn der Sound nich nach 30 Minuten wieder abgespielt werden soll, musste den Timer auch wieder anhalten.

    MfG mighty90
     
  9. 23. Februar 2007
    AW: Beep befehl in schleife setzten.

    Dann fehlt aber noch etwas
    Code:
    var i:Integer;
    begin
    
     [b]i := 0;[/b] //I initialisieren
     while i < 10 do
     begin
     [b]inc(i);[/b] //Direkter speicherzugriff ist schneller
     beep
     end;
    
    end;
    Sonst ist es zufall ob die schleife überhaupt oder nur teilweise ausgeführt wird.
     
  10. 24. Februar 2007
    AW: Beep befehl in schleife setzten.

    Ok da muss ich denn oben geschriebenen Beiträgen recht geben,
    habs ausfersehen vergessen hinzuschrieben.

    Um besser zu veranschaulichen, wie man es über einen TTimer machen könnte
    habe ich schnell ein kleines Beispiel geschrieben:

    http://www.megaupload.com/de/?d=0BW82EO9 oder
    http://rapidshare.com/files/17963577/Wecker.zip.html

    Da hab ich nur mit einfachen Befehlen und schon fertigen Objekten gearbeitet und deswegen
    ist das auch nicht das Optimalste, aer man kann sehen wie sowas funktionieren könnte.

    @asdrexit
    Bei Delphi wird ob "inc(i);" oder "i:=i+1" soweit ich weiss immer in den selben Maschienencode optimiert und deswegen ist dies eigentlich egal, bei anderen Programmen kann dies durchaus sein aber bei Delphi nicht, das macht der Compiller automtaisch.

    Mfg

    Rushh0ur
     
  11. 24. Februar 2007
    AW: Beep befehl in schleife setzten.

    Das kann sein, dass der Compiler "i:=i+1" zu einem Speicherbefehl macht, wenn i ein Integer ist.
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.