AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TCollection speichert nicht im DFM, was fehlt?
Thema durchsuchen
Ansicht
Themen-Optionen

TCollection speichert nicht im DFM, was fehlt?

Ein Thema von RSE · begonnen am 16. Apr 2010 · letzter Beitrag vom 17. Mär 2013
 
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#7

Re: TCollection speichert nicht im DFM, was fehlt?

  Alt 16. Apr 2010, 15:40
@Andreas:

Zitat von Andreas L.:
@Heza: So sollte der constructor von TCollection nicht überschrieben werden
Doch, so sollte das gemacht werden (siehe z.B. THeaderSection in ComCtrls).

Zitat von Andreas L.:
Und da liegt auch nicht der Fehler
Das ist allerdings richtig.

Es liegt wohl eher daran das er in der Komponente seine Collection Eigenschaft nicht im published-Teil stehen hat.

Mit dem folgenden Source habe ich auf jedenfall erfolgreich eine Komponente mit Collection-Eigenschaft programmiert (getestet unter D2010, sollte aber keine Rolle spielen)

Delphi-Quellcode:
unit MyComponents;

interface

uses
  SysUtils, Classes;

type
  TMyCollectionItem = class(TCollectionItem)
  private
    FData: String;
  public
    procedure Assign(Source: TPersistent); override;
  published
    property Data: String read FData write FData;
  end;

  TMyCollection = class(TCollection)
  private
    FOwner: TComponent;
    function GetItems(Index: Integer): TMyCollectionItem;
    procedure SetItems(Index: Integer; Value: TMyCollectionItem);
  protected
    function GetOwner: TPersistent; override;
  public
    constructor Create(Owner: TComponent);
    function Add: TMyCollectionItem;
    property Items[Index: Integer]: TMyCollectionItem read GetItems write SetItems; default;
  end;

  TMyComponent = class(TComponent)
  private
    FItems: TMyCollection;
    procedure SetItems(const Value: TMyCollection);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Items: TMyCollection read FItems write SetItems;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TMyComponent]);
end;

{ TMyCollectionItem }

procedure TMyCollectionItem.Assign(Source: TPersistent);
begin
  if Source is TMyCollectionItem then
    Data := TMyCollectionItem(Source).data
  else
    inherited;
end;

{ TMyCollection }

constructor TMyCollection.Create(Owner: TComponent);
begin
  inherited Create(TMyCollectionItem);
  FOwner := Owner;
end;

function TMyCollection.Add: TMyCollectionItem;
begin
  Result := inherited Add as TMyCollectionItem;
end;

function TMyCollection.GetItems(Index: Integer): TMyCollectionItem;
begin
  Result := GetItem(Index) as TMyCollectionItem;
end;

function TMyCollection.GetOwner: TPersistent;
begin
  Result := FOwner;
end;

procedure TMyCollection.SetItems(Index: Integer; Value: TMyCollectionItem);
begin
  SetItem(Index, Value);
end;

{ TMyComponent }

constructor TMyComponent.Create(AOwner: TComponent);
begin
  inherited;
  FItems := TMyCollection.Create(self);
end;

destructor TMyComponent.Destroy;
begin
  FreeAndNil(FItems);
  inherited;
end;

procedure TMyComponent.SetItems(const Value: TMyCollection);
begin
  FItems := Value;
end;

end.
Ciao HeZa
  Mit Zitat antworten Zitat
 


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 09:02 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