Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ListView :: Zeile markieren : funktioniert nicht komplett (https://www.delphipraxis.net/71076-listview-zeile-markieren-funktioniert-nicht-komplett.html)

Nils_13 8. Jun 2006 14:14


ListView :: Zeile markieren : funktioniert nicht komplett
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

ich möchte in einer ListView eine Zeile, also ein Item, markieren, wenn diese nicht gechecked ist.
Dazu verwende ich folgenden Code:
Delphi-Quellcode:
procedure TfrmMain.lvCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var i: integer;
begin
  for i := 0 to lvTasks.Items.Count - 1 do
  begin
    if lvTasks.Items[i].Checked = False then
    begin
      Sender.Canvas.Brush.Color := $00006CEB
    end else Sender.Canvas.Brush.Color := clWhite;
  end;
end;
Es werden zwar alle Items am Anfang markiert, aber im folgendem Screenshot ist das Problem gezeigt (Siehe roteingehramte Checkbox). Dies ist aber nur ein Beispiel für einen mir nicht bekannten Codefehler.

Wenn ich etwas editiere oder einen Eintrag hinzufüge sollte es natürlich auch richtig sein, falls ein Item Checked=False hat.

mkinzler 8. Jun 2006 15:39

Re: ListView :: Zeile markieren : funktioniert nicht komplet
 
Du brauchst keine Schleife über alle Items machen, da er Event für jedes Item ausgelöst wird, welcher als Parameter Item übergeben

Zacherl 8. Jun 2006 15:46

Re: ListView :: Zeile markieren : funktioniert nicht komplet
 
Also:
Delphi-Quellcode:
procedure TfrmMain.lvCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var i: integer;
begin
  if Item.Checked = False then
  begin
    Sender.Canvas.Brush.Color := $00006CEB
  end
    else
  Sender.Canvas.Brush.Color := clWhite;
end;
Florian

TBx 8. Jun 2006 16:00

Re: ListView :: Zeile markieren : funktioniert nicht komplet
 
und bitte niemals Boolsche Vergleiche gegen True oder False machen --> siehe diverse Threads in der DP

#Ich schlage also vor:
Delphi-Quellcode:
procedure TfrmMain.lvCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if Item.Checked then
    Sender.Canvas.Brush.Color := clWhite;
  else
    Sender.Canvas.Brush.Color := $00006CEB
end;
Gruß

onlinekater

Nils_13 8. Jun 2006 17:10

Re: ListView :: Zeile markieren : funktioniert nicht komplet
 
thx.


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