Wszystko działa dokładnie tak jak chciałem. Śliczne dzięki @abrakadaber.
procedure TfrmChatList.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
var
Data: PCzat;
begin
Data := Sender.GetNodeData(Node);
CellText := '';
case Column of
0: // Main column
begin
CellText := Data.Login + ' (' + IntToStr(Data.Ile_Zgloszen) + ')';
end;
1: // Wejscie
begin
if TimeToStr(Data.WEJSCIE) = '00:00:00' then
CellText := ''
else
CellText := FormatDateTime('hh:mm', Data.WEJSCIE);
end;
2: // Projekt
begin
cellText := Data.NAZWA_PROGRAMU;
end;
3: // Klient
begin
cellText := Data.NAZWA_KLIENTA;
end;
end;
end;
procedure TfrmChatList.VSTMeasureItem(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer);
var
Data: PCzat;
begin
Data := Sender.GetNodeData(Node);
if Data.Czat_Opis = '' then
NodeHeight := TVirtualStringTree(Sender).DefaultNodeHeight
else
NodeHeight := TVirtualStringTree(Sender).DefaultNodeHeight + 15;
end;
procedure TfrmChatList.VSTPaintText(Sender: TBaseVirtualTree;
const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
TextType: TVSTTextType);
var
Data: PCzat;
begin
Data := Sender.GetNodeData(Node);
if Column = 0 then
begin
if Data.Zalogowany = 1 then
begin
if Data.NAZWA_KLIENTA = '-' then
begin
TargetCanvas.Font.Color := clRed;
Data.Hint := '';
end;
if Data.Praca_Zgodna = 0 then
begin
TargetCanvas.Font.Color := clRed;
Data.Hint := 'Użytkownik nie pracuje wg. przydzielonych zgłoszeń.';
end
else
begin
if Data.Praca_Zgodna = 1 then
begin
TargetCanvas.Font.Color := clBlack;
Data.Hint := 'Użytkownik pracuje zgodnie z przydzielonymi zgłoszeniami.';
end
else
begin
if Data.Praca_Zgodna = 3 then
begin
TargetCanvas.Font.Color := clBlue;
Data.Hint := 'Użytkownik nie ma przydzielonych zgłoszeń.';
end;
end;
end;
end;
end;
end;
procedure TfrmChatList.VSTGetNodeDataSize(Sender: TBaseVirtualTree;
var NodeDataSize: Integer);
begin
NodeDataSize := SizeOf(TCzat);
end;
procedure TfrmChatList.VSTGetImageIndexEx(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: Integer;
var ImageList: TCustomImageList);
var
Data: PCzat;
begin
// For this demo only the normal image is shown, you can easily
// change this for the state and overlay images.
ImageList := ImageList_Czat;
case Kind of
ikNormal, ikSelected:
begin
Data := Sender.GetNodeData(Node);
Ghosted := Node.Index = 1;
case Column of
-1, // general case
0: // main column
begin
ImageIndex := Data.Status;
end;
end;
end;
ikOverlay:
begin
// Enable this code to show an arbitrary overlay for each image.
// Note the high overlay index. Standard overlays only go up to 15.
// Virtual Treeview allows for any number.
// ImageList := ImageList1;
// ImageIndex := 58;
end;
end;
end;
procedure TfrmChatList.VSTGetHint(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle;
var HintText: string);
var
data: PCzat;
begin
data := Sender.GetNodeData(Node);
if (Column = 2) or (Column = 3) then
begin
if Data.Opis = '' then
HintText := 'Brak opisu'
else
HintText := Data.Opis;
end
else
if Column = 1 then
HintText := 'Wersja SKP: ' + Data.Wersja
else
HintText := data.Hint;
end;
procedure TfrmChatList.VSTBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var
Data: PCzat;
begin
Data := Sender.GetNodeData(Node);
if Data.Czat_Opis <> '' then
begin
ContentRect.Bottom := ContentRect.Top + (ContentRect.Bottom - ContentRect.Top) div 2 + 7;
end;
end;
procedure TfrmChatList.VSTAfterItemPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect);
var
Data: PCzat;
begin
Data := Sender.GetNodeData(Node);
if Data.Czat_Opis <> '' then
begin
TargetCanvas.Font.Color := $00454545;
TargetCanvas.Font.Size := 7;
TargetCanvas.TextOut(ItemRect.Left + 26, ItemRect.Top + (ItemRect.Bottom - ItemRect.Top) div 2 + 3, Data.Czat_Opis);
end;
end;