AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

VST Node finden und neuen eintrag addieren

Ein Thema von EWeiss · begonnen am 14. Sep 2008 · letzter Beitrag vom 14. Sep 2008
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

VST Node finden und neuen eintrag addieren

  Alt 14. Sep 2008, 18:55
Hier ist der anfang mit VST (Anfänger mit der Komponente)

Delphi-Quellcode:
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 = 'Splashthen
      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;
es werden zwei Bäume angelegt einer mit Available Screens und einer mit Visual
nach dem parsen einer Section in meiner Ini
SkinManagerInterface.ParseIniToTree(SkinManagerInterface.SkinPath, 'Splash', FSkinTree); vergleiche ich die einträge der section bsp.. ob eine variable 'background' vorhanden ist
wenn vorhanden dann möchte ich diese der ChildNode 'Bitmap' hinzu addieren.

Mein Problem ist nun wie finde ich diesesn Eintrag ?

gruss Emil
Miniaturansicht angehängter Grafiken
insert_198.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: VST Node finden und neuen eintrag addieren

  Alt 14. Sep 2008, 19:49
Einen Node kannst du mit Hilfe von IterateSubtree() finden.
Thomas
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: VST Node finden und neuen eintrag addieren

  Alt 14. Sep 2008, 20:05
Zitat von toms:
Einen Node kannst du mit Hilfe von IterateSubtree() finden.
Danke
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: VST Node finden und neuen eintrag addieren

  Alt 14. Sep 2008, 20:24
Ich verstehe nicht ganz, warum du TStringList verwendest.
Thomas
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: VST Node finden und neuen eintrag addieren

  Alt 14. Sep 2008, 20:45
Zitat von toms:
Ich verstehe nicht ganz, warum du TStringList verwendest.
Dann meine gegenfrage was würdest du verwenden ?
Ich muss das Tree ja irgendwie füllen ..

Dachte halt das ist die einfachste Methode um die Komponente erstmal kennen zu lernen.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#6

Re: VST Node finden und neuen eintrag addieren

  Alt 14. Sep 2008, 20:56
Zitat von EWeiss:
Zitat von toms:
Ich verstehe nicht ganz, warum du TStringList verwendest.
Dann meine gegenfrage was würdest du verwenden ?
Ich muss das Tree ja irgendwie füllen ..
Nun, du füllst zuerst eine TStringList und dann den VST. Die Werte sind ja alle vordefiniert. Diese kannst du
auch in ein Array schreiben:

Delphi-Quellcode:
const AvailableScreens:
  array[0..X] of Char = ('Splash', 'Mainmenu', '..');
Thomas
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: VST Node finden und neuen eintrag addieren

  Alt 14. Sep 2008, 21:11
Zitat von toms:
Zitat von EWeiss:
Zitat von toms:
Ich verstehe nicht ganz, warum du TStringList verwendest.
Dann meine gegenfrage was würdest du verwenden ?
Ich muss das Tree ja irgendwie füllen ..
Nun, du füllst zuerst eine TStringList und dann den VST. Die Werte sind ja alle vordefiniert. Diese kannst du
auch in ein Array schreiben:

Delphi-Quellcode:
const AvailableScreens:
  array[0..X] of Char = ('Splash', 'Mainmenu', '..');
Ja oder in einer Type

Delphi-Quellcode:
  TCAVEAvailableScreensType = (stSplash, stMainmenu);
  AvailableScreens: array[TCAVEAvailableScreensType] of string = ('Splash', 'Mainmenu');
Denke aber alle möglichkeiten sind grundsätzlich gleich da am ende ein Array of bei rauskommt.
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:
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;
Wenn
Data^.FCaption:=IdOf(Value[IntValue]); den Wert Background enthält sollte zu Bitmap dieser eintrag addiert werden.
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz