Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Neue Komp m. Eig. v. Typ StringList..Was muss ich beachten? (https://www.delphipraxis.net/11272-neue-komp-m-eig-v-typ-stringlist-muss-ich-beachten.html)

Nalincah 3. Nov 2003 12:06


Neue Komp m. Eig. v. Typ StringList..Was muss ich beachten?
 
Wenn ich ne neue Kompo erstelle und ne neue Eigenschaft vom Typ StringList hinzufüge, was muss ich dabei beachten??

Delphi-Quellcode:
private
  FFelder:TStringList;
published
  property Felder : TStringList read FFelder write FFelder;
  constructor Create(AOwner:TComponent);override;
  destructor Destroy;override;
Delphi-Quellcode:
destructor TCSAdressLabel.Destroy;
begin
  if assigned(ffelder) then ffelder.free;
  inherited;
end;
Delphi-Quellcode:
constructor TCSAdressLabel.Create(AOwner:TComponent);
begin
  inherited Create(aowner);
  ffelder := tstringlist.Create;
end;
Wenn ich das so mache, kann ich zwar was reinschreiben, wenn ich dann aber nochmal in den StringList-Editor rein will, schmiert Delphi ab. Kann nicht mehr speicher, kann auch die Kompo nicht mehr aus dem Form entfernen. Muss Delphi dann abschießen (Mit etwa 10 Fehlermeldungen über Adressverletzungen). Woran liegt das?

Nalincah 3. Nov 2003 13:17

Re: Neue Komp m. Eig. v. Typ StringList..Was muss ich beacht
 
Ich hab es schonmal gemacht da hat es geklappt. Leider hab ich keinen unterschied zwischen den beiden texten entdeckt der das zur auswirkung hätte. Kann es sein das ich noch irgendwas vergessen hab, was ich aber nicht entdecke?

choose 3. Nov 2003 13:33

Re: Neue Komp m. Eig. v. Typ StringList..Was muss ich beacht
 
probier
Delphi-Quellcode:
private
  FFelder:TStringList;
  procedure SetFelder(const AStrings: TStrings);
published
  property Felder : TStrings read FFelder write SetFelder;
  //..
end;
//..
procedure .SetFelder(const AStrings: TStrings);
begin
  Assert(Assigned(AStrings));
  FFelder.Assign(AStrings);
end;
Andernfalls verlierst Du die Referenz auf die von Dir erstellte Liste und versuchst stattdessen im Destruktor die Dir übergebene Referenz freizugeben. Die jedoch wurde wahrscheinlich schon vorher freigegeben.

Nalincah 3. Nov 2003 13:37

Re: Neue Komp m. Eig. v. Typ StringList..Was muss ich beacht
 
[Fehler] ucsqcomps.pas(76): Inkompatible Typen

Nalincah 3. Nov 2003 13:54

Re: Neue Komp m. Eig. v. Typ StringList..Was muss ich beacht
 
mit "write FFelder" schreibt man doch in ne Variable rein. Kann doch da keine Procedure einsetzen

choose 3. Nov 2003 14:09

Re: Neue Komp m. Eig. v. Typ StringList..Was muss ich beacht
 
Diese Implementierung funktioniert bei mir einwandfrei:
Delphi-Quellcode:
unit tststrings;

interface
uses
  Classes,
  SysUtils;

type
  TTstStrings = class(TComponent)
  private
    FStrings: TStrings;
    procedure SetStrings(const Value: TStrings);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy;override;
  published
    property Strings: TStrings read FStrings write SetStrings;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('TstStrings', [TTstStrings]);
end;

{ TTstStrings }

constructor TTstStrings.Create(AOwner: TComponent);
begin
  inherited;
  FStrings:= TStringList.Create;
end;

destructor TTstStrings.Destroy;
begin
  FreeAndNil(FStrings);
  inherited;
end;

procedure TTstStrings.SetStrings(const Value: TStrings);
begin
  Assert( Assigned(Value) );
  FStrings.Assign(Value);
end;

end.
Die Methode nach der write-Direktive gibt den Setter an, der Aufgerufen wird. Statt der Getter und Setter, wie in Java, C++, Smalltalk, etc. üblich, gibt es unter Delphi diese Spezialität, die Properties, um es dem Entwickler "angenehmer" zu machen. Außerdem basieren andere Konzepte zB der Object-Inspector auf dem Prinzip der Properties (in Java hingegen muss man sich für ähnlichen Komfort an genaue Namenskonventionen halten)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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