AGB  ·  Datenschutz  ·  Impressum  







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

Checkbox selbst zeichnen

Ein Thema von Ardeo · begonnen am 5. Mai 2007 · letzter Beitrag vom 6. Mai 2007
Antwort Antwort
Ardeo

Registriert seit: 13. Dez 2006
14 Beiträge
 
#1

Checkbox selbst zeichnen

  Alt 5. Mai 2007, 07:16
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
  Mit Zitat antworten Zitat
Ardeo

Registriert seit: 13. Dez 2006
14 Beiträge
 
#2

Re: Checkbox selbst zeichnen

  Alt 5. Mai 2007, 15:16
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Checkbox selbst zeichnen

  Alt 5. Mai 2007, 17:20
Kannst/Darfst du kostenpflichtige Fremdkomponenten verwenden? Falls ja: ElPack-CheckBox
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Ardeo

Registriert seit: 13. Dez 2006
14 Beiträge
 
#4

Re: Checkbox selbst zeichnen

  Alt 5. Mai 2007, 18:45
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.
  Mit Zitat antworten Zitat
Ardeo

Registriert seit: 13. Dez 2006
14 Beiträge
 
#5

Re: Checkbox selbst zeichnen

  Alt 6. Mai 2007, 01:11
Hat echt keiner eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#6

Re: Checkbox selbst zeichnen

  Alt 6. Mai 2007, 08:09
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.

Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Ardeo

Registriert seit: 13. Dez 2006
14 Beiträge
 
#7

Re: Checkbox selbst zeichnen

  Alt 6. Mai 2007, 13:37
Danke für deine Antwort turboPASCAL
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 )
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#8

Re: Checkbox selbst zeichnen

  Alt 6. Mai 2007, 15:10
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.

PS.: Ausserdem ist im Code oben eine falsche Zeile hineingerutscht. Es muss
  FillRect(lpdis.hDC, lpdis.rcItem, GetStockObject(LTGRAY_BRUSH)); heissen.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort


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:09 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