AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Object Inspector

Ein Thema von EWeiss · begonnen am 29. Aug 2008 · letzter Beitrag vom 31. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

Problem mit Object Inspector

  Alt 29. Aug 2008, 09:08
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:
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;
Klicke ich nun auf das Designer Window dann hole ich mir die Class über
Delphi-Quellcode:
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;
Ist DesignClass mehr als nichts versuche ich das Control dem Object inspector hinzu zu fügen
AddControls(TControl(Sender), DesignClass);
Delphi-Quellcode:
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;
Das problem ist nun das er mir nicht die eigenschaften vom Image1 bzw.. Label1 addiert
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
Miniaturansicht angehängter Grafiken
editor_519.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#2

Re: Problem mit Object Inspector

  Alt 29. Aug 2008, 18:44
Also in meinem Editor meiner Desktop Widget Engine hab ich es so gelöst:

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:
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
So, jetzt füge ich erst alle verfügbaren Klassen in die Liste hinzu. Beim Label schaut das z.B. so aus:
wgClassList.AddClass(TwgLabel.ClassName, TwgLabel, True, 'Standard'); Im Editor gibt es dann eine einfache Methode, eine neue Klasse zu erstellen:
Delphi-Quellcode:
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;
Ach noch was: Ich verwende nicht TControl als Basis, sondern eine eigene Basisklasse. Daher ist bei mir TwgComponent bei dir TControl

Hoffe das Hilft dir etwas.
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: Problem mit Object Inspector

  Alt 29. Aug 2008, 19:15
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
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#4

Re: Problem mit Object Inspector

  Alt 29. Aug 2008, 19:30
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.
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: Problem mit Object Inspector

  Alt 29. Aug 2008, 19:43
Zitat von littleDave:
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.
Wenn du einen Label in das Designer Window einfügst
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
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#6

Re: Problem mit Object Inspector

  Alt 29. Aug 2008, 19:55
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;
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: Problem mit Object Inspector

  Alt 29. Aug 2008, 20:03
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
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#8

Re: Problem mit Object Inspector

  Alt 29. Aug 2008, 20:27
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:
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;
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.

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:
type
  TMyObj = class(TMyClass)
  published
    property Hm;
  end;
Wenn du jetzt die neue Klassen in JvInspector hineinlädst, wirst du beide Eingenschaften sehen.

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;
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

Re: Problem mit Object Inspector

  Alt 29. Aug 2008, 20:36
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
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#10

Re: Problem mit Object Inspector

  Alt 29. Aug 2008, 21:49
Hier mal meine letzten Beiträge zusammengefasst.
Angehängte Dateien
Dateityp: zip beispiel_154.zip (350,3 KB, 22x aufgerufen)
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:19 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