![]() |
Re: Objecte zwischenspeichern
:wiejetzt:
Wo werden die Objecte denn Kreiert/Platziert? Da kannst doch auch zur Laufzeit die OnClick events und eine eindeutige Identifizierung (z.B. im tag) zuweisen. Dann machst du im OnClick sowas wie
Delphi-Quellcode:
und feddich;
if (sender as TComponent).tag = PusteKuchen then begin
add(Pustekuchen); end; Oder hab ich irgendwie total verpennt worums hier geht? :gruebel: |
Re: Objecte zwischenspeichern
Zitat:
das wird doch zur Laufzeit erstellt und über die ElementType (gleichzusetzen mit Tag) Identifiziert aber nur vom TreeView und nicht wenn ich drauf klicke. gruss Emil |
Re: Objecte zwischenspeichern
Hallo Stefan
Delphi-Quellcode:
Nein hier ...
procedure TMainForm.JvDesignPanelSelectionChange(Sender: TObject);
bumm??? end;
Delphi-Quellcode:
und zwar dann wenn die falsche Category übergeben wird
procedure TMainForm.AddControls(ATree : TBaseVirtualTree; aCtrl: TControl; DisplayName: string);
var Data : PTreeData; Node : PVirtualNode; UIObject : TCAVEUIObject; begin UIObject := TCAVEUIObject.Create; Node := ATree.GetFirstSelected; Data := ATree.GetNodeData(Node); case SkinManagerInterface.ActiveScreen of skSplash: begin case Data.Category of stBackground: begin // zeigt das ausgewählte Object TImage im FInspector UIObject.ShowSelProperties(FInspector,aCtrl, ['Autosize' ,'Width', 'Height', 'Picture'], 'Background Picture'); // zeigt Object Informationen im FInspector an UIObject.ShowUserObjectInfo(FInspector, FCAVEUserObject, 'Identity'); end; stText: begin // zeigt das ausgewählte Object TLabel im FInspector UIObject.ShowSelProperties(FInspector,aCtrl, ['Autosize' ,'Width', 'Height', 'Left', 'Top', 'Alignment', 'Font', 'Transparent'], 'Text'); // zeigt Object Informationen im FInspector an UIObject.ShowUserObjectInfo(FInspector, FCAVEUserObject, 'Identity'); end; stButton: begin // zeigt das ausgewählte Object TImage im FInspector UIObject.ShowSelProperties(FInspector,aCtrl, ['Left', 'Top', 'Width', 'Height', 'Center', 'Picture'], 'Button Picture Strip'); Data.Image := TImage(aCtrl); // zeigt Object Informationen im FInspector an UIObject.ShowUserObjectInfo(FInspector, FCAVEUserObject, 'Identity'); end; end; FCAVEUserObject.Name := Data.FCaption; end; end; // addiere Control ClassName und Name zur ComboBox cbObject.items.add(aCtrl.Name + ': ' + aCtrl.ClassName); end; Die kann ich aber nur auslösen bzw.. finden wenn der richtige Knoten im Tree aktiviert ist. Ich kann den aber nicht aktivieren da ich ihn nicht kenne wenn ich auf ein object klicke. gruss Emil |
Re: Objecte zwischenspeichern
Zitat:
Erstellst du das Object nicht selbst? Ich muss zugeben ich bin durch deinen Code nicht ganz durchgestiegen ;) |
Re: Objecte zwischenspeichern
Zitat:
da meine objecte über die Elemente identifiziert werden was macht das für einen unterschied ob das nun über ein Array oder einen Tag geschieht. Zitat:
Ist doch dokumentiert was wo geschieht und welche aktionen ausgeführt werden. Mein problem ist halt die schlechte Dokumentation (oder keine) von den Jedi Komponenten Muss mir alles aus den Units saugen um zu verstehen was da abgeht das funktioniert aber nicht immer wenn man die eigenschaften nicht kennt. gruss Emil |
Re: Objecte zwischenspeichern
Zitat:
Wenn du also nach dem Kreieren(da weisst du ja hoffentlich noch um welches Element es grade geht^^) einen Tag und ein OnClick zuweist, weisst du über den Tag immer genau welches object du grade hast. Du kannst ja auch den ElementType ins Tag schreiben ;) Ein weiterer Vorteil vom Tag ist, dass den fast alles hat was nicht direkt von TObject abgeleitet ist. Den gibts von TComponent abwärts :) Zitat:
Darum ist für mich nicht klar wo die Elemente kreiert werden. |
Re: Objecte zwischenspeichern
Zitat:
Die frage nur was mache ich wenn ich unter stBackgound( Bitmap) mehrere Dateien stehen habe dann hab ich den Typ aber immer noch nicht das Object(Image1, Image2 usw..). Ist also nicht so einfach. gruss Emil |
Re: Objecte zwischenspeichern
Auf die schnelle fällt mir da ein record ein den du in den Tag schreibst.
Delphi-Quellcode:
Im TypeInfo steht die TypeInfo(wow...) und im Index der index des jeweiligen Elements.
TEnumTypeInfo = record
TypeInfo: PTypeInfo; Index: Integer; end; Könntest dir dann nen globalen Zähler machen der immer incrementiert wird wenn ein Image kreiert wird. Ich behaupte das wäre immernoch praktischer als ein array dessen indizes du nicht weisst^^ |
Re: Objecte zwischenspeichern
Zitat:
Gut gemeinter Ratschlag was soll ich damit machen? Bekomme dann nur das Kind übergeben was mir aber nichts bringt.
Delphi-Quellcode:
Trotzdem Danke..
type
TTypeKind = (tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat, tkString, tkSet, tkClass, tkMethod, tkWChar, tkLString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkInt64, tkDynArray); Gruss Emil |
Re: Objecte zwischenspeichern
Hallo Emil,
einen hab ich noch :wink: Es besteht wohl ein Konflikt zwischen
Delphi-Quellcode:
und
procedure TMainForm.AddControls(ATree : TBaseVirtualTree; aCtrl: TControl; DisplayName: string);
Delphi-Quellcode:
aCtrl muss nicht zwingend identisch sein mit dem selektierten Node.
Node := ATree.GetFirstSelected;
Data := ATree.GetNodeData(Node); Also ein Versuch: Den Baum und seine Knoten von oben her durcharbeiten und suchen, welcher Node vom gleichen Typ wie aCtrl ist. Diesem Node den Fokus geben, dann sollte es gehen. Hierüber könnte es doch möglich sein, die Objekte zu vergleichen, wenn eine IF-Kaskade mit IS und AS nicht ausreicht:
Delphi-Quellcode:
Wenn hier der Typ festgestellt werden kann, müsste (über ein entsprechendes Cast?) ja auch der Name des Objektes zu finden sein, um das dann im Tree zu selektieren.
{ Die Prozedur ermittelt Basis-Laufzeit-Informationen zum übergebenen Objekt }
{ und gibt die Informationen in einer Stringliste zurück. } procedure GetBaseClassInfo(AClass: TObject); var ClassTypeInfo : PTypeInfo; ClassTypeData : PTypeData; EnumName : String; begin ClassTypeInfo := AClass.ClassInfo; ClassTypeData := GetTypeData(ClassTypeInfo); with sl Do Begin Add(Format('Class Name: %s ', [ClassTypeInfo.Name])); EnumName := GetEnumName(TypeInfo(TTypeKind), Integer(ClassTypeInfo.Kind)); Add(Format('Kind: %s ', [EnumName])); Add(Format('Size: %d ', [AClass.InstanceSize])); Add(Format('Defined in: %s.pas ', [ClassTypeData.UnitName])); Add(Format('Num Properties: %d ',[ClassTypeData.PropCount])); End; end; Wenn nicht, dann weiß ich auch nicht weiter :cry: Stephan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 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