Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   RAD 11 Delphi - Wie erstelle ich Collections ? (https://www.delphipraxis.net/213725-rad-11-delphi-wie-erstelle-ich-collections.html)

paule32.jk 16. Sep 2023 12:49

AW: RAD 11 Delphi - Wie erstelle ich Collections ?
 
sodele, jetzt habe ich wieder ein Problem:
Delphi-Quellcode:
uses
  System.SysUtils, System.Classes,
  System.Generics.Collections,
  System.Contnrs,

  DesignIntf, DesignEditors;
Die letzten beiden Units können nicht gefunden werden.

paule32.jk 16. Sep 2023 13:18

AW: RAD 11 Delphi - Wie erstelle ich Collections ?
 
okay, ToolsApi Pfad, und designide.dcp ...
dann erhalte ich sowas (keine Fehlermeldung, aber bei Collection->Text öffnet sich kein Editor):
Delphi-Quellcode:
unit ResComponent;

interface

uses
  System.SysUtils, System.Classes,
  System.Generics.Collections,
  System.Contnrs,
  VCL.Forms,

  DesignIntf, DesignEditors;

type
  TText0 = type Integer;
  TText0Property = class(TPropertyEditor)
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure Initialize; override;
    procedure Edit; override;
    function GetValue: string; override;
    procedure SetValue(const Value: string); overload; override;
  end;

type
  TResourceHolderItem = class(TCollectionItem)
  private
    FStringList: TStringList;
    FTextProperty: TText0Property;
    procedure setStringList(AValue: TStringList);
  public
    constructor Create(Collention: TCollection); override;
    destructor Destroy; override;
  published
    property Element: TStringList read FStringList write setStringList;
    property Text: TText0Property read FTextProperty write FTextProperty;
  end;

  TResourceHolder = class(TCollection)
  private
    function GetItem(AIndex: Integer): TResourceHolderItem;
    procedure SetItem(AIndex: Integer; AValue: TResourceHolderItem);
  public
    property Items[Index : Integer]: TResourceHolderItem read GetItem write SetItem;
  end;

  TCompressedResource = class(TComponent)
  private
    FStringList: TStringList;
    FCollection: TResourceHolder;
    procedure SetStringList(AValue: TStringList);
    procedure SetCollection(AValue: TResourceHolder);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Collection: TResourceHolder read FCollection write SetCollection;
    property StringList: TStringList read FStringList write SetStringList;
  end;

procedure Register;

implementation

constructor TResourceHolderItem.Create(Collention: TCollection);
begin
  inherited;
  FStringList := TStringList.Create;
end;

destructor TResourceHolderItem.Destroy;
begin
  FStringList.Clear;
  FStringList.Free;
  FStringList := nil;
  inherited;
end;

procedure TResourceHolder.SetItem(AIndex: Integer; AValue: TResourceHolderItem);
begin
  inherited Items[AIndex] := AValue;
end;

function TResourceHolder.GetItem(AIndex: Integer): TResourceHolderItem;
begin
  result := TResourceHolderItem(inherited Items[AIndex]);
end;

procedure TResourceHolderItem.setStringList(AValue: TStringList);
begin
  FStringList.Assign(AValue);
end;

constructor TCompressedResource.Create(AOwner: TComponent);
begin
  inherited;

  FStringList := TStringList.Create;
  FCollection := TResourceHolder.Create(TResourceHolderItem);
end;

destructor TCompressedResource.Destroy;
begin
  FStringList.Clear;
  FStringList.Free;
  FStringList := nil;

  FCollection.Clear;
  FCollection.Free;
  FCollection := nil;

  inherited;
end;

procedure TCompressedResource.SetStringList(AValue: TStringList);
begin
  FStringList.Assign(AValue);
end;

procedure TCompressedResource.SetCollection(AValue: TResourceHolder);
begin
  FCollection.Assign(AValue);
end;


procedure TText0Property.Edit;
var
  F: TForm;
begin
  F := TForm.Create(nil);
  try
    F.Position := poScreenCenter;
    F.Height := Screen.Height - 100;
    F.Width := 500;
    F.ShowModal;
  finally
    F.Free;
  end;
end;

function TText0Property.GetAttributes: TPropertyAttributes;
begin
  Result := [paDialog];
end;

function TText0Property.GetValue: string;
begin
   Result := '100';
end;

procedure TText0Property.Initialize;
begin
  inherited;
end;

procedure TText0Property.SetValue(const Value: string);
begin
  SetOrdValue(StrToInt(Trim(Copy(Value, 1, Pos(':', Value + ':') - 1))));
end;

procedure Register;
begin
  RegisterPropertyEditor(
    TypeInfo(TText0),
    TResourceHolderItem,
    'Text',
    TText0Property);

  RegisterComponents('KALLUP', [TCompressedResource]);
end;

end.

Olli73 16. Sep 2023 15:03

AW: RAD 11 Delphi - Wie erstelle ich Collections ?
 
Wie oben schon geschrieben habe ich noch keinen Property-Editor geschrieben, aber muss es nicht heißen:

FTextProperty: TText0;

himitsu 16. Sep 2023 17:44

AW: RAD 11 Delphi - Wie erstelle ich Collections ?
 
Dass es diese Units nicht als PAS/DCU gibt, wird doch überall erklärt?`
Es muß das Package "designide" benutzt (via requires gelinkt) werden.


Beim RegisterPropertyEditor müssen nicht alle Parameter gefüllt werden.
* Type der Klasse
* Name des Property
* Type des Property

ist es ein eindeutiger Type, dann reicht Letzteres,
ansonsten auch Klasse+Name
aber aber Klasse+Name+Propertytyp geht auch

In Teilen hat man den Vorteil, dass man mehrere Klassen/Property damit versorgen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr.
Seite 2 von 2     12   

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