![]() |
Befehlsverarbeitung unter Delphi
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:
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.
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; Hach ja, als VB Umsteiger möchte man sich wohl noch an so einige Schikane gewöhnen müssen :wink: MfG |
Re: Befehlsverarbeitung unter Delphi
Hi,
Du solltest nach jeder Aktualisierung der Statusbar ein
Delphi-Quellcode:
einfügen, damit die Anwendung Zeit bekommt, um die Statusleiste neu zu zeichnen.
Application.ProcessMessages;
Gruß Patrick |
Re: Befehlsverarbeitung unter Delphi
Hallo strv-e87,
Delphi-Quellcode:
Wird eigentlich benutzt um Fehler abzufangen.
try
Finally 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 |
Re: Befehlsverarbeitung unter Delphi
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... |
Re: Befehlsverarbeitung unter Delphi
Zitat:
Du kannst es auch ohne ProcessMessages machen durch Update / Repaint. Gruß, Chris |
Re: Befehlsverarbeitung unter Delphi
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 |
Re: Befehlsverarbeitung unter Delphi
Aha, die niedrige Priorität - das leuchtet ein.
Danke für die Antwort :) |
Re: Befehlsverarbeitung unter Delphi
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. |
Re: Befehlsverarbeitung unter Delphi
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 ;-) |
Re: Befehlsverarbeitung unter Delphi
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 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