Einzelnen Beitrag anzeigen

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