01-09-2023, Saat: 16:28
(Son Düzenleme: 01-09-2023, Saat: 16:29, Düzenleyen: shooterman.
Sebep: yanlış
)
(31-08-2023, Saat: 17:11)mrmarman Adlı Kullanıcıdan Alıntı: Şöyle TreeView'i node by node dolaşarak denemek isteyebilirsiniz.
* Seçeceğiniz ilk TreeNode hangi seviyede ise aynı seviyedeki diğer kardeş ve alt node'ları tek tek sonuna kadar dolaşır.
procedure TForm1.TreeViewToMenu(aTreeNode: TTreeNode; aMenuItem: TMenuItem); var LNewMenuItem: TMenuItem; begin while aTreeNode <> nil do begin LNewMenuItem := TMenuItem.Create(nil); LNewMenuItem.Caption := aTreeNode.Text; aMenuItem.Add(LNewMenuItem); if aTreeNode.HasChildren then // recursive... TreeViewToMenu(aTreeNode.GetFirstChild, LNewMenuItem); aTreeNode := aTreeNode.GetNextSibling; end; end;
Kullanımı :
procedure TForm1.BitBtn2Click(Sender: TObject); begin PopupMenu1.Items.Clear; TreeViewToMenu(TreeView1.Items[0], PopupMenu1.Items); end;
@mrmarman hocam, burada hangi popup menüye tıkladığımzda onun başlığını alabilmek için kod ne olmalı? şu anda şöyle bir prosedür ekledim.
procedure TForm1.HandlePopupItem(Sender: TObject);
begin
if (Tmenuitem(sender).count <1) then
ShowMessage(TMenuItem(Sender).Caption);
end;
yazdığınız kodda da şu şekilde ekledim.
procedure TreeViewToMenu(aTreeNode: TTreeNode; aMenuItem: TMenuItem);
var
LNewMenuItem: TMenuItem;
begin
while aTreeNode <> nil do
begin
LNewMenuItem := TMenuItem.Create(nil);
LNewMenuItem.Caption := aTreeNode.Text;
aMenuItem.Add(LNewMenuItem);
LNewMenuItem.OnClick := form1.HandlePopupItem;
if aTreeNode.HasChildren
then // recursive...
TreeViewToMenu(aTreeNode.GetFirstChild, LNewMenuItem);
aTreeNode := aTreeNode.GetNextSibling;
end;
end;
ancak, sadece en son node a tıklanınca başlık veriyor. ilk node tıkladığımda vermiyor. Yani sağ tarafa açılan en son childda veriyor başlığı.
Yazılımcı, kahveyi koda çeviren bir organizmadır.


