AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein RAD 11 Delphi - Wie erstelle ich Collections ?
Thema durchsuchen
Ansicht
Themen-Optionen

RAD 11 Delphi - Wie erstelle ich Collections ?

Ein Thema von paule32.jk · begonnen am 15. Sep 2023 · letzter Beitrag vom 16. Sep 2023
Antwort Antwort
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
218 Beiträge
 
Delphi 11 Alexandria
 
#1

RAD 11 Delphi - Wie erstelle ich Collections ?

  Alt 15. Sep 2023, 13:13
Hallo,
wie der Betreff schon sagt: wie erstelle ich Collections, die im Designer erstellt werden können ?
Habe dazu schon ein wenig Cose-Schnippsel:
Delphi-Quellcode:
unit ResComponent;

interface

uses
  System.SysUtils, System.Classes,
  System.Generics.Collections,
  System.Contnrs;

type
  TResourceHolderElements = class
  private
    FElementId: Integer;
    FName: String;
  public
    constructor Create(const AElementId: Integer; const AName: String);

    property ElementID: Integer read FElementId;
    property Name: String read FName;
  end;

  TResourceHolderCategories = class(TComponent)
  private
    FName: String;
    FElements: TObjectList<TResourceHolderElements>;
  public
    constructor Create(const AName: String);
    destructor Destroy; override;

    property Name: String read FName;
    property Elements: TObjectList<TResourceHolderElements> read FElements;
  end;

  TResourceHolderElementName = record
  public
    ElementId: Integer;
    Name: String;
    constructor Create(const AElementID: Integer; const AName: String);
  end;

  TComponent1 = class(TComponent)
  private
  protected
  public
  published
  end;

procedure Register;

implementation

constructor TResourceHolderCategories.Create(const AName: string);
begin
  FName := AName;
  FElements := TObjectList<TResourceHolderElements>.Create;
end;

destructor TResourceHolderCategories.Destroy;
begin
  FElements.Free;
  inherited Destroy;
end;

constructor TResourceHolderElementName.Create(const AElementID: Integer; const AName: string);
begin
  ElementID := AElementID;
  Name := AName;
end;

constructor TResourceHolderElements.Create(const AElementId: Integer; const AName: string);
begin
  FElementID := AElementID;
  FName := AName;
end;

procedure Register;
begin
  RegisterComponents('KALLUP', [TComponent1, TResourceHolderCategories]);
end;

end.
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
677 Beiträge
 
#2

AW: RAD 11 Delphi - Wie erstelle ich Collections ?

  Alt 15. Sep 2023, 15:24
Hier mal eine nicht visuelle Komponente, die eine Stringlist (hier nicht relevant) und eine Collection von StringListen enthält.

Delphi-Quellcode:
unit StringsContainer;

interface

uses
  Windows, Messages, SysUtils, Classes;

type


  TStringsColItm = class(TCollectionItem)
  private
    FESL: TStringList;
    procedure SetESL(Value: TStringList);
  public
    constructor Create(Collection: TCollection); override;
    destructor Destroy; override;
  published
    property ESL: TStringList read FESL write SetESL;
  end;


  TStringsCol = class(TCollection)
  private
    function GetItem(Idx: Integer): TStringsColItm;
    procedure SetItem(Idx: Integer; Value: TStringsColItm);
  public
    property XItems[Idx: Integer]: TStringsColItm read GetItem write SetItem; default;
  published
  end;



  TStringsContainer = class(TComponent)
  private
    { Private declarations }
    FSL: TStringList;
    FSC: TStringsCol;
    procedure SetSL(Value: TStringList);
    procedure SetSC(Value: TStringsCol);
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Published declarations }
    property SL: TStringList read FSL write SetSL;
    property SC: TStringsCol read FSC write SetSC;
  end;

procedure Register;

implementation


constructor TStringsColItm.create(Collection: TCollection);
begin
  inherited;
  FESL := TStringList.Create;
end;


destructor TStringsColItm.destroy;
begin
  FESL.Free;
  inherited;
end;


function TStringsCol.GetItem(Idx: Integer): TStringsColItm;
begin
  result := TStringsColItm(inherited Items[Idx]);
end;


procedure TStringsCol.SetItem(Idx: Integer; Value: TStringsColItm);
begin
  inherited Items[Idx] := Value;
end;


procedure TStringsContainer.SetSL(Value: TStringList);
begin
  FSL.Assign(Value);
end;


constructor TStringsContainer.Create(AOwner: TComponent);
begin
  inherited;
  FSL := TStringList.Create;
  FSC := TStringsCol.Create(TStringsColItm);
end;


destructor TStringsContainer.destroy;
begin
  FSL.Free;
  FSC.Free;
  inherited;
end;


procedure Register;
begin
  RegisterComponents('MyComps', [TStringsContainer]);
end;

procedure TStringsColItm.SetESL(Value: TStringList);
begin
  FESL.Assign(Value);
end;

procedure TStringsContainer.SetSC(Value: TStringsCol);
begin
  FSC.Assign(Value);
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.258 Beiträge
 
Delphi 12 Athens
 
#3

AW: RAD 11 Delphi - Wie erstelle ich Collections ?

  Alt 15. Sep 2023, 15:35
aus Array registrieren - geht das ?
Warum eine komische Collection?
Delphi-Referenz durchsuchenTDictionary
TDictionary<string,TArray<deintyp>>
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Sep 2023 um 15:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
218 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: RAD 11 Delphi - Wie erstelle ich Collections ?

  Alt 16. Sep 2023, 09:01
@olli73:
Danke für Deine Bemühungen !

Du verwendest zwei mal TStringList.Create im Code ...
liegen dann nicht 2 Kopien des gleichen Typs im Speicher ?
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
677 Beiträge
 
#5

AW: RAD 11 Delphi - Wie erstelle ich Collections ?

  Alt 16. Sep 2023, 09:59
das eine (FSL) ist eine Stringlist der Komponente, also keine Collection, hier nicht relevant. Das andere (FESL) ist dann eine StringList pro CollectionItem.
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
218 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: RAD 11 Delphi - Wie erstelle ich Collections ?

  Alt 16. Sep 2023, 10:55
okay.

kann man nun Dein Beispiel so erweitern,
- das man nur das Property SC im Container hat,
- ein Property für einen Property-Editor, evtl. Marke Eigenbau,
- das 2. Property an ein TComponent wie TImage oder TMemo übergeben kann ?

sprich:
- man hat pro SC, ein entsprechendes Objekt auf der Form Zugriff
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  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 16:44 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