Colocar CheckBox num TreeView
É possível colocar CheckBox num TreeView? Não quero componentes de terceiros.
Frederico Brigatte***
Curtidas 0
Respostas
Wilson Junior
27/09/2011
O que você pode fazer é simular o checkbox com imagens (uma marcada e outra não marcada).
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0
Frederico Brigatte***
27/09/2011
Sim, para colocar nos nós
GOSTEI 0
Frederico Brigatte***
27/09/2011
Quero que apareça um checkbox no treeview, marcado e desmarcado, é isso.
GOSTEI 0
Júlio Ferreira
27/09/2011
O TreeView possui duas propriedaes na definição dos nódulos chamadas de StateIndex e ImageIndex.
Cada objeto TTreeNode, que representa um nódulo do TreeView, possui essas propriedades...
A forma de fazer com que seu TreeView possua um CheckBox é definindo o valor para aessas propriedades.
StateIndex = representa o estado para o CheckBox do nódulo
ImageIndex = representa a imagem que será exibida para o CheckBox do nódulo
A forma mais prática seria criar uma classe sua, como TMeuTreeView, herdando de TTreeView para realizar esse controle. Dentro dela, vc implementaria um método público setState( nodule, estado ) para realizar esse controle:
Ainda é possível realizar o controle para o estado Grayed, que é o checkbox com um quadradinho no lugar do visto em forma de v.
Cada objeto TTreeNode, que representa um nódulo do TreeView, possui essas propriedades...
A forma de fazer com que seu TreeView possua um CheckBox é definindo o valor para aessas propriedades.
StateIndex = representa o estado para o CheckBox do nódulo
ImageIndex = representa a imagem que será exibida para o CheckBox do nódulo
A forma mais prática seria criar uma classe sua, como TMeuTreeView, herdando de TTreeView para realizar esse controle. Dentro dela, vc implementaria um método público setState( nodule, estado ) para realizar esse controle:
procedure TMeuTreeView.setState( nodulo: TTreeNode; state: Boolean );
begin
if Assigned( nodulo ) then
begin
{ ** Realizando o controle marcado/desmarcado do item informado ** }
if state then
nodulo.StateIndex := 0
else
nodulo.StateIndex := 1;
end;
end;
Ainda é possível realizar o controle para o estado Grayed, que é o checkbox com um quadradinho no lugar do visto em forma de v.
GOSTEI 0
Frederico Brigatte***
27/09/2011
Não entendi direito, tem como fazer um exemplo? Já possuo a rotina para pegar os menus e jogar na treeview, quero agora colocar a checkbox.
GOSTEI 0
Frederico Brigatte***
27/09/2011
Como usar esse código? Como fazer a Classe?
GOSTEI 0
Frederico Brigatte***
27/09/2011
Ué, Ninguém?
GOSTEI 0
Frederico Brigatte***
27/09/2011
To tentando na luta. Estou precisando de ajuda. Coloquei um imagelist no form, dentro dele, duas imagens, uma marcada e outra não. Tudo bem até ai. atribuo as imagens em execução, pois monto a TreeView com dados do MainMenu. Quando clico no botão montar a Tree, ele coloca a imagem não marcada no Pai, e não queria isso, queria só no filho.
Ex.:
-[]Administração
-..[]Cadastro Usuários
...[]Perfil
[]Clientes
[]Fornecedores
-[]Consultar
[]
[]
.
.
Está montando assim. O código está embaixo:
//procedure TForm1.mtdMenuItemToTreeView(aoMenuItem: TMenuItem; aoNode : TTreeNode);
//var
// I: Integer;
//begin
// for I := 0 to aoMenuItem.Count -1 do
// begin
// mtdMenuItemToTreeView(aoMenuItem.Items[i], TreeView1.Items.AddChild(aoNode, //AnsiReplaceStr(aoMenuItem.Items[i].Caption, &, EmptyStr)));
// end;
//end;
//procedure TForm1.btnArvoreClick(Sender: TObject);
//begin
// TreeView1.Items.Clear;
// mtdMenuItemToTreeView(MainMenu1.Items, nil);
// TreeView1.FullExpand;
//end;
Ex.:
-[]Administração
-..[]Cadastro Usuários
...[]Perfil
[]Clientes
[]Fornecedores
-[]Consultar
[]
[]
.
.
Está montando assim. O código está embaixo:
//procedure TForm1.mtdMenuItemToTreeView(aoMenuItem: TMenuItem; aoNode : TTreeNode);
//var
// I: Integer;
//begin
// for I := 0 to aoMenuItem.Count -1 do
// begin
// mtdMenuItemToTreeView(aoMenuItem.Items[i], TreeView1.Items.AddChild(aoNode, //AnsiReplaceStr(aoMenuItem.Items[i].Caption, &, EmptyStr)));
// end;
//end;
//procedure TForm1.btnArvoreClick(Sender: TObject);
//begin
// TreeView1.Items.Clear;
// mtdMenuItemToTreeView(MainMenu1.Items, nil);
// TreeView1.FullExpand;
//end;
GOSTEI 0
Frederico Brigatte***
27/09/2011
Ninguém?????
GOSTEI 0
Frederico Brigatte***
27/09/2011
Ninguém pra ajudar?
GOSTEI 0
Jeferson Zonta
27/09/2011
http://delphi.about.com/od/vclusing/l/aa092104a.htm
Pronto..
Pronto..
GOSTEI 0
Frederico Brigatte***
27/09/2011
Queria montar o treeview com dados vindos do mainmenu com os checkbox
GOSTEI 0
Frederico Brigatte***
27/09/2011
Queria montar o treeview com dados vindos do mainmenu com os checkbox
GOSTEI 0
Gladson Reis
27/09/2011
Ola !
Primeiro crie estas constantes
Depois esta função :
No create do seu form:
Espero ter ajudado.
Primeiro crie estas constantes
const TVIS_CHECKED = $2000;
TVIS_UNCHECKED= $1000;
Depois esta função :
function IsChecked(Node :TTreeNode):boolean; var TvItem:TTVItem; begin TvItem.Mask := TVIF_STATE; TvItem.hItem := Node.ItemId; TreeView_GetItem(Node.TreeView.Handle, TvItem); Result :=(TvItem.State and TVIS_CHECKED>0); end;
No create do seu form:
SetWindowLong(TreeView1.Handle, GWL_STYLE, GetWindowLong(TreeView1.Handle, GWL_STYLE) or TVS_CHECKBOXES);
Espero ter ajudado.
GOSTEI 0