Organização de itens no Treeview - CustomSort

Delphi

07/03/2005

Pessoal, alguém poderia me dar uma ajuda no uso do método CustomSort?
Acredito que este método possa me resolver o problema que estou tendo e que não foi possível resolver nem com SortType nem com AlfaSort.

Valeu!
wbb


Wbb

Wbb

Curtidas 0

Respostas

Marcelo Saviski

Marcelo Saviski

07/03/2005

Esse CustomSort é um evento do TreeView? eu não tenho o Delphi aqui para poder ver


GOSTEI 0
Wbb

Wbb

07/03/2005

Não. É um método.


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

07/03/2005

mas não tem um evento, tipo OnCustomSort, ou algo parecido que aconteça quando chama o TreeView.CustomSort?

se tiver coloque o cabeçalho dele aqui...


GOSTEI 0
Wbb

Wbb

07/03/2005

O Treeview, na versão nativa do Delphi 5 Enterprise (que estou usando), não possui o evento OnCustomSort, nem nada relacionado a organização dos itens.

wbb


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

07/03/2005

O Evento é OnCompare

procedure TreeViewCompare(Sender: TObject; Node1, Node2: TTreeNode;
    Data: Integer; var Compare: Integer)


Chame

TreeView.CustomSort(nil, 0 True|False);


no primeiro parametro vc passaria uma função para comparar um item com outro, se vc passar nil ele usa o evento OnCompare

o 2º parametro e um valor qualquer, ele vai ser repassado no parametro Data no evento.

no 3º, se indicar True, vai fazer as comparações com os primeiros itens itens, depoios com os subitens, os subitens dos subitens e assim vai
se indicar false compara apenas os primeiros nodes

vc pode chamala para um Node especifico também, não apenas para o TreeView inteiro

TreeView.Items[0].CustomSort(nil, 0, True|False);


quando executar o método CustomSort, o evento OnCompare vai ser acionado, vc deve comparar o Node1 com o Node2
se o Node1 deve ficar acima do Node2 então altere o parametro Compare para um valor menor que zero, caso deva ficar abaixo, altere para um valor maior que zero.
Ou talvez seja o contrário, menor que zero para uma coisa e maior para outra, tem que testar.

para testar, vc poderia fazer isso: no OnCompare

Compare := CompareText(Node1.Text, Node2.Text);


e chame o CustomSort

TreeView.Items[0].CustomSort(nil, 0, False);


Nessa caso ele ordenaria alfabéticamente apenas os Nodes que estiverem dentro do primeiro item do TreeView, sem ordenar os subitens deles nem os outros itens

Espero que ajude


GOSTEI 0
POSTAR