Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Published Eigenschaft nicht vom Typ Array? (https://www.delphipraxis.net/71377-published-eigenschaft-nicht-vom-typ-array.html)

JPSelter 14. Jun 2006 09:54


Published Eigenschaft nicht vom Typ Array?
 
Ich versuche in ein Objekt einen Array einzubringen mit diesem Code:

Delphi-Quellcode:
TDetailObject = class
    private
      [...]
      ftext1count: integer;
      ftext1: TTextArray;
      [...]
    published
      [...]
      property text1count: integer read ftext1count write ftext1count;
      property text1: TTextArray read ftext1 write ftext1; <---- error
      property text2count: integer read ftext2count write ftext2count;
      property text2: TTextArray read ftext2 write ftext2; <---- error
      [...]
  end;
Das geht aber nicht, weil er keinen Array im Published haben will. Ich habe mir dazu die Hilfe mal angesehen, aber ich verstehe die Lösung dort nicht, bzw es funktioniert so nicht. Was muss ich tun?

Damit verknüpft ist eine zweite Frage: Muss ich Text aus einem Memo unbedingt so speichern wie hier oben? Also die Zeilenanzahl merken und dann alles zeilenweise in einen Array? Bei PHP/MySQL gibt es den Datentyp TEXT, der mir sogar die Zeilenumbrüche mitspeichert. Wenn das bei Delphi so einfach wäre, dann könnte ich mir den obigen Array wiederum sparen.
Danke für Eure Hilfe!

marabu 14. Jun 2006 10:00

Re: Published Eigenschaft nicht vom Typ Array?
 
Sparen ist gut. Memo.Text ist ein String, der alle notwendigen Zeilenumbrüche enthält.

Grüße vom marabu

JPSelter 14. Jun 2006 10:04

Re: Published Eigenschaft nicht vom Typ Array?
 
Habe ich grad auch entdeckt ;) Die Eigenschaft Text taucht im Objekt-Inspektor nicht auf...

Sidorion 14. Jun 2006 10:11

Re: Published Eigenschaft nicht vom Typ Array?
 
Du kannst zwar nicht das Array selber als Property machen, wohl aber die Einträge. Dazu erstellst Du eine Indexproperty, die vom Typ String und benutzt get-und Set-Methoden:
Delphi-Quellcode:
...
  Property Text1[Index: Integer]: String Read GetText1 write SetText1;
...
Die Get-Set Methoden sehen dann so aus:
Delphi-Quellcode:
  Function GetText1(Index: Integer): String;
  Procedure SetText(Index: Integer; Value: String);
Im Funktionskörper kannst Du dann auf Dein Array zugreifen, nämlich auf den Eintrag, der mit Index angegeben ist.

Von aussen greift mann dann so zu:
Delphi-Quellcode:
  MyObj.Text1[0]:='Foo';
...
  If MyObj.Text1[0]='Foo'
  Then begin
  ...
Wenn Du allerdings zur Entwurfsteit zugreifen willst, musst Du einen Property-Editor bauen, aber das ist ein anderes Thema.

Eine Alternative wäre allerdings, anstelle des TextArrays eine TStringList zu nehmen, dann sähe die Property so aus:
Delphi-Quellcode:
  Property Text1: TStrings Read fText1;
Schreibzugriff solltest Du aber dann vermeiden, da man sonst eine andere Stringliste deiner Instanz unterjubeln kann, bzw das Ding auf Nil setzten und dann wird braun.


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