AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TTimer 2 Aktivieren

Ein Thema von Natcree · begonnen am 18. Nov 2013 · letzter Beitrag vom 19. Nov 2013
Antwort Antwort
Seite 1 von 2  1 2      
Natcree

Registriert seit: 5. Mär 2013
502 Beiträge
 
Delphi 7 Enterprise
 
#1

TTimer 2 Aktivieren

  Alt 18. Nov 2013, 23:48
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;
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

AW: TTimer 2 Aktivieren

  Alt 19. Nov 2013, 01:05
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ß
Volker Zeller
  Mit Zitat antworten Zitat
Natcree

Registriert seit: 5. Mär 2013
502 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: TTimer 2 Aktivieren

  Alt 19. Nov 2013, 01:17
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;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: TTimer 2 Aktivieren

  Alt 19. Nov 2013, 01:20
Indem du in deinem Code Timer2.Enabled := True; schreibst?

Ist aber nur eine vage Vermutung
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Natcree

Registriert seit: 5. Mär 2013
502 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: TTimer 2 Aktivieren

  Alt 19. Nov 2013, 01:23
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: TTimer 2 Aktivieren

  Alt 19. Nov 2013, 01:26
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 if timer1.enabled= true then irgendetwas sinnvolles?

Oder ist das nur zur Sicherheit, falls mal doch ein Bit kippt?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Natcree

Registriert seit: 5. Mär 2013
502 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: TTimer 2 Aktivieren

  Alt 19. Nov 2013, 01:39
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.
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#8

AW: TTimer 2 Aktivieren

  Alt 19. Nov 2013, 02:04
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 Zeller

Geändert von Volker Z. (19. Nov 2013 um 02:12 Uhr) Grund: Wortstellung korrigiert
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#9

AW: TTimer 2 Aktivieren

  Alt 19. Nov 2013, 04:30
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ß
Volker Zeller
  Mit Zitat antworten Zitat
musicman56
(Gast)

n/a Beiträge
 
#10

AW: TTimer 2 Aktivieren

  Alt 19. Nov 2013, 08:01
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;

Geändert von musicman56 (19. Nov 2013 um 10:54 Uhr) Grund: Bemerkung in ZweiterTimerEvent
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 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