Lütfen TTreeNode
'un durum simgesi dikdörtgeninin ekran koordinatlarını TreeView
(TTreeView.StateImages
özelliğinde belirtilen simgeleri demek) konusunda yardımcı olun.Delphi, TTreeView: verilen düğümün ve simgesinin ekran koordinatlarını nasıl alabilirim?
TTreeView.GetHitTestInfoAt(X, Y: integer): : THitTests
işlevi var, ancak bu tam olarak aradığım şey değil; Verilen koordinatların etikete veya simgeye veya öğenin durum simgesine karşılık gelip gelmediğini söyler, ancak simgenin hangi kısmının tıklandığını bilmem gerekir.
TreeView
düğümleri uygulamak istediğiniz ve ben onay kutularını simüle etmek
StateImages
kullanın (bir devlet, diğer devlet denetlenmeyen öğesi) bir kontrol öğedir. Olarak ben onay kutularının hangisinin tıklandığının bilinmesi, imleç koordinatlarının durum simgesi koordinatlarıyla karşılaştırılması gerekir. Bunları nasıl edinebilirim?)
Makroların çağrılması mesaj göndermekten çok daha kolaydır. Ancak o zaman bile, Delphi'nin ['TTreeNode.DisplayRect'] olduğundan (http://docwiki.embarcadero.com/Libraries/XE2/en/Vcl.ComCtrls.TTreeNode), 'TVM_GETITEMRECT' mesajını açık bir şekilde göndermeniz gerekmez. "TVM_GETITEMRECT" mesaj makrosunu dahili olarak çağıran ve bir ağaç düğümü için sınırlayıcı dikdörtgeni döndüren .DisplayRect) yöntemi. – TLama
Çok teşekkürler! İşe yaradı! İşte yaptığım kod: 'CommCtrl kullanır; ... var R: TRect; pItemRect: işaretçi; başlangıç pItemRect: = @R; HTREEITEM (pItemRect ^): = TreeView.Selected.ItemId; SendMessage (TreeView1.Handle, TVM_GETITEMRECT, WParam (doğru), LParam (pItemRect)); ... - bu, seçilen öğe metninin koordinatlarını "R" içine koyar. Böylece, simgenin sağ X koordinatı 'R. Sol - 4' dir (simge ve metin arasında 3 boş piksel vardır). –
Artık 'DisplayRect' yöntemi sadece 'TVM_GETITEMRECT' iletisinin bir sarıcısı olduğundan, 'TreeView.Selected.DisplayRect' işlevini kullanmak için kodunuzu basitleştirebilirsiniz. Ve böyle bir koda dikkat edin, çünkü her zaman bazı düğümler seçilmemelidir, bu yüzden 'TTreeView.Selected' 'nil' olabilir. Her neyse, eğer sorunuzu çözdüyse, ['cevabı kabul et] 'i unutmayın (http://meta.stackexchange.com/a/5235/179541). – TLama