Kein "Bold" in ListView

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)

Kein "Bold" in ListView

Beitrag von catweasel »

Hallo

Ich habe hier eine ListView Komponente bei der ich je nach Wert einen Eintrag in rot und Fettschrift (Bold) anzeigen will.
Rot wird der Eintrag gemacht, aber er wird nicht in Fettschrift angezeigt.
Was mache denn hier wieder falsch?

Gruß
Michael

Code: Alles auswählen

procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
  if ((SubItem = 4) and (StrToTime(Item.SubItems[3]) >= StrToTime('10:00'))) then begin
        {TODO: geht nicht in Bold !! }
        ListView1.Canvas.Font.Style := [fsBold];  //funktioniert nicht
        ListView1.Canvas.Font.Color := clRed;     //funktioniert
        Sender.Canvas.Refresh;
      end
    else
      begin
        ListView1.Canvas.Font.Style := [];
        ListView1.Canvas.Font.Color := clBlack;
        Sender.canvas.Refresh;
      end;
end;

wp_xyz
Beiträge: 5145
Registriert: Fr 8. Apr 2011, 09:01

Re: Kein "Bold" in ListView

Beitrag von wp_xyz »

catweasel hat geschrieben:Was mache denn hier wieder falsch?
Gar nichts. Es gibt dazu einen Bug-Report, der offenbar ziemlich weit unten im Stapel liegt... (http://bugs.freepascal.org/view.php?id=25397)
Zuletzt geändert von wp_xyz am Di 21. Apr 2015, 16:17, insgesamt 1-mal geändert.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Kein "Bold" in ListView

Beitrag von Michl »

Ja, kann ich bestätigen.

Als Workaround könntest du ja evtl. sowas machen (habe ich nur schnell zusammengeklimpert, nicht ausführlich getestet):

Code: Alles auswählen

procedure TForm1.ListView1AdvancedCustomDrawSubItem(
  Sender: TCustomListView; Item: TListItem;
  SubItem: Integer; State: TCustomDrawState;
  Stage: TCustomDrawStage; var DefaultDraw: Boolean);
var
  aRect: TRect;
begin
  if Item.SubItems.Count <= SubItem then Exit;
 
  DefaultDraw:=False;
  aRect:=Item.DisplayRectSubItem(SubItem, drBounds);
  ListView1.Canvas.Font.Style:=[fsBold];
  ListView1.Canvas.Font.Color:=clRed;
  ListView1.Canvas.TextRect(aRect, aRect.Left, aRect.Top, Item.SubItems[SubItem - 1]);
end;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

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

Re: Kein "Bold" in ListView

Beitrag von BeniBela »

Da war mal was ... hier: http://bugs.freepascal.org/view.php?id=7059#c28645

CDRF_NEWFONT muss von der LCL in der Windows callback function gesetzt werden

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: Kein "Bold" in ListView

Beitrag von catweasel »

Danke für die Infos

Gruß
Michael

Antworten