Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TTimer 2 Aktivieren (https://www.delphipraxis.net/177646-ttimer-2-aktivieren.html)

Natcree 18. Nov 2013 22:48

TTimer 2 Aktivieren
 
Hallo ich möchte mit Canvas was auf die Form Zeichnen. Wenn der Timer1 fertig ist bzw er alles geschrieben hat dann soll Timer2 aktiviert werden Hier mal der code ich kriege es nicht hin

Delphi-Quellcode:
procedure TForm2.Timer1Timer(Sender: TObject);
begin
  a:='Anrede:'+' Herr';
  inc(i);
  if i > length(a)then
  begin
    Canvas.Font.Name := 'CLARENCE'; //Schriftart
    Canvas.Font.Style := [fsBold]; //Fett
    Canvas.Font.Height := 18;      //Schriftgrösse
    canvas.textout(296+i*16,32,a[i]);
if timer1.enabled= true then mediaplayer1.play else mediaplayer1.stop;
end;

Volker Z. 19. Nov 2013 00:05

AW: TTimer 2 Aktivieren
 
Hallo,

Zitat:

Hallo ich möchte [...] Wenn [...] soll [...] Hier mal der code ich kriege es nicht hin
Was soll denn das bitte schön sein? Zu nennen wäre: hinger**** Fragestellung und insbesondere der fehlende Bezug zwischen Threadtitel und Deinem Codefragment.
Wo ist denn da nur der kleinste Hinweis auf den Timer2, der da aktiviert werden soll?

Wenn Du qualifizierte Antworten willst, dann formuliere die Frage(n) entsprechend.

Gruß

Natcree 19. Nov 2013 00:17

AW: TTimer 2 Aktivieren
 
Ich habe mehre TTimer die nacheinander aktiviert werden sollen. Im Timer1 siehe code bsp. wird ein text auf die Form geschrieben nun soll wenn der Text mit Canvas.textout geschrieben ist der 2. Timer Aktiviert werden.

Sorry Volker Z.

Ich hatte vor über boolean den 2. Timer zu aktivieren habe es aber nicht hin bekommen.

Wie und wo kann ich in meinen Code den 2.Timer aktivieren ?


Delphi-Quellcode:
procedure TForm2.Timer1Timer(Sender: TObject);
begin
  a:='Anrede:'+' Herr';
  inc(i);
  if i > length(a)then
  begin
    Canvas.Font.Name := 'CLARENCE'; //Schriftart
    Canvas.Font.Style := [fsBold]; //Fett
    Canvas.Font.Height := 18; //Schriftgrösse
    canvas.textout(296+i*16,32,a[i]);
if timer1.enabled= true then mediaplayer1.play else mediaplayer1.stop;
end;

Sir Rufo 19. Nov 2013 00:20

AW: TTimer 2 Aktivieren
 
Indem du in deinem Code
Delphi-Quellcode:
Timer2.Enabled := True;
schreibst?

Ist aber nur eine vage Vermutung :roll:

Natcree 19. Nov 2013 00:23

AW: TTimer 2 Aktivieren
 
ja muss aber abwarten bis Canvas fertig ist. weil zum text.out ja noch der mediaplayer läuft und stopt wenn canvas.textout fertig ist. Der Player wird dann auch im timer2 benötigt.

Sir Rufo 19. Nov 2013 00:26

AW: TTimer 2 Aktivieren
 
Erwartest du, das beim Abarbeiten der Timer-Methode (also die, welche beim Timer-Event aufgerufen wird - was ja nur passiert, wenn der Timer eingeschaltet ist - also Enabled ist True), hier
Delphi-Quellcode:
if timer1.enabled= true then
irgendetwas sinnvolles?

Oder ist das nur zur Sicherheit, falls mal doch ein Bit kippt?

Natcree 19. Nov 2013 00:39

AW: TTimer 2 Aktivieren
 
der Code sollte so aussehen das der Timer ein wort in Buchstaben splittet und einzeln nacheinander zusammensetzt. Zudem wird ein sound ausgegeben der bei jedem Buchstaben der einrückt zu hören ist.
Gibt es ein resulttyp den ich in den codeschnipsel mit Einbauen kann?
Denn nur wenn canvas fertig ist kann ich die nächste zeile genauso über canvas ausgeben.
Abwarten muss ich auch wegen der Sound ausgabe weil diese mit dem letzten string beendet wird. und der Mediaplayer erst dann wieder zeitgleich abspielt.

Vorerst habe ich den start der Timer mit einem Delay(2500)dazwischen begrenzt.
Habe ich aber einen Text der länger als 2500 milisek. braucht gibt es probleme.
und diesen möchte ich aus dem Weg gehen.

Volker Z. 19. Nov 2013 01:04

AW: TTimer 2 Aktivieren
 
Hallo,

Zitat:

der Code sollte so aussehen das der Timer ein wort in Buchstaben splittet und einzeln nacheinander zusammensetzt. Zudem wird [...]
Nö, wenn dann sollte der Timer die - zuvor gesplitteten - Buchstaben zu einem Wort zusammensetzen - und nicht mehr (also Enabled = False wenn damit fertig). Wenn die die Soundausgabe länger dauert, als der Timer dafür benötigt die Buchstaben zusammenzusetzten, dann schau mal in die OH Stichwort: TMediaplayer.OnNotify (wenn Abspielen der Sounddatei fertig, dann splitte die nächste Zeichenkette, lade die Sounddatei, starte den Timer neu).

Gruß

Volker Z. 19. Nov 2013 03:30

AW: TTimer 2 Aktivieren
 
Hallo,

mal so als Ansatz (leider kann ich noch immer nicht wirklich erkennen was Du da so vor hast)
Delphi-Quellcode:
procedure TForm2.Timer1Timer (Sender : TObject);
begin
  SetzeBuchstabenZusammen;
  Timer1.Enabled := not SindAlleBuchstabenBereitsZusammengesetzt;

  if Timer1.Enabled then
    Exit;
 
  if GibtEsNochBuchstabenInDerListeDieZusammengesetztWerdenMüssen then
    begin
      ZerlegeBuchstabenInEinzelneZeichen;
      LadeEntsprechendeSoundDateiUndSpielSieAb;
      Timer1.Enabled := True
    end
end;

procedure TForm2.MediaPlayer1Notify (Sender : TObject);
begin
  if not SoundAbgespielt then
  // vielleicht if MediaPlayer1.Position < MediaPlayer1.Length then {oder so ähnlich}
    Exit;
   
  if Timer1.Enabled then
  // kann ja sein, dass das Zusammensetzen der Buchstaben länger dauer als das abspielen der Sounddatei
    Exit;
 
  if GibtEsNochBuchstabenInDerListeDieZusammengesetztWerdenMüssen then
    begin
      ZerlegeBuchstabenInEinzelneZeichen;
      LadeEntsprechendeSoundDateiUndSpielSieAb;
      Timer1.Enabled := True
    end
end;
Das optimieren kannst Du sicherlich selbst vornehmen.

Gruß

musicman56 19. Nov 2013 07:01

AW: TTimer 2 Aktivieren
 
Hallo,

es laufen wohl niemals zwei Timer gleichzeitig. Die einzelnen timergesteuerten Ereignisse können also nacheinander vom gleichen Timer erledigt werden. Damit hast du dann auch keine Probleme mit Überschneidungen, die ich zwangsläufig kommen sehe, wenn du mit dem Mediaplayer (verschiedene??) Sounds abspielen möchtest. Z.B. hast du unterschiedliche Ladezeiten bei unterschiedlicher Hardware. Das gibt zwangsläufig irgendwann mal Brühe :?

Delphi-Quellcode:
procedure TForm1.ErsterTimerEvent(Sender: TObject);
begin
  Timer.Tag := Timer.Tag + 1; // Tag als Hilfsmittel setzen, damit man jederzeit weiß, was der Timer gerade macht
  ...irgendwas tun
  if Timer.Tag > ??? then begin
    Timer.Enabled := false;
    Timer.OnTimer := ZweiterTimerEvent;
    Timer.Interval := 2000;
    Timer.Enabled := true;
  end;
end;

procedure TForm1.ZweiterTimerEvent(Sender: TObject);
begin
  Timer.Tag := Timer.Tag + 1;
   // ...irgendwas tun, z.B. den Mediaplayer starten, der dann das Tag des Timers neu setzt, wenn er FERTIG ist
   // ...Wenn Timer.Tag > "MediaPlayer ist fertig Tag" then TimerStart, TimerStop oder was sonst auch immer
end;

procedure TForm1.TimerStart;
begin
  Timer.Enabled := false;
  Timer.Tag := 0;
  Timer.Interval := 1000;
  Timer.OnTimer := ErsterTimerEvent;
  Timer.Enabled := true;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr.
Seite 1 von 2  1 2      

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