Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Klasse von TCheckbox ableiten (https://www.delphipraxis.net/171940-klasse-von-tcheckbox-ableiten.html)

JYPDWhite 3. Dez 2012 16:41

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: http://pastebin.com/eX0AaQrW

Hat jemand ne Idee welche Funktion bei der Checkbox aufgerufen wird wenn diese sich Zeichnen soll?

stahli 3. Dez 2012 18:12

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...

Bummi 3. Dez 2012 18:51

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.

DeddyH 3. Dez 2012 18:56

AW: Klasse von TCheckbox ableiten
 
TCustomControl wäre wohl eher geeignet, sonst sieht es mit Fokus schlecht aus ;)

Bummi 3. Dez 2012 19:21

AW: Klasse von TCheckbox ableiten
 
@DeddyH , wenn man den braucht, sicher.
Dafür fängt man sich dann halt die üblichen Transparenzprobleme ein.

DeddyH 3. Dez 2012 19:25

AW: Klasse von TCheckbox ableiten
 
Das ist mir klar, aber es soll auch Leute geben, die noch die Tastatur beherrschen :mrgreen:

JYPDWhite 4. Dez 2012 10:50

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 ;-)

Bummi 4. Dez 2012 11:18

AW: Klasse von TCheckbox ableiten
 
@JYPDWhite

berichte von Deinem Erfolg, bei einem schnellen antesten hatte ich massives Geflackere ...

JYPDWhite 6. Dez 2012 11:39

AW: Klasse von TCheckbox ableiten
 
Also ich habe es letztendlich Quick&Dirty so gelöst:
Delphi-Quellcode:
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;
dazu ist das Form auf dem das ganze Zeug liegt DoubleBuffered:=true; ich konnte bei mir kein geflackere feststellen.
Am Anfang hatte ich das inherited nicht drinne. Da hatte ich extremes geflackere da dann Windows ein ständiges neuzeichnen veranlasst hat.

Bummi 6. Dez 2012 12:30

AW: Klasse von TCheckbox ableiten
 
IMHO fehlt da noch ein ReleaseDC


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:57 Uhr.
Seite 1 von 2  1 2      

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