![]() |
Klasse von TCheckbox ableiten
Hi ihr,
ich möchten neben einer Checkbox ein Bild anzeigen und da habe ich mir gedacht "machst du halt ne neue Komponente die von TCheckbox abgeleitet ist". Gesagt getan. Dann war der nächste Schritt die Paint Methode überschreiben. Nunja würde ich ja gerne. Nur gibt es in der Basisklasse (und der ihren Basisklassen) keine paint Methode. Dann habe ich einfach mal alle Methoden überschrieben die Paint im Namen haben und mir Haltepunkte gesetzt. Aber die Funktionen werden allesamt nicht aufgerufen. Siehe Pastebin: ![]() Hat jemand ne Idee welche Funktion bei der Checkbox aufgerufen wird wenn diese sich Zeichnen soll? |
AW: Klasse von TCheckbox ableiten
Schreib mal, welche Delphiversion Du nutzt.
Ich denke, die Checkbox wird direkt von Windows gezeichnet. Notfalls könntest Du die Checkbox und das Image in ein Panel legen und bei bestimmten Ereignissen aus der Checkbox heraus das Image ändern... |
AW: Klasse von TCheckbox ableiten
Du könntest Dich schon in WM_Paint einhängen, Dir ein Controlcanvas erzeugen, per
DrawFrameControl( Canvas.Handle, Rect(0,0,20,20), DFC_BUTTON, DFCS_BUTTONCHECK ); DrawFrameControl( Canvas.Handle, Rect(20,0,40,20), DFC_BUTTON,DFCS_BUTTONCHECK or DFCS_CHECKED ); die Boxen zeichnen etc. Allerdings dürfte das ganze sauberer und flackerfreier werden wenn Du z.B. von TGraphicControl ableitest und dort nachrüstest. |
AW: Klasse von TCheckbox ableiten
TCustomControl wäre wohl eher geeignet, sonst sieht es mit Fokus schlecht aus ;)
|
AW: Klasse von TCheckbox ableiten
@DeddyH , wenn man den braucht, sicher.
Dafür fängt man sich dann halt die üblichen Transparenzprobleme ein. |
AW: Klasse von TCheckbox ableiten
Das ist mir klar, aber es soll auch Leute geben, die noch die Tastatur beherrschen :mrgreen:
|
AW: Klasse von TCheckbox ableiten
Hi ihr,
erstmal danke für die Antworten. Das Projekt läuft noch bei Delphi 2007. Gut dann werde ich das mal probieren mich in WM_Paint mit rein zu hängen. Ne eigene Stringgridklasse die mit Checkboxen und Buttons usw klarkommt habe ich ja auch schon gebaut ;-) |
AW: Klasse von TCheckbox ableiten
@JYPDWhite
berichte von Deinem Erfolg, bei einem schnellen antesten hatte ich massives Geflackere ... |
AW: Klasse von TCheckbox ableiten
Also ich habe es letztendlich Quick&Dirty so gelöst:
Delphi-Quellcode:
dazu ist das Form auf dem das ganze Zeug liegt DoubleBuffered:=true; ich konnte bei mir kein geflackere feststellen.
procedure TAdvancedCheckbox.WMPaint(var Message: TWMPaint);
var Canvas :TCanvas; oldColor :TColor; oldStyle :TBrushStyle; begin inherited; if(Visible) then begin Canvas:=TCanvas.Create(); Canvas.Handle := GetWindowDC(Self.Handle); // canvas.TextOut(15,0, '88'); // canvas.Ellipse(x1, y1, x1+x2, y1+y2); oldColor:=Canvas.Brush.Color; if(isAusgewaehlt) then begin if(isUebernommen) then begin Canvas.Brush.Color:=farbeUebernommen; end else begin Canvas.Brush.Color:=farbeNichtUebernommen; end; end else begin Canvas.Brush.Color:=farbeNichtAusgewaehlt; end; oldStyle:=Canvas.Brush.Style; Canvas.Brush.Style:=bsSolid; canvas.Ellipse(15, 1, 30, 16); canvas.Brush.Style:=oldStyle; canvas.Brush.Color:=oldColor; FreeAndNil(Canvas); end; end; Am Anfang hatte ich das inherited nicht drinne. Da hatte ich extremes geflackere da dann Windows ein ständiges neuzeichnen veranlasst hat. |
AW: Klasse von TCheckbox ableiten
IMHO fehlt da noch ein ReleaseDC
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz