Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Checkbox selbst zeichnen (https://www.delphipraxis.net/91458-checkbox-selbst-zeichnen.html)

Ardeo 5. Mai 2007 07:16


Checkbox selbst zeichnen
 
Hallo :)

Ich würde gerne die Icons "checked" bzw "unckecked" der Checkbox durch ein Icon meiner Wahl ersetzen.
Ich behandle zur Zeit Luckies WinAPI Tuts, dort wird das aber nur sehr kurz angeschnitten (um genau zu sein nur 1 mal erwähnt) und hier habe ich nur Sachen zur VCL gefunden.
Wäre toll wenn ihr mir weiterhelfen könntet :)

Gruß und Danke im Voraus,
Ardeo

Ardeo 5. Mai 2007 15:16

Re: Checkbox selbst zeichnen
 
Ich hab mir nun noch einmal ein bisschen auf codeproject.com umgeschaut und habe dort auch etwas gefunden, was dem entspricht was ich machen möchte, jedoch ist das mit MFC gemacht und davon verstehe ich herzlich wenig.

Zur Verdeutlichung hier ein Screenshot:
http://img59.imageshack.us/img59/9066/shot00344tt8.jpg

Bernhard Geyer 5. Mai 2007 17:20

Re: Checkbox selbst zeichnen
 
Kannst/Darfst du kostenpflichtige Fremdkomponenten verwenden? Falls ja: ElPack-CheckBox

Ardeo 5. Mai 2007 18:45

Re: Checkbox selbst zeichnen
 
Danke erstmal für deine Antwort.
Kann sein dass ich mich irre aber das ist doch eine Komponente für die VCL und ich programmiere ja auf WinAPI Basis.
:)

Ardeo 6. Mai 2007 01:11

Re: Checkbox selbst zeichnen
 
Hat echt keiner eine Idee? :?

turboPASCAL 6. Mai 2007 08:09

Re: Checkbox selbst zeichnen
 
Naja, entweder musst du die Checkbox Subclassen (siehe Luckies Tuts) oder du "übermalst" sie einfach.

Wie geht das ? So:
Delphi-Quellcode:

// Procedure zum zeichnen der Buttons im eigenem Style
procedure DrawMyButtonstyle(lpdis: PDrawItemStruct; Checked: Boolean);
var
  r: TRect;
begin
  r := lpdis.rcItem;
  Fillrect(lpdis.hDC, lpdis.rcItem, GetSysColor(COLOR_ACTIVEBORDER));
  //...
end;

function DialogProc(...); oder was auch immer
var
  lpdis: PDrawItemStruct;

  //...

    WM_DRAWITEM: // Buttons (Checkboxen) herausfischen und Style ändern
      begin
        Result := FALSE;
        lpdis := PDrawItemStruct(lParam);
        if Boolean(lpdis.CtlType and ODT_BUTTON) then
        begin
          if Boolean(lpdis.itemState and ODS_CHECKED)
            then DrawMyButtonStyle(lpdis, TRUE)
            else DrawMyButtonStyle(lpdis, FALSE);
          Result := TRUE;
        end;
      end;
Delphi-Referenz durchsuchenWM_DRAWITEM das Control muss den Style BS_OWNERDRAW enthalten.

:mrgreen:

Ardeo 6. Mai 2007 13:37

Re: Checkbox selbst zeichnen
 
Danke für deine Antwort turboPASCAL :thumb:
Habe das nun den code sowie BS_OWNDERDRAW hinzugefügt.
Leider wird nun gar nichts mehr angezeigt^^

Scheint wohl noch irgendetwas zu fehlen (Entschuldigung, aber ich kenn mich mit OwnerDraw nur sehr begrenzt aus :( )

turboPASCAL 6. Mai 2007 15:10

Re: Checkbox selbst zeichnen
 
Der Code ist nur ein "unvollendetes" Beispiel in dem die Vorgehensweiser erklärt wird.
Das du nix siehst liegt wohl daran das du in der Procedure DrawMyButtonstyle() die Checkbox
komplett neu Zeichnen darfst. :stupid:

PS.: Ausserdem ist im Code oben eine falsche Zeile hineingerutscht. Es muss
Delphi-Quellcode:
  FillRect(lpdis.hDC, lpdis.rcItem, GetStockObject(LTGRAY_BRUSH));
heissen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:12 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