![]() |
Timer enablen
Hi Leute!
Ich habe ein genz einfaches Problem. Undzwar habe ich in einem Programm mehrere Timer. Diese habe ich im Objektinspektor auf nicht enabled gestellt. Wenn ich nun einen Button drücke sollen sie enabled werden! Ich dachte immer, das ginge, doch es funktioniert nich! Also im Button steht dann:
Delphi-Quellcode:
Was mache ich falsch?
Form3.timer1.enabled:= true;
|
Re: Timer enablen
Ja, muss aber was anderes sein.
|
Re: Timer enablen
Hi,
was funktioniert denn nicht? Läuft Dein Timer nicht los? Gibt der Compiler eine Fehlermeldung aus? Grüße Klaus |
Re: Timer enablen
Achso ja sry hab ich vergessen^^
Der Timer wird garnicht erst aktiviert! |
Re: Timer enablen
Zitat:
Zeige doch mal den Code der ausgeführt werden soll wenn der Timer aktiviert ist. Wie groß ist das Intervall? Grüße Klaus |
Re: Timer enablen
Wenn der Code in einer Methode des selben Formulares steht, lass mal den Formularbezeicher weg.
|
Re: Timer enablen
Der code sieht so aus:
Delphi-Quellcode:
auf form3 ist ein Image und ein Label zu sehen!(Image1/L1)
procedure TForm3.Timer1Timer(Sender: TObject);
begin if form3.L1.Visible = true then begin form3.L1.visible := false; form3.Image1.Visible:= false; form3.Image2.Visible:= true; form3.L2.Visible:= true; end; end; Diese sind auf visible:= true eingestellt. Der Timer soll diese nun wenn zu sehen visible:= false schalten und ein anderes Image und ein anderes Label visible:= true schalten.(Image2/L2). Das intervall des Timers ist auf 9 sekunden festgelegt, damit das erste Image bzw. Label 9 Sekunden zu sehen ist, und dann umgeschaltet wird. |
Re: Timer enablen
.. ändert sich etwas wenn Du es so umschreibst?
Delphi-Quellcode:
Ansonsten stellen mal Deine Button.click Methode
procedure TForm3.Timer1Timer(Sender: TObject);
begin if L1.Visible then begin L1.visible := false; Image1.Visible:= false; Image2.Visible:= true; L2.Visible:= true; end; end; hier ein. Grüße Klaus |
Re: Timer enablen
Delphi-Quellcode:
man muß dem Programm auch die Chance geben Änderungen anzuzeigen.
procedure TForm3.Timer1Timer(Sender: TObject);
begin if L1.Visible then begin L1.visible := false; Image1.Visible:= false; Image2.Visible:= true; L2.Visible:= true; end; application.processmessages; // <<<<<<<< Erweitern!! end; Und mit F4 (Debugger)in die Timer-Methode gehen ob sie überhaupt aufgerufen wird. Gruß K-H |
Re: Timer enablen
Was Bringt mir application.processmessages;?
bzw. wie benutze ich es? Und Klaus01 das verändert leider nichts! |
Re: Timer enablen
Ich glaube nicht, dass Application.ProcessMessages die Lösung ist, es handelt sich ja nicht um eine langlaufende Schleife, die den Rest des Programms blockiert.
|
Re: Timer enablen
Zitat:
Es ist mir ein Rätsel, warum diese "Lösung" für reine Anzeigeaktualisierungsprobleme hier im Forum so gerne vorgeschlagen wird. blauweiss |
Re: Timer enablen
Wenn man an der anzeige "herum fummelt" dan müssen diese änderungen ja auch irgendwie zur Anzeige kommen.
Warum sollte diese Anzeigeänderung dann damit nicht durchgeführt werden? Zitat:
[quote="blauweiss"] Zitat:
Bitte, ich bin für jede Belehrung dankbar. Gruß K-H |
Re: Timer enablen
[quote="p80286"]Wenn man an der anzeige "herum fummelt" dan müssen diese änderungen ja auch irgendwie zur Anzeige kommen.
Warum sollte diese Anzeigeänderung dann damit nicht durchgeführt werden? dafür bietet sich z.B. aControl.Paint oder aControl.Refresh an. Zitat:
Gefährlich: Mit Application.ProcessMessages wird quasi Parallelität ermöglicht. Folgendes Beispiel: In einem ButtonClick wird eine komplexe Berechnung auf dem "aktuellen Datensatz" durchgeführt. Weil während der Berechnung die Anwendung scheinbar eingefroren ist, wird jetzt z.B. in einer Schleife Application.ProcessMessages aufgerufen. Damit wird aber die Windows-Nachrichtenschleife abgearbeitet ! Der Anwender kann den Button ein weiteres Mal klicken -> die gleiche Berechnung startet ein weiteres Mal, während noch die vorherige läuft. Oder der Anwender ruft den Menuepunkt "Datei entfernen" auf -> der Datensatz wird entfernt, auf dem "gleichzeitig" die Berechnung läuft. Application.ProcessMessages kann sehr nützlich sein, aber man muß sich bewußt sein, daß bestimmte Benutzeraktionen dann ausgeschlossen werden müssen. Grüße, blauweiss |
Re: Timer enablen
Hallo,
also ich habe einfach einmal Deinen Quelltext genommen und ausprobiert. Bei mir funktioniert es ohne jedes Problem. Hast Du einmal geprüft, ob Dein Problem eine andere Ursache haben könnte?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin timer1.Enabled:=true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin if label1.Visible = true then begin label1.visible := false; Image1.Visible:= false; Image2.Visible:= true; label2.Visible:= true; end; end; |
Re: Timer enablen
Ich könnte mir vorstellen, dass dem Timer-Ereignis keine Methode zugewiesen ist.
|
Re: Timer enablen
Zitat:
Zitat:
Gruß K-H |
Re: Timer enablen
hmmm...mann mann mann
ich bekomms net raus! sitze schon soo lange daran, finde aber keinen Fehler! Bitte helft mir. |
Re: Timer enablen
Setz doch mal ein ShowMessage rein, dann siehst du ob der Timer losläuft oder nicht!
(auf die Frage mit dem Debugger hast du ja schließlich nicht geantwortet)
Delphi-Quellcode:
BreakPoint -> Haltepunkt -> Wird das Programm in der Delphi-IDE mit F9 gestartet, dann hält es genau an dieser Stelle an
procedure TForm3.Timer1Timer(Sender: TObject);
begin ShowMessage( 'Ich bin Timer1, ich laufe jetzt los :-)' ); if L1.Visible then // <--- Hier mal alternativ zum ShowMessage einen Breakpoint setzen begin L1.visible := false; Image1.Visible:= false; Image2.Visible:= true; L2.Visible:= true; end; end; Zitat:
|
Re: Timer enablen
Also...
nach einigem Probieren hab ich herausgefunden, dass der timer erst anspringt, wenn mann ihn zum 2. mal über den Button aktiviert. Ich frag mich nur, warum er es beim ersten mal nicht tut... |
Re: Timer enablen
Weil du irgend wo in deinem Quelltext einen Fehler hast.
Da wir nicht wissen was in deinem Programmcode vor sich geht, polieren wir fleissig die Gaskugel. ;) :glaskugel: |
Re: Timer enablen
Ahh, habs raus!
Das Problem lag daran, dass die Labels und images auf einer anderen Form waren, ide ich durch button click mit showmodal aufrufe. Allerdings stand das showmodal vor dem aktivieren des Timers! Habe einfach die Reihenfolge verändert, jetzt gehts. |
Re: Timer enablen
Niemals auf true oder false prüfen!
besser so:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin if Label1.Visible {= True} then // { } => Kommentar, wird also vom Compiler ignoriert begin Label1.visible := False; Image1.Visible:= False; Image2.Visible:= True; Label2.Visible:= True; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 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