TreeView Child ve Parent Kontrolü

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Mert58
Üye
Mesajlar: 1
Kayıt: 05 Ara 2015 09:58

TreeView Child ve Parent Kontrolü

Mesaj gönderen Mert58 »

Merhaba Arkadaşlar,

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;
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: TreeView Child ve Parent Kontrolü

Mesaj gönderen Kuri_YJ »

Selamlar,

Öncelikle sorununuzu tam anlatamamışsınız. İstediğimi yapıyor ama sorun var gibi bir soru sorduğunuzda yanıt alamazsınız. Öncelikle ne yapmak istediğinizi (yani istediğiniz şey nedir) bunu belirtmelisiniz. Sonra uygulamaya çalıştığınız şeyi söylemelisiniz ve neyin olmadığını açıklamalısınız. Sorularınız anlaşılır değil. Ancak Access Violation hatası demek, olmayan bir nesneye erişim yapıyorsunuz demektir. Şimdi Owner.Owner derseniz, create edilmiş nesnelerden birinin en tepesine çıktığınızda ya da Owner ataması yapılmamış bir nesneye denk gelirseniz, Owner.Owner'dan Nil döner ve bu dönen nil değeri de kullandığınız yerde hemen Access Violation hatası alırsınız. Buna göre bir daha düşünün.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: TreeView Child ve Parent Kontrolü

Mesaj gönderen thelvaci »

Treeview'de seçili bir item olmadığında da AV hatası alırsınız. "tvw.Selected." kısmını kontrollü kullanın.
Cevapla