CustomDrawItem unter GTK2

Rund um die LCL und andere Komponenten
Antworten
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

CustomDrawItem unter GTK2

Beitrag von monta »

Hallo,

ich mal wieder :wink:

Gibt es bekannte Einschränkungen bei CustomDraw Events unter GTK 2, welche ich ggf. übersehen habe? Ich Versuche, mit dem entsprechenden Code unter GTK 2 eine ListView mit Icons und Zellhintergründe zu versehen. Unter Windows funktionierte der Code problemlos, unter Linux/GTK2 zeigt sich keinerlei Reaktion.

Die beiden relevanten Funktionen extrahiert:

Code: Alles auswählen

procedure Tform_approve.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
  if (Item.SubItems.Count > 1) and (SubItem = 2) then
    if Item.SubItems.Strings[SubItem - 1] = '=' then
      ListView1.Canvas.Brush.Color := clGreen
    else
      if Item.SubItems.Strings[SubItem - 1] = '?' then
        ListView1.Canvas.Brush.Color := clYellow
      else
        ListView1.Canvas.Brush.Color := clRed;
end;
 
procedure Tform_approve.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if Item.SubItems.Count > 0 then
    if Item.SubItems.Strings[1] = '=' then
      Item.ImageIndex := 1
    else
      if Item.SubItems.Strings[1] = '?' then
        Item.ImageIndex := 2
      else
        Item.ImageIndex := 0;
end;


Falls es dafür eine Lösung gibt, würde ich die Anwendung komplett auf GTK 2 umstellen. Ohne diese Funktion ist es leider nicht ganz so schön anzusehen... :(
Johannes

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: CustomDrawItem unter GTK2

Beitrag von theo »

Keine Ahnung. Ich nehme an du bist du im vsReport Modus?
Was du vllt. machen kannst, ist am Ende von ListView1CustomDrawSubItem etc. selber zeichnen:

Code: Alles auswählen

 
ListView1.Canvas.FillRect(item.DisplayRectSubItem(subitem,drBounds));
bzw.
ListView1.Canvas.FillRect(Item.DisplayRect(drBounds))


Kannst ja mal probieren. Sonst vllt. VirtualTrees verwenden.

Antworten