2012-05-17 18 views
6

VST'de varsayılan [-]/[+] düğmelerini değiştirmek için kendi özel düğmelerimi (resimleri) nasıl kullanabilirim?
Bunun yerine okları (enter image description here, enter image description here) kullanmak istiyorum, ancak RTL bidi modunu da destekliyorum (enter image description here, enter image description here).TVirtualStringTree - [-]/[+] düğmelerini nasıl değiştirebilirim?

düzenleme: bsTriangle stilinin (ButtonStyle) farkındayım. RTL'ye uymuyor. Kendi özel resimlerimi kullanmak istiyorum.

cevap

9

Bu görüntüler genellikle Windows Vista ve Windows 7'de değil midir? Temalar etkin olduğunda ağaç kontrolü bu sistemlerde otomatik olarak almalıdır.

Buna yakın bir şey elde etmenin kolay yolu, ButtonStyle özelliğini bsTriangle olarak belirlemektir. Yine de, soruda gösterilen resimler tam olarak olmayacak. "Eksi" oku, köşegen yerine düz bir şekilde işaret edecek ve "artı" oku bir anahat yerine katı olacaktır.

Kendi bitmap'inizi sağlayabilirsiniz. VT_XPBUTTONMINUS ve VT_XPBUTTONPLUS kaynaklarını istediğiniz resimlere göre değiştirin ve ButtonFillMode özelliğini fmShaded olarak ayarlayın.

Görüntüyü bi-di modunu temel alarak değiştirmek için bir imkan görmüyorum. PaintNodeButton'u geçersiz kılan bir alt sınıf oluşturabilir ve istediğiniz her şeyi boyayabilirsiniz. Yerleşim kodunu ebeveyn sınıfından kopyalayın.

+0

Teşekkürler bayım. 'PaintNodeButton' geçersiz kılan tek seçenek. – ZigiZ

1

ButtonStyle özelliklerine bakın. Emin değil RTL bidi modu düşünce saygı duyar.

+0

"bsTriangle" stilinin farkındayım. RTL'ye uymaz. Kendi resmimi kullanmak istiyorum. – ZigiZ

7

IIRC, PaintOptions içinde toUseExplorerTheme'yi ekleyerek bunu elde edersiniz. Ancak bu aynı zamanda seçim görünümünü (daha iyi IMNSHO'ya) ve muhtemelen daha fazla değiştirir.

Örneğin

Ben şu olay işleyicileri bir form üzerinde bir TVirtualStringTree bırakın ve eklerseniz: Form1.BiDiModebdRightToLeft için verim screenshot with wrong triangular markers ayarı Maalesef:

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    VT.RootNodeCount := 10; 
    VT.TreeOptions.PaintOptions := VT.TreeOptions.PaintOptions + [toUseExplorerTheme]; 
    VT.OnInitNode := VTInitNode; 
    VT.OnInitChildren := VTInitChildren; 
end; 

procedure TForm1.VTInitChildren(Sender: TBaseVirtualTree; 
    Node: PVirtualNode; var ChildCount: Cardinal); 
begin 
    ChildCount := 3; 
end; 

procedure TForm1.VTInitNode(Sender: TBaseVirtualTree; 
    ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); 
begin 
    Include(InitialStates, ivsHasChildren); 
end; 

alıyorum screenshot with triangular markers

Düzenleme Almanca Windows 7'de. Bunun Arapça veya İbranice sistemlerde daha iyi çalışıp çalışmadığını bilmiyorum.

+0

Hangi VirtualTrees sürümünü kullanıyorsunuz? – ZigiZ

+1

@ZigiZ: VirtualTrees.pas üstündeki cooment, “Version 5.0.0” diyor. –