Zitat von
.chicken:
Den PaintHandler kann ich nicht überschreiben sagt er mir weil er statisch ist
Der PaintHandler (siehe auch
OH) ist die Botschaftsbehandlungsroutine für die WM_Paint-Message und wird ohne "override" einfach so überschrieben:
Delphi-Quellcode:
private
...
procedure PaintHandler(var AMessage : TWMPaint); message wm_Paint;
public
...
Wenn du den PaintHandler nicht überschreibst, dann malt der nämlich auch immer noch ein bisschen mit, und zwar initialisiert der vorab die Grundfläche deines Controls mit der Parent-Color. Und erst darauf pinselst Du dann wieder (wahrscheinlich auch zuerst eine Initialisierung mit der clBtnFace-Color o.ä.). Es ist also besser, wenn man seine Malarbeiten gleich selbst in diesem PaintHandler ausführt. Ansonsten könnte es u.U. durch dessen eigenes Initialisieren mit der Parent-Color auch noch zu einem leichten Flackern kommen.
Bzgl. des PaintHandlers wäre dann eigentlich nur noch mehr wichtig, dass die ganzen Arbeiten dort in ein BeginPaint u. EndPaint eingekleidet sind:
Delphi-Quellcode:
procedure TOwnButton.PaintHandler(
var AMessage: TWMPaint);
var APaintStruct : TPaintStruct;
begin
BeginPaint(
Handle,APaintStruct);
// primäres Initialisieren der Button-Grundfläche
...
with Canvas
do
if not ButtonIsPressed
then begin // wenn der "Button" NICHT gedrückt ist
// dann event. ein Bitmap malen mit BitBlt o. TransparentBlt
...
// dann eine Caption schreiben
...
// dann den Rahmen pinseln
...
// und ganz zum Schluß event. noch einen Focus-Ring malen
...
end
else begin // dann ist der "Button" gedrückt...
// wie darüber, nur eben jetzt bzgl. einer gedrückten Button
...
end;
EndPaint(
Handle,APaintStruct);
end;
so z.B., oder eben alles +/- ziemlich ähnlich, natürlich