![]() |
VST Node finden und neuen eintrag addieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ist der anfang mit VST (Anfänger mit der Komponente)
Delphi-Quellcode:
es werden zwei Bäume angelegt einer mit Available Screens und einer mit Visual
procedure TMainForm.LoadTreeDefault;
var IntI : Integer; IntObj : Integer; Data : PTreeData; begin // ******************************************************************* // // ************** Available Skin Sreens ****************************** // // ******************************************************************* // // Größe der Struktur TTreeData zuweisen FSkinTree.NodeDataSize := SizeOf(TTreeData); // TStringList erstellen und mit Daten für die Screens füllen FAvailableScreens := TStringList.Create; FAvailableScreens.Add('Splash'); FAvailableScreens.Add('Mainmenu'); FAvailableScreens.Add('Audioplayer'); FAvailableScreens.Add('Radio'); FAvailableScreens.Add('Equalizer'); FAvailableScreens.Add('Gallerie'); FAvailableScreens.Add('Relaiscontrol'); FAvailableScreens.Add('Phone'); FAvailableScreens.Add('Dvd'); FAvailableScreens.Add('ExtApps'); FAvailableScreens.Add('CaveBar'); FAvailableScreens.Add('CaveBigBar'); FAvailableScreens.Add('PlaylistenEditor'); FAvailableScreens.Add('Plugin'); FAvailableScreens.Add('CaveMessages'); ParentNode := FSkinTree.AddChild(nil); Data := FSkinTree.GetNodeData(ParentNode); Data^.FCaption := 'Available Screens'; Data^.FColumn1:=''; for IntI := 0 to FAvailableScreens.Count -1 do begin ScrChildNode := FSkinTree.AddChild(ParentNode); Data := FSkinTree.GetNodeData(ScrChildNode); Data^.FCaption := FAvailableScreens.Strings[IntI]; ScrChildNode.CheckType := ctRadioButton; if Data^.FCaption = 'Splash' then ScrChildNode.CheckState := csCheckedNormal; end; // ******************************************************************* // // ************** Available Skin Objecte ***************************** // // ******************************************************************* // // TStringList erstellen und mit Daten für die Screen Objecte füllen FScreensObj := TStringList.Create; FScreensObj.Add('Bitmap'); FScreensObj.Add('Text'); ParentNode := FSkinTree.AddChild(nil); Data := FSkinTree.GetNodeData(ParentNode); Data^.FCaption := 'Visuals'; Data^.FColumn1:=''; for IntObj := 0 to FScreensObj.Count -1 do begin ObjChildNode := FSkinTree.AddChild(ParentNode); Data := FSkinTree.GetNodeData(ObjChildNode); Data^.FCaption := FScreensObj.Strings[IntObj]; end; ObjChildNode.CheckType := ctNone; With FSkinTree.TreeOptions do MiscOptions := MiscOptions + [toCheckSupport]; if not Assigned(SkinManagerInterface)then SkinManagerInterface := TCAVESkinManager.Create; SkinManagerInterface.SkinPath := SkinIni.filename; SkinManagerInterface.ParseIniToTree(SkinManagerInterface.SkinPath, 'Splash', FSkinTree); end; nach dem parsen einer Section in meiner Ini
Delphi-Quellcode:
vergleiche ich die einträge der section bsp.. ob eine variable 'background' vorhanden ist
SkinManagerInterface.ParseIniToTree(SkinManagerInterface.SkinPath, 'Splash', FSkinTree);
wenn vorhanden dann möchte ich diese der ChildNode 'Bitmap' hinzu addieren. Mein Problem ist nun wie finde ich diesesn Eintrag ? gruss Emil |
Re: VST Node finden und neuen eintrag addieren
Einen Node kannst du mit Hilfe von IterateSubtree() finden.
|
Re: VST Node finden und neuen eintrag addieren
Zitat:
Werd mal schaun was ich im Forum darüber finde. EDIT: Wäre nicht schlecht wenn mir jemand sagen könnte ob mein source so in ordnung geht Oder ob man es besser machen kann .. wenn ja dann bitte wie ? gruss Emil |
Re: VST Node finden und neuen eintrag addieren
Ich verstehe nicht ganz, warum du TStringList verwendest.
|
Re: VST Node finden und neuen eintrag addieren
Zitat:
Ich muss das Tree ja irgendwie füllen .. Dachte halt das ist die einfachste Methode um die Komponente erstmal kennen zu lernen. gruss Emil |
Re: VST Node finden und neuen eintrag addieren
Zitat:
auch in ein Array schreiben:
Delphi-Quellcode:
const AvailableScreens:
array[0..X] of Char = ('Splash', 'Mainmenu', '..'); |
Re: VST Node finden und neuen eintrag addieren
Zitat:
Delphi-Quellcode:
Denke aber alle möglichkeiten sind grundsätzlich gleich da am ende ein Array of bei rauskommt.
TCAVEAvailableScreensType = (stSplash, stMainmenu);
AvailableScreens: array[TCAVEAvailableScreensType] of string = ('Splash', 'Mainmenu'); Ob nun einen StringListe befüllt wird oder ein array. Mit dem IterateSubtree komme ich nicht so recht klar , mein problem weiss nicht wann ich diese aufrufen soll da die abfrage beim einlesen der INI erfolgen muss. Hier meine INI
Delphi-Quellcode:
Wenn
procedure TCAVESkinManager.ParseIniToTree(INIFileName: string; Section: string; TreeView: TVirtualStringTree);
function IdOf(s: string): string; begin if pos('=', s) = 0 then result:=s else result := copy(s, 1, pos('=', s) - 1); end; function ValOf(s: string): string; begin result := copy(s, pos('=', s) + 1, length(s)); end; var INI : TIniFile; // Ini File Value : TStringList; // Ergebnis Node, Parent : PVirtualNode; // Node IntSect : integer; // Zähler für Section IntValue : integer; // Zähler für Ergebnis Data : PTreeData; NewSection : TStrings; // Strings in TStrings convertieren begin if FileExists(INIFileName) then begin // ImiFile initialisieren INI := TIniFile.Create(INIFileName); // TStringList für Ergebnis initialisieren Value := TStringList.Create; // TStringList zur convertierung (Section..string) // zu TStrings initialisieren NewSection := TStringList.Create; // string zur TStringListe addieren NewSection.Add(Section); try Parent := TreeView.AddChild(nil); INI.ReadSectionValues(Section, Value); for IntValue := 0 to Value.Count - 1 do begin Node:=TreeView.AddChild(Parent); Data := TreeView.GetNodeData(Node); Data^.FCaption:=IdOf(Value[IntValue]); Data^.FColumn1:=ValOf(Value[IntValue]); end; finally INI.Free; NewSection.Free; Value.Free; end; end; end;
Delphi-Quellcode:
den Wert Background enthält sollte zu Bitmap dieser eintrag addiert werden.
Data^.FCaption:=IdOf(Value[IntValue]);
den Wert Label enthält sollte zu Text dieser eintrag addiert werden. Keine Idee wie ich das am besten verwirklichen kann. Das Video von generic bringt mich auch nicht weiter da es komplett anders aufgebaut ist. gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz