Autor Beitrag
dac424
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: So 06.02.05 17:06 
Hallo liebe leute mal wieder ein problem wo ich nicht weiter komme wäre echt klasse wenn einer helfen kann
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Timer3Timer(Sender: TObject);
begin
if (form3.Bake.Checked = true) then begin
 if pin = 'dtr' then DTR(true);
 if pin2 = 'rts' then RTS(true);
 onoff.Picture.Bitmap.LoadFromResourceName(HInstance,'ON_BIT');
 sndPlaySound(PChar('bake1.wav'),SND_ASYNC);
  Timer3.Enabled:=false;
  dtr(false);
  rts(false);
end;
end;

die RS232 soll DTR und RTS auf True setzen und das wave file nur 1 Mal abspielen danach den Timer resetten und RTS bzw. DTR auf False setzen

das wave wird zwar abgespielt!!! aber nicht nur 1 mal sondern in einer schleife

der Timer schaltet nicht auf false und RS232 wird nicht aktiviert HILEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
warum macht der das nicht. :oops: :oops:


komisch an dieser Stelle Gehts ja

im Programm
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
 begin
           Timer3.Enabled:=false;
           sndPlaySound(nil,0);
           if pin = 'dtr' then DTR(true);
            if pin2 = 'rts' then RTS(true);
           onoff.Picture.Bitmap.LoadFromResourceName(HInstance,'ON_BIT');


ist eine Andere Procedur aber da geht es.

Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconAXMD: Titel korrigiert
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 28

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: So 06.02.05 20:49 
grade dachte ich dass ein timer nicht selbst abschalten kann, deshalb hätte ich eine variable auf false gesetzt und in einem anderen timer diesen deaktiviert, aber das hier funzt ja auch :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
beep;
timer1.enabled:= false;
end;

möchstest du jetzt dass der timer mehrmals durchläuft und der sound nur einmal gespielt wird, dann machst du dass so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Timer3Timer(Sender: TObject);  
var
once: boolean = true;
begin  
if (form3.Bake.Checked = true) then begin  
 if pin = 'dtr' then DTR:= true;  
 if pin2 = 'rts' then RTS:= true;  
 onoff.Picture.Bitmap.LoadFromResourceName(HInstance,'ON_BIT');  
 if once then sndPlaySound(PChar('bake1.wav'),SND_ASYNC);  
  Timer3.Enabled:=false;
  once:= false;  
  dtr:= false;  
  rts:= false;  
end;  
end;

Man kann den timer auch jedes 2. mal ausführen lassen, indem du statt
ausblenden Delphi-Quelltext
1:
once:= false					

ausblenden Delphi-Quelltext
1:
once:= not once;					

einsetzt oder halt mit integern jedes nte mal, ich hoffe das war es, was du wolltest ?!

was willst du denn damit bezwecken, was sind dtr und rts ?
dac424 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: So 06.02.05 21:40 
Titel: der beitrag über mir geht nicht
Also irgend wie hat der Kolege mich falsch verstanden

der Timmer wird von einer anderen Procedur gesteuert erst wenn da sich einige zeit nix tut schaltet der Timer auf false
so gesehen 2 Timer die gegen einander arbeiten

beispiel

wird gesprochen der Bake Timer für wave wieder gabe wird gestopt (False)
keiner Spricht Baken Timer auf True gesetzt einen Reset gemacht

spricht keiner 30 Min (zeit variable) wird das Wave gespielt und die RS232 auf True gesetzt und das Button geladen
bis das Wave zu ende Ist danach muss das Butten geänmdert werden und die RS232 auf False gehen aber erst nach ende des Wave abspielens des weiteren wird der Timer auf False gesetzt
funktrioniert nur nicht wie ich das will
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
once: boolean = true;  // hier kommt schon die Erste Fehlermeldung Lokale variablen können nicht inizaliesiert werden.


begin

if (form3.Bake.Checked = true) then begin
 check.Enabled:=false; //Timer für andere Prozedure.
 if pin = 'dtr' then DTR:= true;  das geht 
 if pin2 = 'rts' then RTS:= true; und das geht wenn unten die Zeilen für False // geremt sind
 onoff.Picture.Bitmap.LoadFromResourceName(HInstance,'ON_BIT');
 if once then sndPlaySound(PChar('bake1.wav'),SND_ASYNC);
  Timer3.Enabled:=false; //diese und darunter
  check.Enabled:=true;  // und diese darf erst nach wave ende pasieren
once:= false; //ist nicht von mir
  onoff.Picture.Bitmap.LoadFromResourceName(HInstance,'OFF_BIT');
  if pin = 'dtr' then DTR:= false;  darf erst nach ende von wave passieren 
 if pin2 = 'rts' then RTS:= false;  und das auch.
end;
end;



So ich denke das ist verständlicher die Prozeduren dürfen erst nach dem abgespielten wave passieren auser DTR und RTS true und bild ändern

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 28

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: So 06.02.05 21:50 
das mit der variable war mein fehler, mach die mal global und dann machst du die bei form1.create auf true
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: So 06.02.05 21:57 
Wenn es nur einmal möglich sein soll, deine Wave Datei abspielen zu können, dann kannst du es so machen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Timer3Timer(Sender: TObject);
{$J+} const CanPlay: Boolean = True; {$J-}
begin

  // dein Source Code

 if CanPlay then
 begin
   sndPlaySound(PChar('bake1.wav'),SND_ASYNC);
   CanPlay := False;
 end;

  // dein Source Code

end;


So richtig habe ich deine Frage aber noch nicht verstanden. Sollte es aber vorkommen, das deine Sounddatei mehr als einmal abgespielt werden (aus welchen Gründen auch immer), dann benutzt eine eigene Feldvariable unter TForm1.

_________________
Ciao, Sprint.
dac424 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: So 06.02.05 23:28 
so nun zum problem

es dürfen diese befehle nur ausgeführt werden wen das wafe feil zu ende gespielt ist
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Check.Enabled:=true;
onoff.Picture.Bitmap.LoadFromResourceName(HInstance,'OFF_BIT');  
  if pin = 'dtr' then DTR:= false;  darf erst nach ende von wave passieren   
 if pin2 = 'rts' then RTS:= false;  und das auch.


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
dac424 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: Fr 11.02.05 21:06 
Titel: Habe da was gefunden doch sleep macht ärger
doch am ende wenn das sleep laufen sollte wird das mit den parametern nicht richtig übergeben
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
procedure TForm1.bakenzeitTimer(Sender: TObject);
 var
 ba:string;
 wa:string;
 wp   : TWaveProvider;

 //wave:string;
  {$J+} const CanPlay: Boolean = True; {$J-}
       begin
       if (form3.Bake.Checked = true) then begin
       wp := TWaveProvider.Create('bake1.wav');
       // ein paar Infos über's Wave ausgeben
   //   Memo1.Lines.Add(+IntToStr(wp.DataHeader.length div wp.FormatData.AvgBytesPerSec));



  check.Enabled:=false;
 bakenzeit.Interval:=(StrToInt(form3.bakenzeit.text))*1000 ;
 onoff.Picture.Bitmap.LoadFromResourceName(HInstance,'ON_BIT');
 if pin = 'dtr' then DTR(true);
 if pin2 = 'rts' then RTS(true);
 sleep (2000);
 canPlay :=True;
 if CanPlay then
  begin
  //ba:='+wave+';
    FreeAndNil(wp);
    sndPlaySound(PChar('bake1.wav'),SND_ASYNC);
    CanPlay := False;
 // showmessage('Duration in Sec.: '+IntToStr(wp.DataHeader.length div wp.FormatData.AvgBytesPerSec));
 // sleep (wp.DataHeader.length div wp.FormatData.AvgBytesPerSec)*1000;

 // sleep (20000);
  bakenzeit.Enabled:=false;
 //check.Enabled:=true;

 if pin = 'dtr' then DTR(false);
 if pin2 = 'rts' then RTS(false);
   onoff.Picture.Bitmap.LoadFromResourceName(HInstance,'OFF_BIT');
 check.Enabled:=true;
   end;
   end;
 end;

bei Sleep (WP.DataHeader.............) solte der ergebene Wert übergeben werden.
es wird die Zeit des wavs angezeigt die muss mal 1000 ersetzt werden.

Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt.