ListView - Style nicht änderbar

Rund um die LCL und andere Komponenten
Antworten
catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

ListView - Style nicht änderbar

Beitrag von catweasel »

Moin

Ich habe eine ListView-Komponente und möchte einen Eintrag durchstreichen [fsStrikeOut] wenn ein anderer Eintrag in der selben Zeile (SubItems[3]) den Inhalt "true" hat.

Komischerweise funktioniert der Eintrag:

Code: Alles auswählen

Sender.Canvas.Font.Style:=[fsBold, fsStrikeOut];
hier nicht.

Will ich dagegen dem Eintrag eine andere Farbe verpassen,

Code: Alles auswählen

Sender.Canvas.Brush.Color :=clRed;
dann funktioniert das.

Was muß ich machen damit ich den Style von einem Eintrag ändern kann?
Ich habe auch schon nach Sender.Canvas.Font.Style:=[fsBold, fsStrikeOut];
ein Sender.Canvas.Refresh bzw. ListView1.Canvas.Refresh eingebaut, jedoch ohne
Erfolg.

Gruß
Michael

Code: Alles auswählen

procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
const
  cStripe = $CCFFCC;
begin
  ListView1.BeginUpdate;
  if Odd(Item.Index) then Sender.Canvas.Brush.Color := cStripe
                     else Sender.Canvas.Brush.Color := clWindow;
 
  // Hinweis: Item.SubItems[2] ist visible:=false und enthält die Farbe
  // Hinweis: Item.SubItems[3] ist visible:=false und ist true wenn IP nicht angepingt werden soll
   if SubItem = 1  then begin
       Sender.Canvas.Font.Color := StringToColor(Item.SubItems[2]);
       if ListView1.Items[Item.Index].SubItems[3]='true' then begin
           Sender.Canvas.Font.Style:=[fsBold, fsStrikeOut];        // <- das geht nicht
           Sender.Canvas.Brush.Color :=clRed;                      // <- das geht
           ListView1.Canvas.Refresh; //Sender.Canvas.Refresh;
       end;
   end;
 
   if SubItem = 2 then
       ListView1.Canvas.Font.Color := StringToColor(Item.SubItems[2]);
   ListView1.EndUpdate;
end;

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: ListView - Style nicht änderbar

Beitrag von MAC »

wie genau funktioniert das nicht ?
ich nehme mal an er kompiliert das programm ignoriert aber den code.
hast du schonmal nur fsbold versucht, klappt das.

also bei nem normalen image klappt das.
steht in der Refresh , oder ner anderen funktion was anderes, also wird der wert geändert ?
Aktuelle Version oder immernoch 0.9.28

Code: Alles auswählen

Signatur := nil;

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: ListView - Style nicht änderbar

Beitrag von catweasel »

MAC hat geschrieben:wie genau funktioniert das nicht ?
ich nehme mal an er kompiliert das programm ignoriert aber den code.
hast du schonmal nur fsbold versucht, klappt das.
Korrekt. Kompilierung läuft durch, jedoch wird der Code nicht ausgeführt.
MAC hat geschrieben:also bei nem normalen image klappt das.
Das verstehe ich nicht. Was soll das heißen: "also bei nem normalen image klappt das" ?
MAC hat geschrieben:steht in der Refresh , oder ner anderen funktion was anderes, also wird der wert geändert ?
Nein. Im Objektinspector habe ich unter Eigenschaften per Standard den Style auf fsBold=true gesetz. Alle anderen Styles sind auf false.
Der Style soll nur in der im Post angegeben "ListView1CustomDrawSubItem" geändert werden. Andere Style anpassungen wie "fsItalic" oder "fsUnderline" werden auch nicht geändert wennn ich sie statt "fsStrikeout" im Quelltext eintrage
MAC hat geschrieben:Aktuelle Version oder immernoch 0.9.28
Ich habe hier noch die 0.9.28.2


P.S.: Noch als Zusatz-Ifo: Der ViewStyle der Listview-Komponente steht bei mir auf: vsReport

Gruß
Michael
Zuletzt geändert von catweasel am Sa 22. Jan 2011, 19:54, insgesamt 1-mal geändert.

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: ListView - Style nicht änderbar

Beitrag von catweasel »

Ich habe auch folgendes versucht:

Code: Alles auswählen

with (Sender As TListView) do
 begin
   Canvas.Brush.Color:=clYellow;
   Canvas.Font.Color:=clRed;
   Canvas.Font.Style:=[fsStrikeout];
end;
Die ersten beiden Einträge funktionieren, der Style nicht :x

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: ListView - Style nicht änderbar

Beitrag von MAC »

catweasel hat geschrieben:
MAC hat geschrieben:also bei nem normalen image klappt das.
Das verstehe ich nicht. Was soll das heißen: "also bei nem normalen image klappt das" ?
Ich meine, ich hab mir nen Image genommen.

OnKeyDown

Code: Alles auswählen

with Image1 do
 begin
   Canvas.Brush.Color:=clYellow;
   Canvas.Font.Color:=clRed;
   Canvas.Font.Style:=[fsStrikeout];
   Canvas.TextOut(x,y,'Hello World');
end;
hat funktioniert.

Deswegen ist es komisch das es beim Listwiev nicht klappt.

Ich würde jetzt einfach mal mit nem aktuellen
Lazarus 0.9.31 + fpc 2.4.3 ausprobieren. Sollte Stabil sein.

Code: Alles auswählen

Signatur := nil;

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: ListView - Style nicht änderbar

Beitrag von catweasel »

MAC hat geschrieben:

Code: Alles auswählen

with Image1 do
 begin
   Canvas.Brush.Color:=clYellow;
   Canvas.Font.Color:=clRed;
   Canvas.Font.Style:=[fsStrikeout];
   Canvas.TextOut(x,y,'Hello World');
end;
hat funktioniert.
Kann ich bestätigen, das funktioniert bei mir auch.
MAC hat geschrieben:Ich würde jetzt einfach mal mit nem aktuellen
Lazarus 0.9.31 + fpc 2.4.3 ausprobieren. Sollte Stabil sein.
Das habe ich gemacht und es ist schwer ins Auge gegangen
Zuerst habe ich ein Update auf meinem Laptop gemacht. Das Update selbst war kein Problem, allerdings flackert dort jetzt das ListView nach einem Eintrag dermaßen das nichts mehr im ListView zu erkennen ist.
Leider hatte ich mein Programm auf dem neuen Lazarus erst getestet nachdem ich auch ein Update auf meinem Stammrechner gemacht hatte. Oder besser gesagt versucht hatte. Nach der Installation ging es nicht mehr vor und nicht zurück. Ständig fehlten irgendwelche Dateien.
Es hat mich 3 Stunden gekostet die alte Version wieder draufzubringen und es läuft immer noch nicht rund...

Ich glaube ich vergesse besser die Änderung des Style im ListView und begnüge mich mit dem Ändern der Farbe des markierten Eintrags.

Gruß
Michael

BeniBela
Beiträge: 321
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: ListView - Style nicht änderbar

Beitrag von BeniBela »

Das ListView-OwnerDrawing hat in Lazarus noch nie richtig funktioniert: http://bugs.freepascal.org/view.php?id=7059" onclick="window.open(this.href);return false;
Man könnte das wohl im lcl-Quellcode beheben, aber ich fand es dann doch einfacher ein komplett neues ListView zu schreiben.

Antworten