Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Verständnisfrage zu Update,Invalidate,Repaint (https://www.delphipraxis.net/150917-verstaendnisfrage-zu-update-invalidate-repaint.html)

p80286 30. Apr 2010 10:09


Verständnisfrage zu Update,Invalidate,Repaint
 
Hallo Zusammen,

wie aus der Überschrift hervorgeht, komme ich mit den drei Methoden und ihrem Einsatz nicht ganz klar (die OH ist widersprüchlich)

Update soll ein Neuzeichnen der Form veranlassen. Das funktioniert aber wohl nur innerhalb des Programmablaufes, wenn man Application.Processmessages nutzt.

Repaint soll Invalidate und anschließend Update aufrufen um sofortiges Neuzeichnen des ganzen Forms zu veranlassen.

Invalidate veranlaßt ein Update "bei Gelegenheit".

Wenn man auf einem Form nur z.B. die Namen der gerade verarbeiteten Datei ausgeben will, und möglichst wenig CPU-Zeit verbraten will, wie macht man's am geschicktesten?

(die Processmessages-Brechstange möchte ich mal aussen vorlassen wg. ungewolltem Multitasking)
(Ja, die Beschränkung auf Label ist mir bekannt)

Gruß
K-H

Alaitoc 30. Apr 2010 10:44

Re: Verständnisfrage zu Update,Invalidate,Repaint
 
Also kann ja sein das ich jetzt falsch liege...

Jedoch veranlassen zwar Repaint, Invalidate und Update das Neuzeichnen bzw. teils teils, jedoch
sagen sie nicht, dass die aktuellen Ereignisse verarbeitet werden sollen wie Application.ProcessMessages.

Also zwar kannst du ihm sagen das er etwas neuzeichnen soll, da er aber beschäftigt ist, macht er es
erst nach dem Beenden des Vorgangs.

Bei nem Vorgang wo mehrere Dateien verarbeitet werden, kannst du z.b. sagen das er immer ein Event
auslöst wenn es zugewiesen wurde indem irgendetwas geschieht (z.B. Ausgabe der aktuell Datei die verarbeitet wird).

Delphi-Quellcode:
  if Assigned( OnBenachrichtigungsevent ) then
  begin
    OnBenachrichtigungsevent;
  end;
  // Verarbeitungsprozedur
  .
  .
  .
Hoffe ich liege soweit richtig ^^

MfG Alaitoc

Edit ist mein Freund...

p80286 3. Mai 2010 11:45

Re: Verständnisfrage zu Update,Invalidate,Repaint
 
Zitat:

Zitat von Alaitoc

Also zwar kannst du ihm sagen das er etwas neuzeichnen soll, da er aber beschäftigt ist, macht er es
erst nach dem Beenden des Vorgangs.

Und genau hier liegt mein Problem. Ich habe den Verdacht, daß das Repaint eine Kombination aus Invalidate/Update und Application.Processmessages ist, da ich meine beobachtet zu haben, daß ein Repaint sofort ausgefühert wird, was aber eigentlich nicht der Beschreibung in der OH entspricht.

Gruß
K-H

himitsu 3. Mai 2010 11:53

Re: Verständnisfrage zu Update,Invalidate,Repaint
 
Zitat:

Zitat von p80286
Ich habe den Verdacht, daß das Repaint eine Kombination aus Invalidate/Update und Application.Processmessages ist, da ich meine beobachtet zu haben, daß ein Repaint sofort ausgefühert wird,

Delphi-Quellcode:
procedure TWinControl.Repaint;
begin
  Invalidate;
  Update;
end;
"Invalidate/Update" stimmt also schonmal
und Update ruft quasi die Methoden für's Neuzeichnen direkt auf, weßhalb daher natürlich die Änderungen auch sofort sichtbar sind.


[add]
The MSDN-Library durchsuchenInvalidateRect function adds a rectangle to the specified window's update region. The update region represents the portion of the window's client area that must be redrawn.

The MSDN-Library durchsuchenUpdateWindow function updates the client area of the specified window by sending a WM_PAINT message to the window if the window's update region is not empty. The function sends a WM_PAINT message directly to the window procedure of the specified window, bypassing the application queue. If the update region is empty, no message is sent.


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