AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi OI: Ungültige Auswahl: 'KollektorItems' hat keinen Besitzer
Thema durchsuchen
Ansicht
Themen-Optionen

OI: Ungültige Auswahl: 'KollektorItems' hat keinen Besitzer

Ein Thema von oki · begonnen am 5. Jan 2007 · letzter Beitrag vom 5. Jan 2007
Antwort Antwort
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#1

OI: Ungültige Auswahl: 'KollektorItems' hat keinen Besitzer

  Alt 5. Jan 2007, 09:08
Hi Leute,

für mein aktuelles Thema scheinen sich Collections geradezu anzubieten. Nutze ich sonst eher selten. Nun tut sich ein Problem auf, dass wie folgt aussieht.

Klicke ich im OI meiner Kompo auf den button hinter meiner eingebundenen Collection, so öffnet sich mit dem Editorfenster für neue Item die im Titel angegebene Fehlermeldung. Quittiere ich diese mit OK, so schließt sich auch das Editorfenster und ich kann keine Item hinzufügen (Editorfenster ist ja weg). Das alles zur Designzeit. Implementiere ich meine Kompo zur Laufzeit, so liefert ein Add ein ungültiges Item zurück (nil).

was ist da los?

Hier die wichtigsten Code-Ausschnitte:

Delphi-Quellcode:
  TKollektorItem = class(TCollectionItem)
  private
    FC0: Real;
    FC1: Real;
    FC2: Real;
    FHersteller: String;
    FName: String;
  protected
  public
    constructor Create(Collection: TCollection); override;
    procedure AddPropsfromLine(Line : String);
  published
    property C0 : Real read FC0 write FC0;
    property C1 : Real read FC1 write FC1;
    property C2 : Real read FC2 write FC2;
    property Hersteller : String read FHersteller write FHersteller;
    property Name : String read FName write FName;
  end;

  TKollektorItems = class(TCollection)
  private
    FSeyMathObj : TSeyMathObj;
    function GetItem(Index: Integer): TKollektorItem;
    procedure SetItem(Index: Integer; const Value: TKollektorItem);
  protected
  public
    constructor create(AOwner : TSeyMathObj);
    function Add: TKollektorItem;

    Function GetKollektorItem(KollTyp : String) : TKollektorItem;
    property Items[Index: Integer]: TKollektorItem read GetItem write SetItem;
    default;
  end;

  TSeyMathObj = Class(TComponent)
  private
    FKollektorItems: TKollektorItems;
    FKollektorFileName: String;
    procedure SetKollektorFileName(const Value: String);
    procedure SetKollektorItems(const Value: TKollektorItems);
  protected
    procedure LoadKollektorItems; virtual;
  public
    constructor Create(AOwner : TComponent); override;
    Destructor Destroy; override;

    // Listen
    Procedure GetKollektorNames(NameList : TStringList; incl_Herst : Boolean = False);
    // Berechnungen
    Function GetWirkungsgrad(KollTyp : String; Tm, Ta, GK : Real):Real;
  published
    property KollektorItems : TKollektorItems read FKollektorItems write SetKollektorItems;
    property KollektorFileName : String read FKollektorFileName write SetKollektorFileName;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Seysol', [TSeyMathObj]);
end;

{ TSeyMathObj }

constructor TSeyMathObj.Create(AOwner: TComponent);
begin
  inherited create(AOwner);
  FKollektorItems := TKollektorItems.Create(self);
  LoadKollektorItems;
end;

procedure TSeyMathObj.SetKollektorItems(const Value: TKollektorItems);
begin
  FKollektorItems.Assign(Value);
end;

{ TKollektorItems }

function TKollektorItems.Add: TKollektorItem;
begin
  Result := TKollektorItem(inherited Add);
end;

constructor TKollektorItems.create(AOwner: TSeyMathObj);
begin
  inherited create(TKollektorItem); // edit oki
  FSeyMathObj := AOwner;
end;

function TKollektorItems.GetItem(Index: Integer): TKollektorItem;
begin
  Result := TKollektorItem(inherited GetItem(Index));
end;

procedure TKollektorItems.SetItem(Index: Integer;
  const Value: TKollektorItem);
begin
  inherited SetItem(Index, Value);
end;

{ TKollektorItem }

constructor TKollektorItem.Create(Collection: TCollection);
begin
  inherited create(Collection);
  FC0 := 0;
  FC1 := 0;
  FC2 := 0;
  FHersteller := '';
  FName := '';
end;
Ich dachte da kann man nicht viel falsch machen, zumal ich zwar selten, aber eben auch nicht zum ersten mal mit collection arbeite. was ich hier falsch mache hab ich aber bis jetzt aber noch nicht gefunden.

gruß oki
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#2

Re: OI: Ungültige Auswahl: 'KollektorItems' hat keinen Besit

  Alt 5. Jan 2007, 10:04
Hi,

bin schon völlig fertig. Hab jetzt auch mal meine Kompo vom Typ TCustomControl abgeleitet, gleicher Fehler. Hätte ja sein können, dass es an TComponent liegt. Ist es aber nicht.

Gruß oki
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: OI: Ungültige Auswahl: 'KollektorItems' hat keinen Besit

  Alt 5. Jan 2007, 10:09
  • Afair musst du GetOwner überschreiben.
  • inherited Add ergibt nil? Das kann einfach nicht sein, schau dir einmal den VCL-Code an. Du könntest auch versuchen, mit Debug-DCUs zu debuggen.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

Re: OI: Ungültige Auswahl: 'KollektorItems' hat keinen Besit

  Alt 5. Jan 2007, 10:11
Ich hab's

folgende Methode aus TCollection muß wie folgt überschrieben werden:

Delphi-Quellcode:
  TKollektorItems = class(TCollection)
  private
    FSeyMathObj : TSeyMathObj;
  protected
    function GetOwner: TPersistent; override;

....

function TKollektorItems.GetOwner: TPersistent;
begin
  Result := FSeyMathObj;
end;
Damit ist die Frage beantwortet.

Gruß oki

PS: dank und Gruß an Khabarakh. Da waren wir zeitgleich, aber wenn ich es just in diesem Moment nicht gefunden hätte, dann wärst du mein Retter gewesen.

Dank und Gruß
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:57 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