merhaba, doğru foruma doğru soru meselesi kenarda dursun azizim. bunca vakitte cevap verilmemesinin bu şekilde açıklanabileceğini zannetmiyorum. Neyse.
İmdi, ben bu meretin eğitimine dair bir pdf buldum ve meseleyi oradan çözdüm. Şöyle ki, VirtualStrinTree nesnesine düğüm ekleme işlemini addchild ile yapıyoruz.
Addchild metodu iki adet değişken alıyor: birincisi düğüm (ki PvirtualNode tipinde bir değişken olmak icabeder yahut nil ), ikincisi ise bir pointer. ikinci parametre ile o düğüme data aktarıyoruz [Ben bunun yerine yine aynı pdf dosyasından arakladığım foksiyonu da dercedeğim]. VirtualStrinTree nesnedinin onGetText hadisesinde ise bu datalardan birisini CELLTEXT olarak tesbit ediyoruz. Bunu bir de kodlar söylesin :
Kod: Tümünü seç
ype
TTreeData = record
isim : string;
kartNo : integer;
end;
PTreeData = ^TTreeData;
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
bSaat: TButton;
.............
aktaracağımız datalar için bir tip belirledik. Ondanda Ptreedata yı imal ettik.
Kod: Tümünü seç
function AgacYap(AVST: TCustomVirtualStringTree; ANode:
PVirtualNode;
ARecord: TTreeData): PVirtualNode;
var
Data: PTreeData;
begin
Result:=AVST.AddChild(ANode);
Data:=AVST.GetNodeData(Result);
Avst.ValidateNode(Result, False);
Data^.isim:=ARecord.isim;
Data^.kartNo := ARecord.kartNo;
end;
bu fonksiyonu düğüm eklemede kullanacağız.
Kod: Tümünü seç
var
birimSayisi, i, birimKodu, birimPersonelSayisi: integer;
baba, ogul : PVirtualNode;
babaDetay, ogulDetay : TTreeData;
j: Integer;
begin
with ADOQuery1 do
begin
close;
ConnectionString := CONN;
SQL.Clear;
SQL.Add('select * from birimler order by Birim');
Open;
end;
//BİRİMLER BABA PERSONELLER OĞUL
birimSayisi := ADOQuery1.RecordCount;
for I := 0 to birimSayisi - 1 do
begin
babaDetay.isim := ADOQuery1.FieldByName('birim').AsString; //BİRİMLER İÇİN SADECE İSİMLERİ LAZIM
birimKodu := ADOQuery1.FieldByName('BirimKodu').AsInteger;
VST.BeginUpdate;
VST.NodeDataSize := SizeOf(TtreeData);
baba := AgacYap(VST,nil,babaDetay);
baba.CheckType := ctTriStateCheckBox;
with ADOQuery2 do
begin
close;
ConnectionString := CONN;
SQL.Clear;
SQL.Add('select * from Kisiler where BirimKodu like'+QuotedStr(IntToStr(birimKodu))); //BABANIN BİRİMKODU NEYSE SADECE O PERSONELİ ALIYORUZ
SQL.Add('order by Isim');
open;
end;
birimPersonelSayisi := ADOQuery2.RecordCount;
for j := 0 to birimPersonelSayisi - 1 do
begin
ogulDetay.isim := ADOQuery2.FieldByName('Isim').AsString; //PERSONELİN ADINI ALIYORUZ
ogulDetay.kartNo := ADOQuery2.FieldByName('KartNo').AsInteger; //PERSONELİN KART NUMARASINI ALIYORUZ
ogul := AgacYap(VST,baba,ogulDetay);
ogul.CheckType := ctTriStateCheckBox;
ADOQuery2.RecNo := ADOQuery2.RecNo + 1;
end;
VST.EndUpdate;
ADOQuery1.RecNo := ADOQuery1.RecNo +1 ;
end;
end;
böyleyken böyle.