2012-05-17 3 views
6

Wie kann ich meine eigenen benutzerdefinierten Schaltflächen (Bilder) verwenden, um die Standardschaltflächen [-]/[+] im VST zu ersetzen?
Ich möchte stattdessen Pfeile verwenden (enter image description here, enter image description here), aber auch RTL Bidi-Modus (enter image description here, enter image description here) zu unterstützen.TVirtualStringTree - Wie ändert man die Tasten [-]/[+]?

bearbeiten: Ich kenne die bsTriangle Stil (ButtonStyle). Es respektiert RTL nicht. Ich möchte meine eigenen benutzerdefinierten Bilder verwenden.

Antwort

9

Sind diese Bilder normalerweise nicht in Windows Vista und Windows 7? Das Baum-Steuerelement sollte sie automatisch auf diesen Systemen erhalten, wenn Sie die Themen aktiviert haben.

Der einfache Weg, etwas in die Nähe zu bekommen, ist die Eigenschaft ButtonStyle auf bsTriangle zu setzen. Es wird jedoch nicht genau die Bilder sein, die in der Frage gezeigt werden. Der "Minus" -Pfeil zeigt nach unten statt diagonal, und der "Plus" -Pfeil wird anstelle eines Umrisses durchgezogen.

Sie können Ihre eigene Bitmap erstellen. Ändern Sie die Ressourcen VT_XPBUTTONMINUS und VT_XPBUTTONPLUS in die gewünschten Bilder und legen Sie die Eigenschaft ButtonFillMode auf fmShaded fest.

Ich sehe jedoch keine Möglichkeit, das Bild basierend auf dem Bi-Di-Modus zu ändern. Sie können eine abgeleitete Klasse erstellen, die PaintNodeButton überschreibt, und dann malen, was Sie wollen. Kopieren Sie den Platzierungscode aus der übergeordneten Klasse.

+0

Danke, mein Herr. Es scheint, als wäre das Überschreiben von 'PaintNodeButton' die einzige Wahl. – ZigiZ

1

Siehe die ButtonStyle Eigenschaft. Nicht sicher, respektiert es den RTL-Bidi-Modus.

+0

Ich kenne den 'bsTriangle' Stil. es respektiert RTL nicht. Ich möchte mein eigenes Bild verwenden. – ZigiZ

7

IIRC Sie bekommen es durch toUseExplorerTheme in PaintOptions. Dies ändert jedoch auch das Auswahl-Aussehen (zum besseren IMNSHO) und wahrscheinlich mehr.

Zum Beispiel, wenn ich eine TVirtualStringTree auf einem Formular, und fügen Sie die folgenden Event-Handler fallen:

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; 

I bekommen screenshot with triangular markers

Edit: Leider Form1.BiDiMode zu bdRightToLeft Ausbeuten screenshot with wrong triangular markers Einstellung auf meinem deutschen Windows 7. Ich weiß nicht, ob das auf arabischen oder hebräischen Systemen besser funktioniert.

+0

Welche Version von VirtualTrees verwenden Sie? – ZigiZ

+1

@ZigiZ: Das Cooment an der Spitze von VirtualTrees.pas sagt 'Version 5.0.0'. –

Verwandte Themen