Delphi-PRAXiS

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/)
-   -   Delphi Check List Box einfärben (https://www.delphipraxis.net/25491-check-list-box-einfaerben.html)

saschab 7. Jul 2004 14:25


Check List Box einfärben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

habe Probleme mit dem Einfärben einer checkListBox

Folgender Code Soll die Zeilen Rot einfärben wenn ein Haken gesetzt ist.


Delphi-Quellcode:
procedure Tfrm_lagerverwaltung.cblb_statusinfoDrawItem(
  Control: TWinControl; Index: Integer; Rect: TRect;
  State: TOwnerDrawState);
var i : integer;
begin
    if (cblb_statusinfo.Checked[Index]) then
    begin
      cblb_statusinfo.Canvas.Brush.Color := clRed;
      cblb_statusinfo.Canvas.FillRect(Rect);
      cblb_statusinfo.Canvas.TextOut(Rect.Left, Rect.Top, cblb_statusinfo.Items[Index]);
    end
    else
    begin
      cblb_statusinfo.Canvas.TextOut(Rect.Left, Rect.Top, cblb_statusinfo.Items[Index]);
    end;
end;
Das Ergebnis ist nit so dolle, er setzt nur einmal die Hintergrungfarbe und zwar beim ersten Haken, wenn ich dann mit der Maus auf ne anderen Text Klicke wo ein Haken ist färbt er ihn auch rot ein.

Vielleicht habt ihr ja ne Lösung dafür.

franktron 7. Jul 2004 14:28

Re: Check List Box einfärben
 
Versuch mal
Code:
procedure Tfrm_lagerverwaltung.cblb_statusinfoDrawItem(
  Control: TWinControl; Index: Integer; Rect: TRect;
  State: TOwnerDrawState);
var i : integer;
begin
    if (cblb_statusinfo.Checked[Index]) then
    begin
      cblb_statusinfo.Canvas.Brush.Color := clRed;
      cblb_statusinfo.Canvas.Brush.Style := bsSolid;
      cblb_statusinfo.Canvas.FillRect(Rect);
      cblb_statusinfo.Canvas.TextOut(Rect.Left, Rect.Top, cblb_statusinfo.Items[Index]);
    end
    else
    begin
      cblb_statusinfo.Canvas.TextOut(Rect.Left, Rect.Top, cblb_statusinfo.Items[Index]);
    end;
end;

shmia 7. Jul 2004 14:31

Re: Check List Box einfärben
 
Delphi-Quellcode:
    if (cblb_statusinfo.Checked[Index]) then
    begin
      cblb_statusinfo.Canvas.Brush.Color := clRed;
      cblb_statusinfo.Canvas.FillRect(Rect);
      cblb_statusinfo.Canvas.TextOut(Rect.Left, Rect.Top, cblb_statusinfo.Items[Index]);
    end
    else
    begin
      // Farbe der nicht gecheckten Items
      cblb_statusinfo.Canvas.Brush.Color := cblb_statusinfo.Color; // <=====================
      cblb_statusinfo.Canvas.TextOut(Rect.Left, Rect.Top, cblb_statusinfo.Items[Index]);
    end;

saschab 7. Jul 2004 14:37

Re: Check List Box einfärben
 
Hallo,
erst mal danke für die Superschnelle Antwort, leider funktioniert es so nicht. Wenn ich hingehe und da fenster minimiere und wieder maximiere dann ist die Box richtig gezeichnet kann ich irgendwie nen Repaint oder so machen. Halt das selbe wie verkleiner und vergrössern.

Die Muhkuh 7. Jul 2004 15:22

Re: Check List Box einfärben
 
Zitat:

Zitat von saschab
Wenn ich hingehe und da fenster minimiere und wieder maximiere dann ist die Box richtig gezeichnet kann ich irgendwie nen Repaint oder so machen. Halt das selbe wie verkleiner und vergrössern.

Klar geht das. Du sagst es ja schon *g*:

Delphi-Quellcode:
Checklistbox1.Repaint
Wahlweiße auch Refresh.

saschab 7. Jul 2004 19:29

Re: Check List Box einfärben
 
Liste der Anhänge anzeigen (Anzahl: 1)
@spider:

Jippee das geht dem, nur wenn ich dann nen Haken wieder entferne wird der Text wieder mit nem weissen hintergrund belegt aber da wo der text aufhört bleibts rot :gruebel:
Und er zeichnet bei selektiertem eintrag ein hässliches weisses Rechteck siehe beides anhang. Vielleicht hast Du ja auch dafür ne Lösung.

Keldorn 7. Jul 2004 20:56

Re: Check List Box einfärben
 
Delphi-Quellcode:
    if (cblb_statusinfo.Checked[Index]) then
    begin
      Hintergrund zeichnen
      text zeichnen
    end
    else
    begin
      text zeichnen
    end;
fällt dir was auf? im else zweig zeichnest du nur den text.
da fehlt das setzen der Hintergrundfarbe und das fillrect. mit dem state kannst du rausbekommen, ob der eintrag selektiert ist oder nicht, und entsprechend die farbe auf clwindow (nix selektiert) oder clhighlight (selektiert) setzen.

Mfg Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 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-2025 by Thomas Breitkreuz