Bir çalışma yapıyorum. Ufak bir sorunla karşılaştım. Yardımcı olabilirseniz çok sevinirim.
Aşağıdaki gibi bir kod yazdım. bu kod tam olarak istediğimi yapıyor. Fakat Accsess violation hata mesajı da veriyor. Nerde eksikliğim var bilemedim.
Break ile hatayı takip ettiğimde alttaki fonksiyona gidiyor.
function TTreeNode.GetTreeView: TCustomTreeView;
begin
Result := Owner.Owner;
end;
Kod: Tümünü seç
procedure TfrmMain.GetTreeChilds(ANode: TTreeNode);
begin
ANode := ANode.GetFirstChild;
if ANode = nil then
Exit;
repeat
ANode.ImageIndex := tvw.Selected.ImageIndex;
ANode.SelectedIndex := tvw.Selected.ImageIndex;
ANode.ExpandedImageIndex := tvw.Selected.ImageIndex;
GetTreeChilds(ANode);
ANode := ANode.GetNextSibling;
until ANode = nil;
end;
Kod: Tümünü seç
procedure TfrmMain.GetTreeParent(ANode: TTreeNode);
begin
ANode := ANode.Parent;
if ANode = nil then
Exit;
repeat
ANode.ImageIndex := tvw.Selected.ImageIndex;
ANode.SelectedIndex := tvw.Selected.ImageIndex;
ANode.ExpandedImageIndex := tvw.Selected.ImageIndex;
GetTreeParent(ANode);
ANode := ANode.getPrevSibling;
until (ANode = nil) and (ANode.Parent.Level = tvw.Selected.Parent.Level);
end;
Kod: Tümünü seç
procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Node: TTreeNode;
Msg: TMsg;
begin
if (Key = VK_SPACE) then
begin
PeekMessage(Msg, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
if tvw.Selected.ImageIndex = 3 then
begin
tvw.Selected.ImageIndex := 4;
tvw.Selected.ExpandedImageIndex := 4;
tvw.Selected.SelectedIndex := 4;
end else
begin
tvw.Selected.ImageIndex := 3;
tvw.Selected.ExpandedImageIndex := 3;
tvw.Selected.SelectedIndex := 3;
end;
Node := tvw.Selected;
GetTreeChilds(Node);
if tvw.Selected.Level <> 0 then
begin
if Node.Parent.ImageIndex = 4 then
begin
GetTreeParent(Node);
end;
end;
end;
end;