AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Neue Komp m. Eig. v. Typ StringList..Was muss ich beachten?
Thema durchsuchen
Ansicht
Themen-Optionen

Neue Komp m. Eig. v. Typ StringList..Was muss ich beachten?

Ein Thema von Nalincah · begonnen am 3. Nov 2003 · letzter Beitrag vom 3. Nov 2003
Antwort Antwort
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#1

Neue Komp m. Eig. v. Typ StringList..Was muss ich beachten?

  Alt 3. Nov 2003, 12:06
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?
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#2

Re: Neue Komp m. Eig. v. Typ StringList..Was muss ich beacht

  Alt 3. Nov 2003, 13:17
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?
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Neue Komp m. Eig. v. Typ StringList..Was muss ich beacht

  Alt 3. Nov 2003, 13:33
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.
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#4

Re: Neue Komp m. Eig. v. Typ StringList..Was muss ich beacht

  Alt 3. Nov 2003, 13:37
[Fehler] ucsqcomps.pas(76): Inkompatible Typen
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#5

Re: Neue Komp m. Eig. v. Typ StringList..Was muss ich beacht

  Alt 3. Nov 2003, 13:54
mit "write FFelder" schreibt man doch in ne Variable rein. Kann doch da keine Procedure einsetzen
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Neue Komp m. Eig. v. Typ StringList..Was muss ich beacht

  Alt 3. Nov 2003, 14:09
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)
gruß, choose
  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 14:49 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