Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Panel per Timer aktivieren (https://www.delphipraxis.net/102865-panel-per-timer-aktivieren.html)

Lill Jens 6. Nov 2007 09:42


Panel per Timer aktivieren
 
Moin DP'ler ;)

Ich bräuchte mal wieder euere Hilfe!

Ich hab zwei Panel die nacheinander gestartet werden:

Panel(1) starten - nach 21 Sekunden deaktivieren - Panel (2) starten- nach 10 Sekunden deaktivieren - Panel(1) starten...

das Ganze soll immer so weiter gehen...ich dachte ich realisiere das mit zwei Timern aber wie stell ich das interval?

Delphi-Quellcode:

procedure TForm.Timer1Timer(Sender: TObject);
begin
Timer1.Interval (21000);
Panel1.Visible:= true;
Timer2.Enabled:= true; //Startet dann nach 21 sec Timer2 ?
end;

procedure TForm.Timer2Timer(Sender: TObject);
begin
Timer2.Interval (10000);
Panel2.Visible:= true;
Timer1.Enabled:= true; //Startet dann nach 10 sec Timer1 ?
end;
thx.4.cmts


Lill Jens :coder2:

DeddyH 6. Nov 2007 10:21

Re: Panel per Timer aktivieren
 
Delphi-Quellcode:
procedure TForm.Timer1Timer(Sender: TObject);
begin
  // im OI eingestellt: Timer1.Interval (21000);
  Panel1.Visible:= true;
  Timer2.Enabled:= true; //umschalten
  Timer1.Enabled:= false;
end;

procedure TForm.Timer2Timer(Sender: TObject);
begin
  // im OI eingestellt: Timer2.Interval (10000);
  Panel2.Visible:= true;
  Timer1.Enabled:= true; //umschalten
  Timer2.Enabled:= false;
end;
Oder hab ich das falsch verstanden?

oldmax 6. Nov 2007 12:12

Re: Panel per Timer aktivieren
 
Hi
Zitat:

das Ganze soll immer so weiter gehen...ich dachte ich realisiere das mit zwei Timern aber wie stell ich das interval?
Einfach mit
Delphi-Quellcode:
Timer1.Interval:=21000;
oder wie bereits geschrieben im OI
Gruß oldmax

Lill Jens 6. Nov 2007 13:02

Re: Panel per Timer aktivieren
 
Mhh des geht noch net so wie ich des will^^

Das Problem ist das auf dem Panel(1) ein Video gezeigt wird. Wenn Panel(2) kommt soll das Video auf stop gehn und erst wieder starten wenn Panel(1) wieder aktive wird.

Delphi-Quellcode:
procedure TForm.Timer1Timer(Sender: TObject);
begin
  MediaPlayer1.Play;
  Panel2.Visible:= false;
  Panel1.Visible:= true;
  MediaPlayer1.Stop;
  Timer2.Enabled:= true;
  Timer1.Enabled:= false;
end;

procedure TForm.Timer2Timer(Sender: TObject);
begin

  Panel2.Visible:= true;
  Panel1.Visible:= false;
  Timer1.Enabled:= true;
  Timer2.Enabled:= false;
end;
Es geht allerdings nicht. das video wird nicht erneut abgespielt.

stifflersmom 6. Nov 2007 13:06

Re: Panel per Timer aktivieren
 
Zitat:

Zitat von Lill Jens
Mhh des geht noch net so wie ich des will^^

Das Problem ist das auf dem Panel(1) ein Video gezeigt wird. Wenn Panel(2) kommt soll das Video auf stop gehn und erst wieder starten wenn Panel(1) wieder aktive wird.

Delphi-Quellcode:
procedure TForm.Timer1Timer(Sender: TObject);
begin
  MediaPlayer1.Play;
  Panel2.Visible:= false;
  Panel1.Visible:= true;
  MediaPlayer1.Stop;
  Timer2.Enabled:= true;
  Timer1.Enabled:= false;
end;
Es geht allerdings nicht. das video wird nicht erneut abgespielt.

Für mich ist dieses
Delphi-Quellcode:
  MediaPlayer1.Play;
...
  MediaPlayer1.Stop;
innerhalb eines Timers sehr verdächtig, sieht aus wie anschalten und sofort wieder ausschalten!

Moin

Lill Jens 6. Nov 2007 13:17

Re: Panel per Timer aktivieren
 
Zitat:

Für mich ist dieses
Delphi-Quellcode:
  MediaPlayer1.Play;
...
  MediaPlayer1.Stop;
innerhalb eines Timers sehr verdächtig, sieht aus wie anschalten und sofort wieder ausschalten!

Moin
Yeah cool du hast recht. Jetzt zickt der Player nur noch am Anfang rum, wenn ich autoopen auf false setzte.

Thx Stifflersmom

Real_Thunder 6. Nov 2007 13:24

Re: Panel per Timer aktivieren
 
Also ich weiß nicht ob ich das richtig verstanden habe.....

Wenn Panel 1 An ist, dann:
panel2 ausmachen, Video abspielen, 21 sek warten,
video stoppen, panel2 anmachen, panel1 ausmachen, 10 sekunden warten,
So habe ich es nun verstanden....

najaa hier mal mein entwurf dazu:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if panel1.Enabled then begin
  mediaplayer1.Play;
  timer1.Interval:=21000;
  panel1.Enabled:=false;
  panel2.Enabled:=true;
end else begin
  mediaplayer1.stop;
  timer1.Interval:=10000;
  panel1.Enabled:=true;
  panel2.Enabled:=false;
end;
* Ungetested *

Nuclear-Ping 6. Nov 2007 15:08

Re: Panel per Timer aktivieren
 
Warum nicht ohne Timer? Zum Beispiel in nem Button-Click (ungetestet):
Delphi-Quellcode:
type
  TRunState = (rsIdle, rsFirst, rsSecond);
var
  PanelState: Byte;
  RunState: TRunState;
  StartMs,
  CurrentMs,
  TargetMs: Cardinal;
begin
  StartMs := GetTickCount;
  RunState := rsFirst;
  while AbbruchBedingungNichtErfuellt do
    begin
      case RunState of
        rsFirst:
          begin
            StartMs := GetTickCount;
            MediaPlayer1.Play;
            Panel2.Visible:= false;
            Panel1.Visible:= true;
            TargetMs := 21000;
            PanelState := 2;
            RunState := rsIdle;
          end;

        rsSecond:
          begin
            StartMs := GetTickCount;
            MediaPlayer1.Stop;
            Panel2.Visible:= true;
            Panel1.Visible:= false;
            TargetMs := 10000;
            PanelState := 1;
            RunState := rsIdle;
          end;

        rsIdle:
          begin
            CurrentMs := GetTickCount;
            if (CurrentMs - StartMs >= TargetMs) then
              begin
                StartMs := GetTickCount;
                case PanelState of
                  1: RunState := rsFirst;
                  2: RunState := rsSecond;
                end;
              end;
          end;
      end;

      Application.ProcessMessages; // oder ähnliches
    end;
end;

grenzgaenger 6. Nov 2007 22:27

Re: Panel per Timer aktivieren
 
sag mal, weshalb nimmste nicht nur einen timer? das ganze sieht in etwa wie folgt aus
Delphi-Quellcode:
timer.enabled := false; //zuerst abschalten;
  if timer.Interval = 21000 then
  begin
    timer.interval := 10000;
    panel1.visible := false; // aktiv bei 21 sekunden
    panel2.visible := true; //aktiv bei 10 sekunden
  end
  else
  begin
    timer.interval := 21000;
    panel1.visible := true; //aktiv bei 21 sekunden
    panel2.visible := false; //aktiv bei 10 sekunden;
  end;
  //noch machen wozu du sonst noch lust hast
  timer.enabled := true; //zum schluss timer wieder einschalten
end;
das ist der ganze code... :-)


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