AGB  ·  Datenschutz  ·  Impressum  







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

Timer wird Blockiert

Ein Thema von Int3g3r · begonnen am 28. Jun 2019 · letzter Beitrag vom 1. Jul 2019
Antwort Antwort
Seite 1 von 2  1 2      
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Timer wird Blockiert

  Alt 28. Jun 2019, 10:01
Wenn ich das richtig verstehe, dann soll die Progressform nach einer gewissen Zeit geschlossen werden, wenn eine Aktion im MainForm beendet ist. Aber nicht sofort nach Ende, sondern z.B. nach 2 Sekunden, um dem User noch Zeit zu geben, eine Nachricht "Fertig" zu lesen? Oder so ähnlich?

Das würde ich dann so machen:

Delphi-Quellcode:
TfrmMain.DoSomething;
begin
  // ...
  // ... operation finished ...
  FormFtpprogress.progressTimer.Enabled := True;
end;

procedure TFormFtpprogress.progressTimerTimer(Sender: TObject);
begin
   progressTimer.Enabled := false;
   Close; // ProgressForm schließen
end;
Genau das Ziel hast du richtig verstanden.

Wenn möglich möchte ich aber eine Timer-Interaktion im DoSomething vermeiden.
Der Timer soll starten wenn das FormProgress angezeigt wird. Daher möchte ich den Timer auch im FormProgress plazieren. Alle Timer-Interaktionen sollten auch auf dem FormProgress stattfinden.

Im Prinzip möchte ich im DoSomething nur warten bis das FormProgress geschlossen/auf Hide gesetzt wurde. Danach den DoSomehting weiter ausführen.

Wie kann ich im DoSomething überprüfen ob frmProgress auf hide oder show gesetzt ist ?

Danke für die Hilfe.

Geändert von Int3g3r (28. Jun 2019 um 10:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Timer wird Blockiert

  Alt 28. Jun 2019, 10:09
Im Prinzip möchte ich im DoSomething nur warten bis das FormProgress geschlossen wurde. Danach den DoSomehting weiter ausführen.

Danke für die Hilfe.
Warum fragst du im Timer dann nicht genau diesen Status ab?

Delphi-Quellcode:
//Nur als Beispiel!!
procedure TForm1.Button2Click(Sender: TObject);
begin
  Form2.show;
  Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if not Form2.Visible then
  begin
    //Es wurde geschlossen oder ausgeblendet
    Timer1.Enabled := False;
  end;
end;
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
902 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Timer wird Blockiert

  Alt 28. Jun 2019, 10:22
Wenn die Ausführung der Aktion der MainForm unterbrochen werden soll/muss, bis der Timer abgelaufen ist bzw. die Progressform geschlossen wurde, dann könnte das mit ShowModal gehen.

Also so:

Delphi-Quellcode:
// in MainForm
procedure DoSomething;
begin
  foo; // machwas
  ProgressForm.ShowModal; // Anzeige der ProgressForm und warten
  bar; // mach noch was
end;

// ProgressForm
procedure TFormFtpprogress.FormShow(Sender: TObject);
begin
   progressTimer.Enabled := true;
end;

procedure TFormFtpprogress.progressTimerTimer(Sender: TObject);
begin
   progressTimer.Enabled := false;
   // ggf. ModalResult := ... zur Rückgabe eines Wertes an MainForm
   Close; // ProgressForm schließen
end;
Alternativ in der Schleife in deinem ersten Posting ein Application.ProcessMessages einbauen. Aber dann wird es unter Umständen hakelig mit der GUI. Denn dann musst du sicherstellen, dass der User zwischendurch nichts "gefährliches" anklicken darf.
Being smart will count for nothing if you don't make the world better. You have to use your smarts to count for something, to serve life, not death.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Timer wird Blockiert

  Alt 28. Jun 2019, 10:46
Hallo,
was du nutzen könntest, ist semimodales Verhalten.
Such mal hier im Forum nach dem Wort.
Ich hatte da vor ein paar Jahren was dazu geschrieben.

Ansonsten verstehe die Frage nicht.
Wenn du willst, dass dein Programm erst nach einer gewissen Zeit schließt,
nimm ein modales Progressfenster (wie du schon geschrieben hattest),
dann deinen Timer und fange das Close in OnCloseQuery ab.
In der OnTimerTimer-Methode machst du dann deine ganzen Arbeiten.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Timer wird Blockiert

  Alt 28. Jun 2019, 11:19
[/DELPHI]

Alternativ in der Schleife in deinem ersten Posting ein Application.ProcessMessages einbauen. Aber dann wird es unter Umständen hakelig mit der GUI. Denn dann musst du sicherstellen, dass der User zwischendurch nichts "gefährliches" anklicken darf.
Was relativ einfach wäre mit Form1.enabled := False bzw. Form1.enabled := True;
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Timer wird Blockiert

  Alt 28. Jun 2019, 11:33
Vielen Dank für die Hilfe!

@Gausi Application.ProcessMessages Das habe ich gesucht vielen Dank!

Es funktioniert nun. Quelltext sieht wie folgt aus:

Delphi-Quellcode:
//frmMain

while FormFtpprogress.Visible = true do // Warte auf Timer
begin
   if FormFtpprogress.canHide = true then
         FormFtpprogress.Hide;
   Application.ProcessMessages;
end;
Delphi-Quellcode:
//frmProgress

procedure TFormFtpprogress.FormShow(Sender: TObject);
begin
   canHide := false; //public member
   progressTimer.Enabled := true;
end;

procedure TFormFtpprogress.progressTimerTimer(Sender: TObject);
begin
   canHide := true;
   progressTimer.Enabled := false;
end;
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#7

AW: Timer wird Blockiert

  Alt 28. Jun 2019, 12:26
Da das jetzt klappt, entferne bitte noch den Vergleich auf True. Sowas macht man nicht

while FormFtpprogress.Visible = true do // Warte auf Timer
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Timer wird Blockiert

  Alt 28. Jun 2019, 14:38
Da das jetzt klappt, entferne bitte noch den Vergleich auf True. Sowas macht man nicht

while FormFtpprogress.Visible = true do // Warte auf Timer
Also für mich ist das Gegenteil der fall. für mich ist es nicht eindeutig wenn auf "nichts" geprüft wird.
while FormFtpprogress.Visible do Aber Danke für den Tipp vielleicht sollte ich mich da mal umgewöhnen.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

AW: Timer wird Blockiert

  Alt 28. Jun 2019, 14:41
https://www.delphipraxis.net/57121-u...t-boolean.html

https://softwareengineering.stackexc...al-out-of-true


mkinzler und Luckie können da bestimmt mehr drüber erzählen.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#10

AW: Timer wird Blockiert

  Alt 28. Jun 2019, 15:15
Da das jetzt klappt, entferne bitte noch den Vergleich auf True. Sowas macht man nicht

while FormFtpprogress.Visible = true do // Warte auf Timer
Also für mich ist das Gegenteil der fall. für mich ist es nicht eindeutig wenn auf "nichts" geprüft wird.
while FormFtpprogress.Visible do Aber Danke für den Tipp vielleicht sollte ich mich da mal umgewöhnen.
Es wird aber nicht auf nichts geprüft.

Die Schleife läuft solange, solange alles zwischen while und do wahr ist.
FormFtpprogress.Visible ist entweder wahr (true) oder falsch (false). Das reicht für eine Abfrage vollkommen aus.

Bei Deiner Variante fragst Du immer sowas in der Art: while true = true do Weil true aber bereits true ist, muss Du es nicht noch mit true vergleichen.
Andersherum fragst Du sowas in der Art: while false = true do Da false aber nie true ist, erübrigt sich der Vergleich von false mit true.
  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 14:08 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