AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Button Komponente

Offene Frage von ".chicken"
Ein Thema von .chicken · begonnen am 30. Apr 2007 · letzter Beitrag vom 8. Mai 2007
Antwort Antwort
Seite 5 von 5   « Erste     345   
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#41

Re: Eigene Button Komponente

  Alt 8. Mai 2007, 19:19
Den PaintHandler kann ich nicht überschreiben sagt er mir weil er statisch ist, aber jetzt klappt alles einigermaßen
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#42

Re: Eigene Button Komponente

  Alt 8. Mai 2007, 20:36
Hi,

was ist denn das?
Zitat:
constructor TGraphicButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);

FPicture := TBitmap.Create;
Picture := TBitmap.Create;
end;
FBitmap ist die lokale Variable innerhalb deines Objektes und Picture der öffentlicher Verweis darauf, wozu dann
Zitat:
Picture := TBitmap.Create;
das wäre doppeltgemoppelt.

Und warum TBitmap? Normaler Weise sollte es so aussehen:

Delphi-Quellcode:
  TGraphicButton = class(TCustomControl)
  private
    ...
    FPicture: TPicture;
    procedure SetPicture(Value: TPicture);
    ...
    property Picture: TPictureread FPicture write SetPicture;
  end;
Damit ist es egal ob die Quelle eine Bitmap, JPEG, PNG oder sonst etwas ist.

Bezüglich des Overheat sollte allerdings von TGraphicControl abgeleitet werden, steht auch so in der Hilfe.
  Mit Zitat antworten Zitat
TStringlist

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

Re: Eigene Button Komponente

  Alt 8. Mai 2007, 22: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
Antwort Antwort
Seite 5 von 5   « Erste     345   


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 16:11 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