![]() |
Problem mit Object Inspector
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
Habe ein problem beim addieren von meinen Controls. Wenn ich ein Image oder label auf die Form lege wie komme ich dann an das aufgesetzte control ? So sieht es bisher aus. Wenn ich auf den Button für den Label oder das Image klicke springe ich in diese Funktion
Delphi-Quellcode:
Klicke ich nun auf das Designer Window dann hole ich mir die Class über
procedure TMainForm.PaletteStdButtonClick(Sender: TObject);
const cClasses: array[0..2] of string = ( '', 'TImage', 'TLabel'); begin StickyClass := (GetKeyState(VK_SHIFT) < 0); DesignClass := cClasses[TControl(Sender).Tag]; end;
Delphi-Quellcode:
Ist DesignClass mehr als nichts versuche ich das Control dem Object inspector hinzu zu fügen
procedure TMainForm.JvDesignPanelGetAddClass(Sender: TObject; var ioClass: String);
begin ioClass := DesignClass; if DesignClass <> '' then AddControls(TControl(Sender), DesignClass); if not StickyClass then begin DesignClass := ''; end; end;
Delphi-Quellcode:
AddControls(TControl(Sender), DesignClass);
Delphi-Quellcode:
Das problem ist nun das er mir nicht die eigenschaften vom Image1 bzw.. Label1 addiert
procedure TMainForm.AddControls(NewObject: TControl; DisplayName: string);
var InspCat: TJvInspectorCustomCategoryItem; begin InspCat := TJvInspectorCustomCategoryItem.Create(JvInspector1.Root, nil); InspCat.DisplayName := DisplayName; InspCat.SortKind := iskNone; AddCtrl(InspCat, NewObject); InspCat.Expanded := True; end; procedure TMainForm.AddCtrl(const Parent: TJvCustomInspectorItem; const Ctrl: TControl); var InspCat: TJvInspectorCustomCategoryItem; begin InspCat := TJvInspectorCustomCategoryItem.Create(Parent, nil); InspCat.DisplayName := Ctrl.Name + ': ' + Ctrl.ClassName; TJvInspectorPropData.New(InspCat, Ctrl); end; sondern logischerweise(weil der Sender) das TJvDesignSurface ... Habe im moment keine idee wo ich die beiden Controls zum TreeView bzw.. den Object Inspector hinzufügen soll. Wäre schön wenn jemand helfen könnte. Im Anhang ein Bild. (ala Widget von David) gruss Emil |
Re: Problem mit Object Inspector
Also in meinem Editor meiner
![]() Zuerst hab ich mal eine Liste, in der alle Komponenten sind, die ich für die Widget-Engine zur Verfügung stelle. Das Grundgerüst sieht folgendermaßen aus:
Delphi-Quellcode:
So, jetzt füge ich erst alle verfügbaren Klassen in die Liste hinzu. Beim Label schaut das z.B. so aus:
type
TwgComponentClass = class of TwgComponent; // meine Grundkomponente PwgClassListEntry = ^TwgClassListEntry; TwgClassListEntry = record ClassName : string; ClassType : TwgComponentClass; InPalette : boolean; PaletteEntry: string; end; TwgClassList = class(TObject) private FList : TList; protected function GetCount: integer; function FindClassByName(Name: string): TwgComponentClass; function FindClassByIndex(index: integer): TwgComponentClass; function GetItem(index: integer): PwgClassListEntry; function IndexOf(ClassName: string): integer; function IndexOfClass(aClass: TwgComponentClass): integer; procedure Clear; public constructor Create; destructor Destroy; override; procedure AddClass(ClassName: string; aClass: TwgComponentClass; InPalette: boolean; PaletteEntry: string); function HasClass(ClassName: string): boolean; function GetClassName(aClass: TwgComponentClass): string; property Items[index: integer] : PwgClassListEntry read GetItem; property GetClass[Name: string]: TwgComponentClass read FindClassByName; default; property Count : integer read GetCount; end; var // eine globale Variable, die im initialization-Teil der Unit erstellt wird wgClassList: TwgClassList
Delphi-Quellcode:
Im Editor gibt es dann eine einfache Methode, eine neue Klasse zu erstellen:
wgClassList.AddClass(TwgLabel.ClassName, TwgLabel, True, 'Standard');
Delphi-Quellcode:
Ach noch was: Ich verwende nicht TControl als Basis, sondern eine eigene Basisklasse. Daher ist bei mir TwgComponent bei dir TControl
function TWidgetEditor.DoAddClass(ClassName: string; var NewObject: TwgComponent): boolean;
var CompClass: TwgComponentClass; begin CompClass := wgClassList.GetClass[ClassName]; if CompClass = nil then result := False else begin NewObject := CompClass.Create; result := True; // Und nun die Klasse bei dir im JvInspector anzeigen AddControls(result, 'Irgendwas'); end; end; Hoffe das Hilft dir etwas. |
Re: Problem mit Object Inspector
Danke für die Infos ;)
Mein problem ist das addieren zum TreeView sowie zum Object Inpector. Meine damit das ich nicht an die Eigenschaften herankomme Hast du diese vorher für deinen Label und Image selber festgelegt? Steige noch nicht so richtig hinter die Materie. Copy Paste bringt nichts da ich im moment noch nicht erkennen kann wie die eigenschaften addiert werden Aber helfen tut die Info auf jeden fall gruss Emil |
Re: Problem mit Object Inspector
Ist das Problem, dass du im Objekt-Inspektor nichts siehst oder dass die falsche Komponente hinzugefügt wird? Ich kapier gerade nicht, was jetzt genau das Problem ist. :gruebel:
|
Re: Problem mit Object Inspector
Zitat:
Addierst du doch in der Combo den ClassNamen wgLabel1: TwgLabel anschließend im TreeView wgLabel1 und füllst dann den Inspector mit den eigenschaften von Label aligment , Caption usw.. Das ist mein problem weis nicht wie ich an die Eigenschaften komme bzw.. ob du sie vorher selber festgelegt hast. EDIT: Hast du ein ganz einfaches Sample ? Wo ich sehen kann wie die technic funktioniert ? bsp: Für einen label ? gruss Emil |
Re: Problem mit Object Inspector
Also der JvInspector ist schon etwas komplizierter, um ihn mal kurz zu erklären. Der kann sowohl mit RTTI und ohne RTTI benutzt werden. Hier mal ein einfaches Beispiel, um an ein Label in den Inspector zu bekommen (mit RTTI):
Delphi-Quellcode:
type
TForm1 = class(TForm) Label1: TLabel; // das Label JvInspector1: TJvInspector; // der Inspektor procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } procedure ShowObject(aObj: TObject); end; implementation procedure TForm1.FormCreate(Sender: TObject); begin ShowObject(Label1); end; procedure TForm1.ShowObject(aObj: TObject); begin JvInspector1.Root.Clear; TJvInspectorPropData.New(JvInspector1.Root, aObj); end; |
Re: Problem mit Object Inspector
Das heißt es gehen nur Variablen die in dem Object schon enthalten sind ?
Verstehe ich nicht.. Ich möchte ja eigentlich nur werte addieren die für mich von bedeutung sind Sehe schon das dauert länger als erwartet muss mich da erst einarbeiten. ;) Danke. gruss Emil |
Re: Problem mit Object Inspector
Der JvInspector arbeitet mit RTTI. Alle published-Properties von Objekten, die von TPersistent abgeleitet sind, haben RTTI aktiviert. Diese RTTI liest der JvInspector aus und stellt diese dann dar.
Sagen wir mal, du hast eine Klasse:
Delphi-Quellcode:
Wenn du jetzt diese Klassen in JvInspector hineinlädst, wirst du nur die Eigenschaft "Blub" sehen, "Hm" siehst du nicht, da Hm nicht published ist und somit keine RTTI hat.
type
TMyClass = class(TPersistent) private FBlub : string; FHm : integer; public property Hm: integer read FHm write FHm; published property Blub: string read FBlub write FBlub; end; Aber du kannst die RTTI noch hinzufügen lassen, wenn du eine neue Klasse davon ableitest und die property "Hm" in den Published-Bereich "verschiebst"
Delphi-Quellcode:
Wenn du jetzt die neue Klassen in JvInspector hineinlädst, wirst du beide Eingenschaften sehen.
type
TMyObj = class(TMyClass) published property Hm; end; Wenn du jetzt von TLabel nur bestimmte Sachen in den Inspektor laden willst, hab ich auch noch schnell nen Quelltext für dich. Diesen musst du einfach in das obige Beispiel von mir hineinkopieren.
Delphi-Quellcode:
uses
TypInfo; procedure TForm1.ShowObject(aObj: TObject); begin JvInspector1.Root.Clear; TJvInspectorPropData.New(JvInspector1.Root, aObj, GetPropInfo(aObj, 'Left')); TJvInspectorPropData.New(JvInspector1.Root, aObj, GetPropInfo(aObj, 'Top')); TJvInspectorPropData.New(JvInspector1.Root, aObj, GetPropInfo(aObj, 'Align')); end; |
Re: Problem mit Object Inspector
Ja das hilft mir schon mal enorm ;)
Pack mir das mal in ne Form und Teste das ergebnis da versteht man schneller und sieht vor allem was passiert. gruss Emil |
Re: Problem mit Object Inspector
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal meine letzten Beiträge zusammengefasst.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 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