Fórum Treeview #184548
26/09/2003
0
Ainda preciso clicar no Treeview e mostrar os dados em um grid, para isso preciso guardar o valor da chave, como eu faco isso no treeview.
Muito obrigado.
[]s
Caboldo
Curtir tópico
+ 0Posts
26/09/2003
Halexmaciel
não vou te passar um exemplo, mas te darei uma dica, pois a melhor forma de aprender é quebrando a cabeça, bem, é simples como vc colocará no treeview, primeiro vc chama uma query com seus parametros, depois que ela estiver cheia, faça uma while dela preenchendo o ClientDataset, depois é só vc fazer um while com o ClientDataSet, colocando os indices nos NODES do treeview. Falou
Gostei + 0
27/09/2003
Werlon Goulart
Resumindo vai clicando e sempre mostra o Pai e a Mãe do Animal.
Eu usei o TIBQuery pois uso o IB. Mas da pra portar facil.
Um Abraco
Werlon Goulart
unit UArvore;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, IBDatabase, IBCustomDataSet, IBQuery, StdCtrls, ComCtrls, Grids,
DBGrids, ExtCtrls, DBCtrls, Buttons, Wordcap, ImgList;
type
TfmArvore = class(TForm)
edNiveis: TTreeView;
TransactionMostraCategoria: TIBTransaction;
edImageCategoria: TImageList;
MSOfficeCaption1: TMSOfficeCaption;
IBDatabase1: TIBDatabase;
Panel2: TPanel;
BtSair: TSpeedButton;
Procedure MontaNivel(RecPai: Integer; NoPai:TTreeNode);
Procedure MontaPai(RecPai: Integer; NoPai:TTreeNode);
Procedure MontaMae(RecPai: Integer; NoPai:TTreeNode);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btSairClick(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmArvore: TfmArvore;
implementation
uses Umenu;
{$R *.DFM}
Procedure TfmArvore.MontaPai(RecPai: Integer; NoPai:TTreeNode);
Var qrPAI: TIBQuery;
No: TTreeNode;
begin
qrPai:=TIBQuery.Create(nil);
Try
qrPai.DataBase:=IBDatabase1;
qrPai.Transaction:=TransactionMostraCategoria;
qrPai.sql.Clear;
qrPai.SQL.Text:=´Select CODANIMAL, NOME, CODANIMAL_PAI, CODANIMAL_MAE from ANIMAL Where CODANIMAL=:Pai´;
qrPai.ParambyName(´Pai´).AsInteger:=RecPai;
qrPai.Open;
if Not qrPai.IsEmpty then begin
if NoPai<>edNiveis.TopItem then
NoPai.HasChildren:=Not qrPai.EOF;
No:=edNiveis.Items.AddChildObject(
NoPai, ´Pai - ´+qrPai[´NOME´], Pointer(qrPai.FieldByName(´CODANIMAL´).asInteger));
No.Expand(True);
No.ImageIndex:=1;
No.SelectedIndex := No.ImageIndex; // Mantem a imagem do No qndo tem o foco.
MontaPai(qrPai.FieldByName(´CODANIMAL_PAI´).asInteger, No);
MontaMae(qrPai.FieldByName(´CODANIMAL_MAE´).asInteger, No);
end;
Finally
qrPai.Free;
end;
end;
Procedure TfmArvore.MontaMae(RecPai: Integer; NoPai:TTreeNode);
Var qrMae: TIBQuery;
No: TTreeNode;
begin
qrMae:=TIBQuery.Create(nil);
Try
qrMae.DataBase:=IBDatabase1;
qrMae.Transaction:=TransactionMostraCategoria;
qrMae.sql.Clear;
qrMae.SQL.Text:=´Select CODANIMAL, NOME, CODANIMAL_PAI, CODANIMAL_MAE from ANIMAL Where CODANIMAL=:Mae´;
qrMae.ParambyName(´Mae´).AsInteger:=RecPai;
qrMae.Open;
if Not qrMae.IsEmpty then begin
if NoPai<>edNiveis.TopItem then
NoPai.HasChildren:=Not qrMae.EOF;
No:=edNiveis.Items.AddChildObject(
NoPai, ´Mãe - ´+qrMae[´NOME´], Pointer(qrMae.FieldByName(´CODANIMAL´).asInteger));
No.ImageIndex:=2;
No.SelectedIndex := No.ImageIndex; // Mantem a imagem do No qndo tem o foco.
MontaPai(qrMae.FieldByName(´CODANIMAL_PAI´).asInteger, No);
MontaMae(qrMae.FieldByName(´CODANIMAL_MAE´).asInteger, No);
end;
Finally
qrMae.Free;
end;
end;
Procedure TfmArvore.MontaNivel(RecPai: Integer; NoPai:TTreeNode);
Var qrSubNivel: TIBQuery;
No: TTreeNode;
Aux:String;
begin
Aux:=´´;
qrSubNivel:=TIBQuery.Create(nil);
Try
qrSubNivel.DataBase:=IBDatabase1;
qrSubNivel.Transaction:=TransactionMostraCategoria;
if RecPai=0 then begin
qrSubNivel.sql.Clear;
qrSubNivel.SQL.Text:=´Select CODANIMAL, NOME, CODANIMAL_PAI, CODANIMAL_MAE ´+
´from ANIMAL Where (CODANIMAL_PAI IS NOT NULL OR CODANIMAL_MAE IS NOT NULL) ´+
´Or (CODANIMAL_PAI IS NULL OR CODANIMAL_MAE IS NULL) ORDER BY NOME´;
end;
qrSubNivel.Open;
if NoPai<>edNiveis.TopItem then
NoPai.HasChildren:=Not qrSubNivel.EOF;
While not qrSubNivel.Eof do begin
No:=edNiveis.Items.AddChildObject(
NoPai, qrSubNivel[´NOME´], Pointer(qrSubNivel.FieldByName(´CODANIMAL´).asInteger));
MontaPai(qrSubNivel.FieldByName(´CODANIMAL_PAI´).asInteger, No);
MontaMae(qrSubNivel.FieldByName(´CODANIMAL_MAE´).asInteger, No);
No.ImageIndex:=0;
No.SelectedIndex := No.ImageIndex; // Mantem a imagem do No qndo tem o foco.
qrSubNivel.Next;
end;
Finally
qrSubNivel.Free;
end;
end;
procedure TfmArvore.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
fmArvore:=Nil;
Action:=CAFree;
end;
procedure TfmArvore.btSairClick(Sender: TObject);
begin
fmArvore.Close;
end;
procedure TfmArvore.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#27 then btSairClick(Sender);
end;
procedure TfmArvore.FormCreate(Sender: TObject);
begin
MontaNivel(0,edNiveis.TopItem);
end;
end.
Gostei + 0
30/09/2003
Caboldo
Fico agradecido pela ajuda q vc me deram, ainda nao completei meu trabalho, mas ja tive ideia de como funciona, e agora estou fazendo teste para aplicar
muito obrigado
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)