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 Eigene Komponente bringt Delhpi zum Absturz (https://www.delphipraxis.net/45354-eigene-komponente-bringt-delhpi-zum-absturz.html)

tobias2207 4. Mai 2005 17:50


Eigene Komponente bringt Delhpi zum Absturz
 
Hi,

ich habe ein Problem mit meiner selbstgeschriebenen Komponente, welche ich von TComponent abgeleitet habe..

Und zwar habe ich eine StringListe bei der Entwicklung implementiert, welche im Objectinspector für die Entwickler zur verfügung stehen sollte.. leider gibt delphi zahlreiche Exceptions (aus der rtl) , wenn man in der liste was geschrieben hat und diese dann schliesst, aus.. Hier der Code, wo ich denke das die Stringliste einwandfrei erzeugt wird..

bsp:
Delphi-Quellcode:
TTest = class(TComponent)
 private
  fdieListe : TStrings;
 public
  Create(AComponent: TComponent);override;
 published
  property dieListe : TStrings Read fdieListe Write fdieList;
end;

constructor TTest.Create(AComponent: TComponent);
begin
 inherited Create(AComponent);
 fdieListe := TStringList.Create;
 //fdieListe := TStrings.Create - das selbe Problem
end;
Wenn ich das mit ner Bitmap versuche stürzt delphi auch ab wenn ich ein bild geladen hab, und muss das formular löschen wegen dem fehler in der komponente.

Kann mir da jemand bitte weiterhelfen.. vielen dank.

mfg

tobias

SirThornberry 4. Mai 2005 18:42

Re: Eigene Komponente bringt Delhpi zum Absturz
 
du brauchst eine SetMethode. Denn auf diese Art und weise wird nur der Pointer (TStringlist) gesetzt. So geht es:
Delphi-Quellcode:
TTest = class(TComponent)
private
  fdieListe : TStrings;
  procedure FSetDieListe(AListe: TStringlist);
public
  Create(AComponent: TComponent);override;
published
  property dieListe : TStrings Read fdieListe Write FSetDieListe;
end;

procedure TTest.FSetDieListe(AListe: TStringlist);
begin
  if AListe = nil then
    fdieListe.Clear
  else
    fdieListe.Assign(AListe);
end;

tobias2207 4. Mai 2005 19:22

re: Eigene Komponente bringt Delhpi zum Absturz
 
Hi,

ja stimmt,damit sollte ich es mal versuchen. hatte es zwar auch schon mit nem setter versucht, aber assign nicht beachtet. werds gleich mal ausprobieren..


danke für deine hilfe..

mrmoe 19. Aug 2005 12:11

Re: Eigene Komponente bringt Delhpi zum Absturz
 
also

Zitat:

Zitat von SirThornberry
Delphi-Quellcode:
...
property dieListe : TStrings Read fdieListe Write FSetDieListe;

bringt mir immer fehler wegen typunverträglichkeit, ist ja auch klar denn "dieListe ist hier Typ TStrings und die write Aktion "FSetDieListe" braucht Typ TStringList ...

wenn ich allerdings alles nur mit TStrings mache kommt mir immer eine AV bei dem assign in der set-prozedur.
gibts da vielleciht irgnedwo ein funktionierendes beispiel zu ?

ich will in ein objekt mit einer eigenschaft vom typ TStrings die Items einer ComboBox reinkopieren, ein einfaches object.eigenschaft:=combobox.items biegt ja nur den zeiger um

Bernhard Geyer 19. Aug 2005 12:18

Re: Eigene Komponente bringt Delhpi zum Absturz
 
Zitat:

Zitat von mrmoe
bringt mir immer fehler wegen typunverträglichkeit, ist ja auch klar denn "dieListe ist hier Typ TStrings und die write Aktion "FSetDieListe" braucht Typ TStringList ...

Dann korrigiere es halt:
Delphi-Quellcode:
procedure FSetDieListe(AListe: TStrings);
Zitat:

Zitat von mrmoe
wenn ich allerdings alles nur mit TStrings mache kommt mir immer eine AV bei dem assign in der set-prozedur.
gibts da vielleciht irgnedwo ein funktionierendes beispiel zu ?

Auch wenn fdieListe vom Typ TStrings ist mußt du den Konstruktor von TStringList aufrufen. TStrings ist 'ne Abstrakte Klasse und der Compiler sollte doch 'ne Warnmeldung gebracht haben
Delphi-Quellcode:
constructor TTest.Create(AComponent: TComponent);
begin
inherited Create(AComponent);
fdieListe := TStringList.Create;
end;
Zitat:

Zitat von mrmoe
ich will in ein objekt mit einer eigenschaft vom typ TStrings die Items einer ComboBox reinkopieren, ein einfaches object.eigenschaft:=combobox.items biegt ja nur den zeiger um

Zeiger umbiegen ist nicht. Was passiert wohl wenn deine ComboBox freigegeben wird und du einen Zeiger auf die Stringliste der Compobox hast?

mrmoe 19. Aug 2005 12:50

Re: Eigene Komponente bringt Delhpi zum Absturz
 
Zitat:

Zitat von Bernhard Geyer

Delphi-Quellcode:
constructor TTest.Create(AComponent: TComponent);
begin
inherited Create(AComponent);
fdieListe := TStringList.Create;
end;

danke :thumb:
das war die Lösung, hab den Konstruktor nicht richtig gehabt. jetzt gehts auch mit dem assign als wertmäßige kopie eines TStrings Objekts in ein anderes ohne dass alle auf die selbe Speicheradresse zeigen


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