![]() |
Published Eigenschaft nicht vom Typ Array?
Ich versuche in ein Objekt einen Array einzubringen mit diesem Code:
Delphi-Quellcode:
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?
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; 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! |
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 |
Re: Published Eigenschaft nicht vom Typ Array?
Habe ich grad auch entdeckt ;) Die Eigenschaft Text taucht im Objekt-Inspektor nicht auf...
|
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:
Die Get-Set Methoden sehen dann so aus:
...
Property Text1[Index: Integer]: String Read GetText1 write SetText1; ...
Delphi-Quellcode:
Im Funktionskörper kannst Du dann auf Dein Array zugreifen, nämlich auf den Eintrag, der mit Index angegeben ist.
Function GetText1(Index: Integer): String;
Procedure SetText(Index: Integer; Value: String); Von aussen greift mann dann so zu:
Delphi-Quellcode:
Wenn Du allerdings zur Entwurfsteit zugreifen willst, musst Du einen Property-Editor bauen, aber das ist ein anderes Thema.
MyObj.Text1[0]:='Foo';
... If MyObj.Text1[0]='Foo' Then begin ... Eine Alternative wäre allerdings, anstelle des TextArrays eine TStringList zu nehmen, dann sähe die Property so aus:
Delphi-Quellcode:
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.
Property Text1: TStrings Read fText1;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 Uhr. |
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