Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#9

Re: Objecte zwischenspeichern

  Alt 17. Sep 2008, 11:02
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
Miniaturansicht angehängter Grafiken
test_511.jpg  
  Mit Zitat antworten Zitat