Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Schleife (https://www.delphipraxis.net/164433-schleife.html)

BWRobert 12. Nov 2011 10:44

Delphi-Version: 5

Schleife
 
Hallo,

Ich bin grade dabei spaßeshalber eine "Blaulichtsteuerung" zu programmieren. Hierbei kann der Benutzer auf einem Steuerelement (BitButton) das Martinshorn anschalten. Ich habe eine Wave Datei, die diese Tonfolge abspielt, in eine Schleife programmiert. Sie läuft also nachdem man es angeschaltet hat z.b. 20 mal ab. Meine Vorstellung wäre nun aber, dass der Benutzer mit einem Klick das Signal anmacht und es einfach weiterläuft. So lange bis der Benutzer wieder auf den Button klickt und es sich ausschaltet.
Delphi-Quellcode:
procedure TForm1.BitBtnPressluftClick(Sender: TObject);
Var i :Integer;
begin
Repeat
  begin
   PlaySOUND(PChar('.\Pressluft-2.wav'),hInstance,snd_LOOP );
  end;
until ;
end;
Das wäre meine Überlegung gewesen. Nach until müsste dem Programm also gesagt werden "until click" oder irgend so was.

Mithrandir 12. Nov 2011 10:50

AW: Schleife
 
Du musst deine Funktion zum Abspielen in eine eigene Funktion auslagern. Diese rufst du auf, wenn das Click-Event ausgelöst wird. Gleichzeitig setzt du eine globale Variable auf true, welche in der repeat-until-Schleife geprüft wird.

In der Schleife selbst bringst du noch ein application.processmessages unter, damit der Button-Click verarbeitet wird. Sollte jetzt das Click-Event ausgeführt werden und die globale Variable auf true stehen, dann wird die Funktion nicht nochmal ausgeführt, und die Variable bekommt den Wert false. Das führt wiederum dazu, dass die Schleife beendet wird.

Allerdings: Wenn das Programm noch etwas anderes machen soll, dann musst du dich mit Threads beschäftigen. Gibt aber genug Beispiele dafür. ;)

Bummi 12. Nov 2011 11:06

AW: Schleife
 
http://www.swissdelphicenter.ch/torr...ode.php?id=335

DeddyH 12. Nov 2011 11:34

AW: Schleife
 
Oder einfach so (wenn Bitmasken addiert werden, bekomme ich immer den großen grünen Arkl-Anfall):
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FPlaying: Boolean;
  public
    { Public-Deklarationen }
  end;

...

uses MMSystem;

procedure TForm1.Button1Click(Sender: TObject);
const
  Dateiname = 'Pressluft-2.wav';
var
  Soundfile: PChar;
  Flags: Cardinal;
begin
  FPlaying := not FPlaying;
  if FPlaying then
    begin
      SoundFile := PChar(ExtractFilePath(ParamStr(0)) + Dateiname);
      Flags := SND_ASYNC or SND_LOOP;
    end
  else
    begin
      SoundFile := nil;
      Flags := 0;
    end;
  PlaySound(SoundFile, 0, Flags);
end;

BWRobert 12. Nov 2011 17:13

AW: Schleife
 
Danke für die schnellen Antworten!
Ich werde mich zeitnah daran versuchen :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 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