Toon posts:

[Delphi] Treeview elke node andere kleur

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik ben momenteel bezig een kleine master-detail treeview aan het maken.

hierin heb je hoofdstappen en een aantal substappen.

elke stap heeft een bepaalde status (in uitvoering, afgehandeld).
Naar gelang de status van een hoofd/substap wil ik de node een kleur geven.

Het lukt me wel dit voor alle (subnodes) te doen, maar niet per node.

Hoe doe ik dit?

- Hoofdstap1 (kleur rood)
--- Substap1 (geel)
--- Substap2 (rood)
--- Substap3 (groen)
- Hoofdstap2 (geel)
--- Substap1 (groen)

etc

Wat ik nu dus heb is dat hij de kleur van de laatste node pakt.. Dus in dit voorbeeld zouden alle hoofstappen geel worden en alle substappen groen. En dat wil ik niet.

alvast bedankt.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Laat even zien wat je nu doet dan. Heeft een TTreeNode geen Level property ofzo?

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
OK, het is me gelukt:

Voor degenen die het willen weten: (sterk vereenvoudigd)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
TNodeData = class
  private
    ID : Integer;
    status : Integer;
  end;

implementation

// aanmaken van de stappen en toekennen data

procedure DoeIets;
var
  node, subnode : TTreeNode;
  pSerDocRec : Pointer;
begin
  treeView.Items.Clear;

    node := TreeView.Items.AddChildObject(nil, [Waarde uit Database], pSerDocRec);
    node.data := TNodeData.Create;
    TNodeData(node.data).ID:= [Waarde uit query];
    TNodeData(node.data).Status:= [Nog een waarde uit query];
end;

procedure TreevViewCustomDrawItem(
  Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
  with TfrmCalamStappen1.treeCalamStappen.Canvas do
  begin
    // rootnode
    if Node.Level = 0 then
    begin
    // doe iets
    end
    else // subnode
    begin
    // Subnodes kleuren
      case TNodeData(Node.Data).status of
          0:    begin
                  Font.Color := clMaroon;
                end;
    // Afgehandeld -> Groen
          1:    begin
                  Font.Color := clGreen;
                end;
    // In behandeling -> Geel
          2:    begin
                Font.Color := clYellow;
                end;
      end;
    end;
  end;
end;