Thema: Delphi Eigene Button Komponente

Einzelnen Beitrag anzeigen

TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#43

Re: Eigene Button Komponente

  Alt 8. Mai 2007, 23:20
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
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat