Treeview com CheckBox

Delphi

14/09/2006

Pessoal, se voces olharem no componente User Control, na Unit ´UserPermis_U.pas´, voces irao notar que o componente usado para criar a lista de de permissoes - (itens do menu em forma de arvore com checkBox para cada item) - é um Treeview nativo. Se nao me engano a muito tempo atraz ja tinha visto um exemplo assim em algum lugar desse planeta, mas nao lembro mais onde.

Bom analizei as units do User control atras de informaçoes mas nao consegui descobrir como é feito esse lance de cada node ali do Treeview ser um CheckBox, independente do node ser root ou filho

como no Turbo delphi nao posso instalar componentes na IDE, estou criando na mão a rotina de privilégio para usuários. se alguem tiver alguma informaçao de como fazer Treeview com CheckBox, seria nao só para mim - como para muitos colegas - uma informaçao de grande valiosidade...

abraços a todos!!


Mahdak

Mahdak

Curtidas 0

Respostas

Delphi32

Delphi32

14/09/2006

a UserControl possui uma ImageList com imagens dos ´frames´ de uma CheckBox. Ao adicionar um item no TreeView, ele simplesmente seta a imagem para o index da ImageList:

TreeView1.Images := ImageList1;
with TreeView1.Items.Add(´Teste´) do
begin
ImageIndex := 1;
end;

E nos eventos OnClick etc, ele vai trocando o Index da Imagem desse item. Se quiser a ImageList já com os ´frames´ da CheckBox, aqui vai:

ps.: basta selecionar esse texto todo, copiar, selecionar o form e dar Ctrl+V.

object ImageList1: TImageList
  Left = 12
  Top = 450
  Bitmap = {
    494C010103000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
    0000000000003600000028000000400000001000000001002000000000000010
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000084848400C6DEC600C6DE
    C600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DE
    C600C6DEC6000000000000000000000000000000000084848400C6DEC600C6DE
    C600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DE
    C600C6DEC6000000000000000000000000000000000084848400C6DEC600C6DE
    C600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DE
    C600C6DEC6000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC6000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC600000000000000000000000000000000008484840084848400C6C6
    C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
    C600C6DEC6000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC6000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC600000000000000000000000000000000008484840084848400C6C6
    C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6
    C600C6DEC6000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC6000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC600000000000000000000000000000000008484840084848400C6C6
    C600C6C6C600848484008484840084848400C6C6C600C6C6C600C6C6C600C6C6
    C600C6DEC6000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC6000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC600000000000000000000000000000000008484840084848400C6C6
    C6008484840084848400848484008484840084848400C6C6C600C6C6C600C6C6
    C600C6DEC6000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC6000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC600000000000000000000000000000000008484840084848400C6C6
    C6008484840084848400C6C6C600848484008484840084848400C6C6C600C6C6
    C600C6DEC6000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC6000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC600000000000000000000000000000000008484840084848400C6C6
    C60084848400C6C6C600C6C6C600C6C6C600848484008484840084848400C6C6
    C600C6DEC6000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC6000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC600000000000000000000000000000000008484840084848400C6C6
    C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484840084848400C6C6
    C600C6DEC6000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC6000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC600000000000000000000000000000000008484840084848400C6C6
    C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6
    C600C6DEC6000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC6000000000000000000000000000000000084848400848484000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000C6DEC600000000000000000000000000000000008484840084848400C6C6
    C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
    C600C6DEC6000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000084848400848484008484
    8400848484008484840084848400848484008484840084848400848484008484
    8400C6DEC6000000000000000000000000000000000084848400848484008484
    8400848484008484840084848400848484008484840084848400848484008484
    8400C6DEC6000000000000000000000000000000000084848400848484008484
    8400848484008484840084848400848484008484840084848400848484008484
    8400C6DEC6000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000084848400848484008484
    8400848484008484840084848400848484008484840084848400848484008484
    8400848484000000000000000000000000000000000084848400848484008484
    8400848484008484840084848400848484008484840084848400848484008484
    8400848484000000000000000000000000000000000084848400848484008484
    8400848484008484840084848400848484008484840084848400848484008484
    8400848484000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    000000000000000000000000000000000000424D3E000000000000003E000000
    2800000040000000100000000100010000000000800000000000000000000000
    000000000000000000000000FFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFF0000
    FFFFFFFFFFFF000080078007800700009FF79FF7800700009FF79DF780070000
    9FF798F7800700009FF79077800700009FF79237800700009FF7971780070000
    9FF79F97800700009FF79FD7800700009FF79FF7800700008007800780070000
    8007800780070000FFFFFFFFFFFF000000000000000000000000000000000000
    000000000000}
end



t+!


GOSTEI 0
Mahdak

Mahdak

14/09/2006

ok, aplicando agora um código para trocar as imagens para checado e nao checado, encontrei um problema, quando clico no node, ele nao altera a imagem de imediato, mas sim só quando eu clico em outro node. dae aquela imagem que eu havia clicado anteriormente troca de imagem...

se alguem puder dar uma mao, o código ta logo abaixo:

procedure TCadLogin.TVClick(Sender: TObject);
var i: integer;
Nodo : TTreenode;
begin
Nodo := TV.Selected;
 for i:= 0 to (TV.Items.Count - 1) do
   begin
        if TV.Items[i].Text = TV.Selected.Text then
        begin
            if TV.Items[i].ImageIndex = 0 then
            TV.Items[i].ImageIndex := 1
            else
                TV.Items[i].ImageIndex := 0;

        TV.Select ( Nodo ); // retorna o foco para o node selecionado
        end;
    end;
end;



GOSTEI 0
Delphi32

Delphi32

14/09/2006

Faça assim:

TreeView1.Selected.ImageIndex := 1; //ou 2

Não entendi por que está fazendo esse for...

t+!


GOSTEI 0
Mahdak

Mahdak

14/09/2006

Faça assim: TreeView1.Selected.ImageIndex := 1; //ou 2 Não entendi por que está fazendo esse for... t+!


desculpe amigo, com o for eu só estava fazendo de forma complicada o que voce resumiu em uma linha, porem com o seu codigo acontece o mesmo do que com o meu... e agora?


GOSTEI 0
POSTAR