Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi frage zu TTimer (https://www.delphipraxis.net/62244-frage-zu-ttimer.html)

fwsp 1. Feb 2006 18:29


frage zu TTimer
 
hallo

ich möchte eine funktion programmieren, die nacheinander töne ausgibt, dazwischen soll jeweils pause sein, nur klappt das überhaupt nicht mit dem code den ich geschrieben habe. ich möchte einen Timer verwenden und kein sleep. kann mir jemand helfen?
danke.

Delphi-Quellcode:
function Dur(StartTon: integer; Timer: TTimer): string;
begin
//1. Ton
 FMain.MidiOutput.PutShort($90, StartTon, UGlobal.IVLautstaerke);
 Timer.Enabled:= True;
//2. Ton
 FMain.MidiOutput.PutShort($90, StartTon+2, UGlobal.IVLautstaerke);
 Timer.Enabled:= True;
//3. Ton
 FMain.MidiOutput.PutShort($90, StartTon+4, UGlobal.IVLautstaerke);
 Timer.Enabled:= True;
//4. Ton
 FMain.MidiOutput.PutShort($90, StartTon+5, UGlobal.IVLautstaerke);
 Timer.Enabled:= True;
//5. Ton
 FMain.MidiOutput.PutShort($90, StartTon+7, UGlobal.IVLautstaerke);
 Timer.Enabled:= True;
//6. Ton
 FMain.MidiOutput.PutShort($90, StartTon+9, UGlobal.IVLautstaerke);
 Timer.Enabled:= True;
//7. Ton
 FMain.MidiOutput.PutShort($90, StartTon+11, UGlobal.IVLautstaerke);
 Timer.Enabled:= True;
//8. Ton
 FMain.MidiOutput.PutShort($90, StartTon+12, UGlobal.IVLautstaerke);
 Timer.Enabled:= True;

 Result:= 'Dur';
end;

3_of_8 1. Feb 2006 18:32

Re: frage zu TTimer
 
Einen Timer zu verwenden ist nicht sehr passend hier. Machs halt so:

Delphi-Quellcode:
procedure Delay(Time: Cardinal);
var start: Cardinal;
begin
start:=GetTickCount;
repeat Application.ProcessMessages until GetTickCount>=start+time;
end;

omata 1. Feb 2006 18:33

Re: frage zu TTimer
 
Moin,

schau dir mal Delay an.

MfG
Thorsten

ichbins 1. Feb 2006 18:35

Re: frage zu TTimer
 
Der Timer kann nur ausgeführt werden, während keine Funktion läuft. Du machst es so:
Delphi-Quellcode:
beep;
timer aktivieren;
beep;
timer aktivieren; (sinnlos, da bereits aktiviert)
du musst deine Funktion beenden und kannst dann den Timer öffnen. Verwende dann eine globale Zählervariable:
Delphi-Quellcode:
var
  zaehler:integer=0;



procedure tform1.timerprozedur (Doppelklick auf Timer);
begin
  zaehler:=zaehler+1;
  case zaehler of
    1: TON1 ABSPIELEN;
    2: TON2 ABSPIELEN;
  end else
  begin
    zaehler:=0;
    timer1.enabled:=false;
  end;
end;

//so aktivieren:
procedure aktivieretimer;
begin
  timer1.enabled:=true;
  timer1timer(self);
end;

fwsp 1. Feb 2006 18:40

Re: frage zu TTimer
 
danke, sehr hilfreich.
ich werde das über delay regeln. es ist einfacher umzusetzen, außerdem ist das nur eine von vielen ähnlichen aufgebauten prozeduren.


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