[DELPHI] Treeview

Pagina: 1
Acties:
  • 108 views sinds 30-01-2008
  • Reageer

  • yodax
  • Registratie: Januari 2000
  • Laatst online: 28-04 08:47
Hoi,

Ik heb een probleem met een treeview component in delphi 6. Ik bouw deze runtime op. Dat gaat allemaal goed, echter de icoontjes die ik er aan assign worden niet altijd goed getoond.

Als je een Node selecteert neemt hij altijd ImageIndex := 0 aan. Ook als je verder door de boom heen wandelt gaan alle images van de bovenliggende node op ImageIndex := 0 staan.

Hieronder zet ik maar een stuk code neer, het opbouwen werkt dus. Het is echter ter illustratie hoe ik de ImageIndex set.

Mijn vraag is dus: Hoe kan ik voorkomen dat de plaatjes verspringen als ik de nodes selecteer.

Ik gebruik delphi 6.

Alvast bedankt!
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
procedure VulKlanten ( Boom : TTreeView ; Node : TTreeNode ; dm : TdmMRS );
var
  huidigeKlant, huidigProject, huidigeFase : TTreeNode;
  klantNaam : string;
  projectCode : string;
begin
  huidigProject := nil;

  if dm.CDSKlantProject.Active then
    dm.CDSKlantProject.Close;

  dm.CDSKlantProject.Params[0].AsString:='MKR';
  dm.CDSKlantProject.Open;
  try
    dm.CDSKlantProject.First;

    while not dm.CDSKlantProject.Eof do
    begin
    // Als het een klant is die we nog niet hebben gezien maken we een nieuwe node aan
    if klantNaam <> dm.CDSKlantProject.FieldByName('RELATIE_CODE').AsString then
    begin
      klantNaam := dm.CDSKlantProject.FieldByName('RELATIE_CODE').AsString;
      huidigeKlant := Boom.Items.AddChild(Node,dm.CDSKlantProject.FieldByName('RELATIE_CODE').AsString);
      huidigeKlant.ImageIndex := 4;
    end;

    // Als het een project is die we nog niet hebben gezien maken we een nieuwe node aan
    if projectCode <> dm.CDSKlantProject.FieldByName('PROJECT_CODE').AsString then
    begin
      projectCode := dm.CDSKlantProject.FieldByName('PROJECT_CODE').AsString;
      huidigProject := Boom.Items.AddChild(huidigeKlant,dm.CDSKlantProject.FieldByName('PROJECT_CODE').AsString);
      huidigProject.ImageIndex := 3;
    end;

    // We vullen alleen de fases die niet leeg zijn, waarom zijn die er eigenlijk??
    if dm.CDSKlantProject.FieldByName('FASE_CODE').AsString <> '' then
    begin
      huidigeFase := Boom.Items.AddChild(huidigProject,dm.CDSKlantProject.FieldByName('FASE_CODE').AsString);
      huidigeFase.ImageIndex := 6;
    end;

    dm.CDSKlantProject.Next;
    end;
  finally
    dm.CDSKlantProject.Close;
  end;
end;

Verwijderd

Je moet
code:
1
TTreeNode.SelectedIndex

setten

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 14:17

Knutselsmurf

LED's make things better

Op maandag 01 oktober 2001 14:22 schreef yodax onder andere het volgende:

Mijn vraag is dus: Hoe kan ik voorkomen dat de plaatjes verspringen als ik de nodes selecteer.
Een Listitem heeft behalve een imageindex ook selected index. Daarmee kun je dus een ander icoontje aan een item toekennen als deze geselecteerd is. Als deze selected index op -1 blijft staan, zal je icoontje verdwijnen als je hem selecteerd.

- This line is intentionally left blank -


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:07
Op maandag 01 oktober 2001 14:22 schreef yodax het volgende:

Mijn vraag is dus: Hoe kan ik voorkomen dat de plaatjes verspringen als ik de nodes selecteer.
Ervoor zorgen dat de Image voor het selected item hetzelfde is met die images die gebruikt worden voor de niet selected items.

https://fgheysels.github.io/


  • yodax
  • Registratie: Januari 2000
  • Laatst online: 28-04 08:47
SelectedIndex was idd de oplossing, bedankt!