Danke dir das sind auf jedenfall verwertbare informationen
Ich versuche nochmal mein problem zu schildern.
Ich hab festgelegte Elemente das wären
Delphi-Quellcode:
TCAVEElementType = (stBackground, stText, stButton, stNone);
TCAVEElementTotals: array[TCAVEElementType] of Integer;
Beim ersten start der Anwendung geht erst mal nix ohne das VST(TreeView)
Beim klick auf den Eintrag Background wird diese Funktion aufgrufen
Delphi-Quellcode:
procedure TMainForm.PaletteStdButtonClick(Sender: TObject);
var
Data : PTreeData;
Node : PVirtualNode;
const
cClasses: array[0..1] of string = ('TImage', 'TLabel');
begin
StickyClass := (GetKeyState(VK_SHIFT) < 0);
// Selectierte Node Initialisieren
Node := FSkinTree.GetFirstSelected;
Data := FSkinTree.GetNodeData(Node);
// Hole die Data.Category vom Top Level der ausgewählten Node
Data.Category := SkinManagerInterface.GetSelectedCategory(FScreensObj, FSkinTree);
// Objecte angzeigen abhängig vom Index des cClasses Array
case Data.Category of
stBackground:
// TImage
DesignClass := cClasses[0];
stText:
// TLabel
DesignClass := cClasses[1];
stButton:
// TImage
DesignClass := cClasses[0];
end;
end;
Der Toplevel des gewählten Eintrag wird nun gesucht und das Element zugewiesen
Delphi-Quellcode:
function TCAVESkinManager.GetSelectedCategory(ScreensObj: TStringList; TreeView: TBaseVirtualTree): TCAVEElementType;
var
Node: PVirtualNode;
Data: PTreeData;
IntI: Integer;
begin
Node := TreeView.GetFirstSelected;
// Bestimme die Kategorie für den ausgewählten Knoten
while (Node <> nil) and (TreeView.GetNodeLevel(Node) > 1) do
Node := Node.Parent;
Data := TreeView.GetNodeData(Node);
if Data <> nil then
for IntI := 0 to ScreensObj.Count - 1 do
if ScreensObj.Strings[IntI] = Data.FCaption then
Data.Category := TCAVEElementType(IntI);
Result := Data.Category;
end;
ScreensObj ist die Stringlist in der die Knoten beim start zugewiesen wurden
abhängig vom Elementtyp um diesen über den VST zu Identifizieren.
Klicke ich nun in das Panel wird das Object abhängig vom ELementTyp auf dem abgelegt.
In dem Fall TImage.
Wenn nun alle Objecte abgelegt und ich auf irgendeins davon klicke muss ich vergleichen können
welches das ist und zwar abhängig vom ElementType da es sonst unweigerlich zum crash kommt.
Das geht aber in dem Fall nicht über das TreeView.
Und das ist mein problem hab keine Idee wie oder wo ich da abfangen soll
welches object das ist um den ElementTyp korrekt zuweisen zu können.
Ja ist schwer zu erklären
Wie kann ich also die aofgesetzen objecte sinnvoll zwischenspeichern
damit ich sie wieder finde ?
Zitat:
TStringList ?
Classe ?
Oder wie sonst ..am besten mit allen geänderten eigenschaften damit diese auch gleich
wieder im Inspector aktualisiert werden.
gruss Emil