2011-06-03 15 views
5

TVirtualStringTree ürününü kullanmak için standart TTreeView'den bir ağaç görünümü dönüştürüyorum. Son görevim, bilinen düğüm simgesinin üstünde bir 'geçme/başarısızlık' durum göstergesini çizmem gereken bir özellik uygulamaktır. TTreeView ile kullandığım: TVirtualStringTree ileTemel Delphi TVirtualTreeView düğümü simgesinin üst kısmındaki bindirme simgesi en iyi nasıl oluşturulur

enter image description here

İyileşmeliyim ya daha iyi bir yol bulmak ya ümit: aşağıda gösterildiği gibi

var 
    R : TRect; 
    begin 
    R := Node.DisplayRect(True); 
    StatusIconList.Draw(TreeView1.Canvas, 
         R.Left - StatusIconList.Width - 14, 
         R.Top, 
         3 {MyOverlayImageIndex}); 

sonuç temel simgesinin üzerine kırmızı haç ise gerekli yer paylaşımlı simge konumu için bilinen konumlar. Ben yapıyorum:

procedure DrawFailed; 
    var 
    R : TRect; 
    begin 
     R := CellRect; 
     StatusIconList.Draw(TargetCanvas, 
          R.Left - StatusIconList.Width + 49 + Sender.GetNodeLevel(Node) * 16, 
          R.Top, 
          siiFailed); 
    end; 

Bu en iyi çözüm mü? Temel ikonun üst/sol köşesini, korkunç düğüm seviyesi çağrısı olmadan almanın daha iyi bir yolu var mı?

cevap

8

Sen OnGetImageIndex olay işleyicisi Kind: TVTImageKind parametreyi olsun. ikOverlay için kontrol edin ve uygun görüntü indeksini döndürün.

+0

Bu iyi bir nokta, teşekkürler. MyImageList.Overlay (8,0) ve MyImageList.Overlay (9,1) adlı görüntü listeme bir çift resim ekledim ve Kind in ikOverlay olduğunda 0 veya 1 döndürmek için OnGetImageIndex ayarlandı . Bununla birlikte, yalnızca temel simgeleri hiçbir bindirme görünmüyor. Ayarlamam gereken başka bir anahtar var mı lütfen? Teşekkürler. –

+1

Tam olarak ne yapılması gerekiyorsa onu denedim ve işe yarıyor, başka bir şeyin farkında değilim, üzgünüm. –