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 2 von 2     12   
Benutzerbild von ChrisE
ChrisE

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

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 09:39
Zitat von taaktaak:
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?!
Genau.
Hat aber auch genau diesen Nachteil. Wenn man nicht daran denkt, was noch so "abgearbeitet" werden muss, wird das eben auch nicht abgearbeitet z.B. Abbrechen-Button der geklickt wird oder so was

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
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 09:53
Ich denke, das das Problem wo anders liegt. Die Befehle/Funktionen werden natürlich nacheinander abgerabeitet. Das heißt, so lange der Request ausgeführt wird, passiert gar nichts. Da könnt ihr noch so oft Application.ProcessMessages aufrufen, wie ihr wollt. Dann wird der Text der Statusbar zwei mal hintereinander geändert und das geht so schnell, dass man die erste Änderung nicht sieht.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

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

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 09:59
Zitat von Luckie:
Ich denke, das das Problem wo anders liegt. Die Befehle/Funktionen werden natürlich nacheinander abgerabeitet. Das heißt, so lange der Request ausgeführt wird, passiert gar nichts. Da könnt ihr noch so oft Application.ProcessMessages aufrufen, wie ihr wollt. Dann wird der Text der Statusbar zwei mal hintereinander geändert und das geht so schnell, dass man die erste Änderung nicht sieht.
Also meinst du, dass der Request so schnell vorbei ist, dass man die Änderung gar nicht sieht, oder habe ich die jetzt falsch verstanden?
Denn ein Application.ProcessMessages direkt vor dem Aufruf des Request würde ja eben zunächst den Statusbar anpassen. Wenn der Request aber zu schnell vorbei ist und die zweite Änderung kommt - gepaart mit dem Application.ProcessMessages - sehe ich es nicht.

Hab ich das jetzt richtig verstanden?

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
stev-e87

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

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 10:02
Danke für die vielen Antworten, nun hab ich auch einen gewissen Einblick in DelphiArchitektur

PS.: Applaication.ProcessMessages funktioniert, werd das auch verwenden, falls noch andere Dinge anfallen werden. Die Änderungen der einzelnen Schritte sehe ich auf jeden Fall -> Verbindung aufbauen etc. dauert lange genug.

THX
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 10:11
Zitat von ChrisE:
Also meinst du, dass der Request so schnell vorbei ist, dass man die Änderung gar nicht sieht,
Nein, nicht der Request ist so schenll, sondern die Änderunge des Statusbartextes erfolgt so schnell. Obwohl, ich sehe gerade, da wird zwischen druch ja noch was ausgeführt. Jedenfalls kommt Windows nicht zum Ändern des Textes, weil die zeichennachrichten eine sehr geringe Priorität im System haben.

Will man so etwas sauber lösen, sollte man mit Threads arbeiten.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von hazard999
hazard999

Registriert seit: 2. Okt 2008
38 Beiträge
 
#16

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 10:45
Und wieder mal wird Application.ProcessMessages vorgeschlagen.

Ihr wisst aber schon das damit die MessageLoop abgearbeitet wird, oder?

Demnach wird auch jeder Timer und jedes User-Event verarbeitet (alles was halt in der MessageLoop ist).


Wozu gibt es Repaint, Refresh oder Invalidate?

Denkt mal drüber nach...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 10:51
Vielleicht will man da sja gerade, damit das Fenster noch reagiert?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von hazard999
hazard999

Registriert seit: 2. Okt 2008
38 Beiträge
 
#18

Re: Befehlsverarbeitung unter Delphi

  Alt 6. Mär 2009, 11:07
Gut.

Dann schlage ich folgendes Code-Schnipsel vor:

Delphi-Quellcode:
procedure ProcessSomeMessages;
var sMessage: string;
   mess: TMSG;
   Handled: boolean;
begin
   sMessage := '';

   while PeekMessage(mess, 0, 0, 0, Pm_Remove) do
   begin
      TranslateMessage(mess);
      case mess.message of
         WM_KEYDOWN: sMessage := sMessage + 'killed WM_KEYDOWN ';
         WM_KEYUP: sMessage := sMessage + 'killed WM_KEYUP ';
         WM_MOUSEMOVE: sMessage := sMessage + 'killed WM_MOUSEMOVE ';
         WM_LBUTTONDOWN: sMessage := sMessage + 'killed WM_LBUTTONDOWN ';
         WM_LBUTTONUP: sMessage := sMessage + 'killed WM_LBUTTONUP ';
         WM_RBUTTONDOWN: sMessage := sMessage + 'killed WM_RBUTTONDOWN ';
         WM_RBUTTONUP: sMessage := sMessage + 'killed WM_RBUTTONUP ';
         WM_MBUTTONDBLCLK: sMessage := sMessage + 'killed WM_MBUTTONDBLCLK ';
         WM_RBUTTONDBLCLK: sMessage := sMessage + 'killed WM_RBUTTONDBLCLK ';
         WM_LBUTTONDBLCLK: sMessage := sMessage + 'killed WM_LBUTTONDBLCLK ';
         WM_NCLBUTTONDOWN: sMessage := sMessage + 'killed WM_NCLBUTTONDOWN ';
         WM_TIMER: sMessage := sMessage + 'killed WM_TIMER ';
      else
         Handled := false;

         if Assigned(Application.OnMessage) then
            Application.OnMessage(mess, Handled);

         if not Handled then
            DispatchMessage(mess);
      end;
   end;
end;

weil tb_Load_ElementsClick mehrfach auszuführen weil irgendwer wie wild auf den Button drückt ist denke ich auch nicht das was er will...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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