Autor Beitrag
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Di 17.02.09 22:55 
Hallo,

ich habe eine Klasse von TWinControl abgeleitet und diese fängt das Paint-Ereignis ab per:
ausblenden Delphi-Quelltext
1:
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;					


Nun zu dem was mich wundert: warum muss ich inherited in die prozedur reinschreiben? Wenn ichs nicht mache kommt dauernd das Event und die CPU-Last ist bei ca. 5-10%. Mit dem inherited bei 0% - dabei überschreibe ich doch nichts (ohne override; override akzeptiert er auch nicht, da WM_Paint nicht in der Basisklasse existiert)

Grüße
Heiko


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 17.02.2009 um 23:02
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 17.02.09 23:18 
Doch, das gibt es in der Basisklasse, aber es ist private deklariert und somit nicht sichtbar oder erreichbar. Durch das message überschreibst du implizit einen vorhergehenden Handler. Und mit inherited wird dieser aufgerufen. ;-)

// EDIT:
Ach ja, wenn es immer wieder aufgerufen wird:
Kann es sein, dass du Result der übergebenen Botschaft nicht setzt? ;-)
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 18.02.09 10:31 
Über TObject.Dispatch werden Messages an message-Methode verteilt. Diese gelten quasi implizit als virtual bzw. override (auch wenn private). Ein inherited auf der untersten message-Methode ruft TObject.DefaultHandler auf (diese wird generell ausgeführt, wenn kein Message-Handler zur Verfügung steht). Alles "Compilermagic".
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 18.02.09 12:16 
Ferner benötigen WM_PAINT-Botschaften explizit eine Behandlung bei der 1-2 Dinge erledigt werden; solange dies nicht geschehen ist, bekommt mn immer wieder den Hinweis, dass da noch was zu zeichnen ist. Durch den Inherited-Aufruf wird der Default-Handler von Windows gecallt, der geau diese notwendige Behandlung erledigt.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 18.02.09 12:22 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Ferner benötigen WM_PAINT-Botschaften explizit eine Behandlung bei der 1-2 Dinge erledigt werden

Das ist korrekt. Wie hier angedeutet sollte man in WM_PAINT nicht einfach drauflos zeichnen, sondern zuerst die Doku lesen, bzw. man sollte die Delphi Paint-Methode (oder analoge Funktionalität) verwenden. Zudem ist für (evtl. später gewünschte) Platformunabhängigkeit sinnvoll, solche low-level Dinge zu unterlassen.
:arrow: Für eigene Komponenten ist TCustomControl meist geeigneter als TWinControl (für diesen Zweck wurde die geschaffen...)
Heiko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 18.02.09 12:54 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Kann es sein, dass du Result der übergebenen Botschaft nicht setzt? ;-)

Japp, aber wenn ich als Egrebnis an die Message 1 überge, ändert das nix.


user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Ferner benötigen WM_PAINT-Botschaften explizit eine Behandlung bei der 1-2 Dinge erledigt werden; solange dies nicht geschehen ist, bekommt mn immer wieder den Hinweis, dass da noch was zu zeichnen ist. Durch den Inherited-Aufruf wird der Default-Handler von Windows gecallt, der geau diese notwendige Behandlung erledigt.

Wo finde ich raus, welche Dinge das sind? Bei MSDN sehe ich da gerade nix.


user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
:arrow: Für eigene Komponenten ist TCustomControl meist geeigneter als TWinControl (für diesen Zweck wurde die geschaffen...)

TCustomControl beinhaltet mir schon zuviel. Wofür braucht eine OpenGL-Komponente einen GDI-Canvas? ;)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 18.02.09 13:26 
user profile iconHeiko hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Ferner benötigen WM_PAINT-Botschaften explizit eine Behandlung bei der 1-2 Dinge erledigt werden; solange dies nicht geschehen ist, bekommt mn immer wieder den Hinweis, dass da noch was zu zeichnen ist. Durch den Inherited-Aufruf wird der Default-Handler von Windows gecallt, der geau diese notwendige Behandlung erledigt.

Wo finde ich raus, welche Dinge das sind? Bei MSDN sehe ich da gerade nix.

Siehe vorigen Beitrag von user profile icondelfiphan, dort hat er das verlinkt ...

user profile iconHeiko hat folgendes geschrieben Zum zitierten Posting springen:
user profile icondelfiphan hat folgendes geschrieben Zum zitierten Posting springen:
:arrow: Für eigene Komponenten ist TCustomControl meist geeigneter als TWinControl (für diesen Zweck wurde die geschaffen...)

TCustomControl beinhaltet mir schon zuviel. Wofür braucht eine OpenGL-Komponente einen GDI-Canvas? ;)

Die brauch ein GDI-Canvas, um ein GLRC zu erzeugen ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 18.02.09 14:26