Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Timer enablen (https://www.delphipraxis.net/143079-timer-enablen.html)

DeddyH 9. Nov 2009 15:24

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.

blauweiss 9. Nov 2009 16:05

Re: Timer enablen
 
Zitat:

Zitat von DeddyH
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.

Im Gegenteil, Application.ProcessMessages ist so ziemlich das Gefährlichste, wenn es unbedarft "einfach mal so" eingesetzt wird.
Es ist mir ein Rätsel, warum diese "Lösung" für reine Anzeigeaktualisierungsprobleme hier im Forum so gerne vorgeschlagen wird.

blauweiss

p80286 9. Nov 2009 16:21

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:

Zitat von DeddyH
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.

OK daran hatte ich nicht gedacht!

[quote="blauweiss"]
Zitat:

Zitat von DeddyH
Im Gegenteil, Application.ProcessMessages ist so ziemlich das Gefährlichste, wenn es unbedarft "einfach mal so" eingesetzt wird.
Es ist mir ein Rätsel, warum diese "Lösung" für reine Anzeigeaktualisierungsprobleme hier im Forum so gerne vorgeschlagen wird.

blauweiss

Was, bitte, ist daran gefährlich? Überflüssig, ja, gefährlich???

Bitte, ich bin für jede Belehrung dankbar.

Gruß
K-H

blauweiss 9. Nov 2009 16:40

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:

Zitat von blauweiss
Zitat:

Zitat von DeddyH
Im Gegenteil, Application.ProcessMessages ist so ziemlich das Gefährlichste, wenn es unbedarft "einfach mal so" eingesetzt wird.
Es ist mir ein Rätsel, warum diese "Lösung" für reine Anzeigeaktualisierungsprobleme hier im Forum so gerne vorgeschlagen wird.

blauweiss

Was, bitte, ist daran gefährlich? Überflüssig, ja, gefährlich???

Bitte, ich bin für jede Belehrung dankbar.

Gruß
K-H


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

simmi 9. Nov 2009 16:46

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;

DeddyH 9. Nov 2009 16:52

Re: Timer enablen
 
Ich könnte mir vorstellen, dass dem Timer-Ereignis keine Methode zugewiesen ist.

p80286 9. Nov 2009 17:01

Re: Timer enablen
 
Zitat:

Zitat von blauweiss

dafür bietet sich z.B. aControl.Paint oder aControl.Refresh an.

Da ich damit (in Schleifen, langen Verarbeitungsabfolgen) bisher keinen Erfolg hatte....

Zitat:

Zitat von blauweiss

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.

Dem wäre dann nichts mehr hinzuzufügen?!
Gruß
K-H

Reap3r 10. Nov 2009 20:47

Re: Timer enablen
 
hmmm...mann mann mann

ich bekomms net raus!
sitze schon soo lange daran, finde aber keinen Fehler!

Bitte helft mir.

Sir Rufo 10. Nov 2009 21:40

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:
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;
BreakPoint -> Haltepunkt -> Wird das Programm in der Delphi-IDE mit F9 gestartet, dann hält es genau an dieser Stelle an

Zitat:

Zitat von DeddyH
Ich könnte mir vorstellen, dass dem Timer-Ereignis keine Methode zugewiesen ist.

Tja, aber dazu äussert er sich ja nicht ... da können wir wohl auch nicht helfen.

Reap3r 11. Nov 2009 13:09

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...


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr.
Seite 2 von 3     12 3      

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