Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem in der Procedur: Meldungsfenster kommt immer wieder (https://www.delphipraxis.net/142202-problem-der-procedur-meldungsfenster-kommt-immer-wieder.html)

Fussel9 23. Okt 2009 16:10


Problem in der Procedur: Meldungsfenster kommt immer wieder
 
Hi hab folgendes Problem:

Delphi-Quellcode:
procedure TFLemon.TLemonTimer(Sender: TObject);
var Editor: TEditor;
begin
if a <> 1 then
  begin
    LLizenz.Visible:=True;
    a:=1;
  end
else
  begin
    if MessageDlg('Willst du selbst eine Grußkarte erstellen?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
    begin
      Close;
      Editor:=TEditor.create(self);
      Editor.Show;
    end;
  end;
end;
diese Procedur ruft sich immer wieder auf...

Klaus01 23. Okt 2009 16:15

Re: Problem in der Procedur: Meldungsfenster kommt immer wie
 
Hallo,

wozu gehöhrt denn "a"?
Wo hast Du es definiert?

Grüße
Klaus

SubData 23. Okt 2009 16:17

Re: Problem in der Procedur: Meldungsfenster kommt immer wie
 
Diese Prozedur gehört zu einem Timer.
Timer haben die Angewohnheit die Prozedur immer wieder auszuführen.
Manche könnten meinen, dass Timer genau dafür da sind ;-)

Fussel9 23. Okt 2009 16:19

Re: Problem in der Procedur: Meldungsfenster kommt immer wie
 
Zitat:

Zitat von SubData
Diese Prozedur gehört zu einem Timer.
Timer haben die Angewohnheit die Prozedur immer wieder auszuführen.
Manche könnten meinen, dass Timer genau dafür da sind ;-)

aber sieh doch mal genauer hin:::>
Delphi-Quellcode:
CLOSE;
@Klaus -> Wird in FormCreate auf Null gesetzt globale Integer Variable

himitsu 23. Okt 2009 16:28

Re: Problem in der Procedur: Meldungsfenster kommt immer wie
 
der Timer stoppt erst, wenn die Form geschlossen wird.

also wenn man auf "JA" drückt.

wärend der MessageDialog angezeigt wird, werden auch WindowsBotschaften verarbeitet und demnach wird auch wärend dieser Zeit alle 3 Sekunden die Timerprozedur aufgerufen-

Fussel9 23. Okt 2009 16:30

Re: Problem in der Procedur: Meldungsfenster kommt immer wie
 
Und was kann ich dagegen tun?

Uwe Raabe 23. Okt 2009 16:35

Re: Problem in der Procedur: Meldungsfenster kommt immer wie
 
Zitat:

Zitat von Fussel9
Und was kann ich dagegen tun?

Delphi-Quellcode:
procedure TFLemon.TLemonTimer(Sender: TObject);
var Editor: TEditor;
begin
if a <> 1 then
  begin
    LLizenz.Visible:=True;
    a:=1;
  end
else
  begin
    TLemonTimer.Enabled := false; // verhindert ein erneutes Auslösen
    if MessageDlg('Willst du selbst eine Grußkarte erstellen?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
    begin
      Close;
      Editor:=TEditor.create(self);
      Editor.Show;
    end;
  end;
end;

Frederika 23. Okt 2009 17:13

Re: Problem in der Procedur: Meldungsfenster kommt immer wie
 
Fussel, was hast Du eigentlich genau vor? Es sieht aus wie eine künstliche Warteschleife, bevor der Nutzer die eigentliche Funktion nutzen darf, richtig?

Warum dann nicht einfach die eigentliche Funktion deaktivieren (...Enabled := False) und im Timer dann aktivieren und den Timer natürlich ausschalten. Wäre das nicht geradliniger und würde keine globalen Variablen verbrauchen?

Fussel9 25. Okt 2009 15:39

Re: Problem in der Procedur: Meldungsfenster kommt immer wie
 
Also, erst mal ein dickes :thumb:
für eure Hilfe :dp:


aber....
die offensichtlichste Lösung hatte ich mal wieder übersehn...:
Zitat:

was hast Du eigentlich genau vor?
Es handelt sich dabei un ein fenster, das drei Sekunden lang angezeigt wird bevor man das Programm benutzen kann, das ist schon richtig...
Was macht man denn nur - wenn man 3 sekunden nur dieses Fenster sehn soll...

klar: statt in den Timer reinzuschreiben(der sich auf dem Fenster befindet das aufgerufen wird) und den zu Enablen - Disablen schreiben wir es da hin, wo das fenster aufgerufen wird!
Statt Form2.Show;
Form2.ShowModal;
Und schon sind alle meine Probleme gelösst , denn bis 'Form2' wieder geschlossen wird geht es nicht weiter.

im Klar-/Quell- Text:--> UMain
Delphi-Quellcode:
    self.hide;
    Form2:=TForm2.Create(self);
    Form2.ShowModal;
        if MessageDlg('Willst du selbst eine Grußkarte erstellen?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
          begin
            Editor:=TEditor.create(self);
            Editor.Show;
          end
        else
        begin
          Application.terminate;
        end;
    end;
--> UForm2
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
begin
a:=0;
end;

procedure TForm2.TFormTimer(Sender: TObject);
begin
if a <> 1 then
  begin
    Label.Visible:=True;
    a:=1;
  end
else
  begin
    Close;
  end;
end;
Und das ganze mit der globalen variable habe ich ja nur, weil ich nicht weiß wie ich sonst abfragen soll, ob die Prozedur schon einmal durchlaufen wurde...


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