AGB  ·  Datenschutz  ·  Impressum  







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

Befehlsverarbeitung unter Delphi

Ein Thema von stev-e87 · begonnen am 6. Mär 2009 · letzter Beitrag vom 6. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
stev-e87

Registriert seit: 28. Feb 2009
20 Beiträge
 
#1

Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 08:33
Guten Morgen allerseits,

ich bin mir in Bezug auf die Vorgehensweise von Delphi bei der Abarbeitung der Befehle nicht so ganz sicher. Erst der Code:

Delphi-Quellcode:
procedure TWnd_Main.tb_Load_ElementsClick(Sender: TObject);
begin
SBar.Panels[0].Text:='1. Anfordern der Bibliothek';
try
HTTP_Request('http://www.meinLink.tld','ico.xml');
SBar.Panels[0].Text:='2. Elemente laden';
Load_Elements;
finally
SBar.Panels[0].Text:='Fertig';
end;
end;
Meine Frage: Warum ändert er den Text der Statusbar erst, wenn finally eintritt? Es wird die Änderung nach Begin und die in der Mitte konsequent ausgelassen.
Hach ja, als VB Umsteiger möchte man sich wohl noch an so einige Schikane gewöhnen müssen

MfG
  Mit Zitat antworten Zitat
Benutzerbild von holliesoft
holliesoft

Registriert seit: 4. Apr 2005
Ort: Gau-Algesheim
250 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 08:41
Hi,

Du solltest nach jeder Aktualisierung der Statusbar ein

Application.ProcessMessages; einfügen, damit die Anwendung Zeit bekommt, um die Statusleiste neu zu zeichnen.

Gruß
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 08:44
Hallo strv-e87,

Delphi-Quellcode:
try

Finally
Wird eigentlich benutzt um Fehler abzufangen.

Wenn im Block zwischen try und finally ein Fehler auftritt, wird auf jeden Fall die Anweisung nach finally ausgeführt.

Typischerweise benutzt man das um Speicher freizugeben, wenn ein Fehler aufgetreten ist.


Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#4

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 08:46
Moin,
diese Frage habe ich mir auch schon des öfteren gestellt. Das ProcessMessages ist zwar die Lösung, die gewünschte Anzeige zu erzwingen - allerdings ist hier die Frage, warum zwischenzeitlich keine Ausgabe erfolgt...
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 09:02
Zitat von taaktaak:
...allerdings ist hier die Frage, warum zwischenzeitlich keine Ausgabe erfolgt...
Genau weil nach dem ändern des Textes noch sehr viel anderes gemacht wird. Das verhindert das "automatisches" Neuzeichnen des Statusbar. Es wird die gesamte Zeit dafür "verbraten" den Quelltext danach auszuführen. Da bleibt keine Zeit die Komponenten neu zu zeichnen.

Du kannst es auch ohne ProcessMessages machen durch Update / Repaint.

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
hoika

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

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 09:12
Hallo,

unter VB hast du das gleiche Problem.
Dort heisst Application.ProcessMessages anders, nämlich DoEvents.
Viell. führt das VB ja selber durch.

Die Nachricht Paint hat eine sehr geringe Priorität,
deshalb wird erst mal alles andere gemacht.

Heiko
Heiko
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#7

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 09:15
Aha, die niedrige Priorität - das leuchtet ein.
Danke für die Antwort
Ralph
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 09:18
Eigentlich liegt der Hase noch ganz woanders begraben...

Tatsächlich zeichnet Delphi den Statusbar nicht sofort neu. Es stellt nur eine Nachricht in die Messageloop. Solange die nicht abgearbeitet wird, wird auch nichts neu gezeichnet.

Anstelle Application.ProcessMessages würde ich SBar.Update empfehlen.
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 09:20
Wobei ProcessMessages genau das macht was es auch sagt: Verarbeitung der Nachrichten.
Also auch der Nachricht zum Neuzeichnen des Statusbar. Das wird auch von der Anwendung automatisch ausgeführt wenn diese nichts zu tun hat. Aber der Quelltext sorgt dafür, dass dieser Zustand der "Langeweile" für das Programm eben nicht eintritt. Somit muss man das Programm manuell dazu zwingen

Gruß, Chris

roter Kasten von OlafSt. Du warst wohl schneller
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#10

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 09:30
Zitat:
Anstelle Application.ProcessMessages würde ich SBar.Update empfehlen
Weil damit gezielt die Anzeige der Statusbar gezeichnet wird und nicht etwaige andere wartenden Operationen ebenfalls?!
Ralph
  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 06:01 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