Toon posts:

[Delphi] Node in treeview focus geven

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb momenteel een een treeview met hoofdstappen en substappen. Deze hebben beide een status (in behandeling of afgehandeld)

-Hoofdstap1
--- Substap1
--- Substap2
-Hoofdstap2

Hoe kan ik er voor zorgen dat na het updaten van een status de laatst gebruikte node weer de focus krijgt. En/Of de hoofdstap expanded is.

Dus stel dat ik Substap2 update (status wordt afgehandeld. substap2 wordt dan groen).

Echter na de refresh ziet m'n tree er dan zo uit

+Hoofdstap1
-Hoofdstap2

ipv
-Hoofdstap1
---Substap1
---Substap2
-Hoofdstap2

Na het updaten van de status Clear ik de treeview en teken ik de tree opnieuw
Hieronder de procedure die ik aanroep. Ik maak ook gebruik van tNode.data, maar die heb ik er uit gehaald.
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
procedure TfrmCalamStappen.prCalamiteitStappen(_iCalamiteitID : Integer);
var
  node, subnode : TTreeNode;
  pSerDocRec : Pointer;
begin
  treeCalamStappen.Items.Clear;
  treeCalamStappen.Items.BeginUpdate;
//============================================================================
//    Calamiteithoofdstappen -en substappen plaatsen in treeview
//============================================================================
  iCalamiteitID := _iCalamiteitID;
  dmSpo003.qryCalamiteitHoofdStappen.ParamByName('CLT_ID').Value := iCalamiteitID;
  dmSpo003.qryCalamiteitHoofdStappen.Open;
  dmSpo003.qryCalamiteitHoofdStappen.First;
  while not   dmSpo003.qryCalamiteitHoofdStappen.Eof do
  begin
    node := treeCalamStappen.Items.AddChildObject(nil, dmSpo003.qryCalamiteitHoofdStappen.FieldByName('CALAMITEITHOOFDSTAP').asstring, pSerDocRec);

    dmSpo003.qrySubstappen.ParamByName('CHP_ID').Value := dmSpo003.qryCalamiteitHoofdStappen.FieldByName('CHP_ID').AsInteger;
    dmSpo003.qrySubstappen.Open;
    dmSpo003.qrySubstappen.First;

// Subnodes aanmaken
    while not dmSpo003.qrySubstappen.Eof do
    begin
      subnode := treeCalamStappen.Items.AddChildObject(node, dmSpo003.qrySubstappen.FieldByName('CALAMITEITSUBSTAP').asstring, PSerDocRec);
      subnode.data := TNodeData.Create;
      dmSpo003.qrySubstappen.Next;
    end;
    dmSpo003.qrySubstappen.Close;
    dmSpo003.qryCalamiteitHoofdStappen.next;
   end;
    dmSpo003.qryCalamiteitHoofdStappen.Close;
    treeCalamStappen.Items.EndUpdate;
end;

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Voor het leeg maken van de lijst onthoud (Index, Text) je welke node geselecteerd is. Deze selecteer je na het vullen gewoon weer. Hier zijn standaard procedures voor die de TreeView te biedt.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Topicstarter
dat is het probleem..

ik kan die 'standaard' methode niet vinden :S

node index en text, etc is het probleem niet..

alleen hoe geef je hem de focus?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

TTreeView.Selected zetten op de TTreeNode die je wilt selecteren. Of TTreeNode.Selected op True zetten.

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


Verwijderd

Topicstarter
wanneer ik bijvoorbeeld:

[delphi]
treeCalamStappen.Selected := tNode;
[/delphi]

doe.. Gebeurd er niks. Wanneer je de childnode selecteerd. Wordt de parent dan ook automatisch expanded? Oftewel.. wordt de childnode dan ook weer zichtbaar. of zijn daar meer handelingen voor nodig?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:50

Creepy

Tactical Espionage Splatterer

Als je de node al hebt dan kan je ook de selected property van de node op true zetten. Je kan een node laten uitklappen en laten inklappen in code (zodat je bijv. alle parents van je geselecteerde node kan laten uitklappen). Hoe dit werkt staat prima uitgelegd in de Delphi help.

Zorg er wel voor dat de Treeview ook focus heeft anders zie je waarschijnlijk de selectie niet eens terug in je Treeview.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
OK, bleek dus dat de tNode weer leeg was (na het opnieuw opbouwen.)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  iNodeIndex := TNode.AbsoluteIndex;


// alle acties

// Opnieuw opbouwen tree

// Juiste tNode weer aanwijzen.
  tNode := treeCalamStappen.Items.Item[iNodeIndex];
  tNode.Focused := True;
  tNode.Selected := True;
// Of
  tNode := treeCalamStappen.Items.Item[iNodeIndex];
  treeCalamStappen.Selected := tNode;


Ik dank jullie voor de hulp

[ Voor 18% gewijzigd door Verwijderd op 26-08-2005 11:56 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

En TTreeNode.MakeVisible; aanroepen na het uitklappen om m in het zicht te scrollen.

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

Pagina: 1