Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Frage zur property Lines (https://www.delphipraxis.net/124690-frage-zur-property-lines.html)

Super_Chemiker 23. Nov 2008 13:09


Frage zur property Lines
 
hi :dp:
ich bin kein großer experte(eher anfänger) wenns um das erstellen einer klasse/komponente geht!
kann mir hier jemand helfen?
Delphi-Quellcode:
type
  TTextfield = class(Twincontrol)
  private
    { Private-Deklarationen } 
    fLines: TStringlist;
   
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    constructor Create (AOwner: TComponent); override;
   
  published
    { Published-Deklarationen }
    property Lines read: fLines; write: fLines;
  end;
beim kompilieren erhalte ich folgende fehler:
  • Eigenschaft Lines existiert nicht in Basisklasse
  • , oder : erwartet aber ; gefunden
  • das published feld write ist weder vom typ class noch interface

alle in der zeile property lines ...

vielen dank im vorraus

Neutral General 23. Nov 2008 13:30

Re: Frage zur property Lines
 
Hi,

Du hast bei der Property den Typ vergessen.
So muss es sein:

Delphi-Quellcode:
property Lines: TStringlist read fLines write fLines;
Edit: Stimmt, die doppelpunkte hatte ich gar nicht bemerkt...

Uwe Raabe 23. Nov 2008 13:31

Re: Frage zur property Lines
 
Und entferne mal die Doppelpunkte nach read und write...

Bist du sicher, daß beim write die Instanz von FLines ersetzt werden soll? Normalerweise wird der Schreibzugriff auf so eine Property über FLines.Assign geregelt.

Andreas L. 23. Nov 2008 13:41

Re: Frage zur property Lines
 
Zitat:

Zitat von Uwe Raabe
Und entferne mal die Doppelpunkte nach read und write...

Bist du sicher, daß beim write die Instanz von FLines ersetzt werden soll? Normalerweise wird der Schreibzugriff auf so eine Property über FLines.Assign geregelt.

Soll heißen das du dir eine Setter-Method erstellen sollst:

Delphi-Quellcode:
type
  TTextfield = class(Twincontrol)
  private
    { Private-Deklarationen }
    fLines: TStringlist;
   
  protected
    procedure SetLines(Value: TStringList);
  public
    { Public-Deklarationen }
    constructor Create (AOwner: TComponent); override;
   
  published
    { Published-Deklarationen }
    property Lines:TStringList read fLines write SetLines;
  end;

...

procedure TTextfield.SetLines(Value: TStringList);
begin
  FLines.assign(Value);
end;

sx2008 23. Nov 2008 13:55

Re: Frage zur property Lines
 
Man sollte TStringList an den richtigen Stellen durch TStrings ersetzen - das macht das Property kompatibel zu allen anderen Klassen, die von TStrings abgeleitet sind.
Delphi-Quellcode:
type
  TTextfield = class(Twincontrol)
  private
    { Private-Deklarationen }
    fLines: TStrings;
   
  protected
    procedure SetLines(Value: TStrings);
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
   
  published
    { Published-Deklarationen }
    property Lines:TStrings read fLines write SetLines;
  end;

...

constructor TTextfield.Create(AOwner: TComponent);
begin
  inherited;
  fLines := TStringList.Create; // die einzigste Stelle, an der TStringList geschrieben wird
end;


procedure TTextfield.SetLines(Value: TStrings);
begin
  FLines.assign(Value);
end;

Super_Chemiker 8. Dez 2008 11:17

Re: Frage zur property Lines
 
Super!
Wie gesagt bin ich ein Anfänger im erstellen von Komponenten, also wie mache ich, dass der Inhalt von lines angezeigt wird?(Also zur Laufzeit oder Erstellungszeit auf dem Form)

Super_Chemiker 9. Dez 2008 15:30

Re: Frage zur property Lines
 
Weiß das keiner?
Ich hab momentan nur ein graues Rechteck! :(

DeddyH 9. Dez 2008 15:31

Re: Frage zur property Lines
 
Das soll aussehen wie z.B. ein Memo? Dann würde ich die Paint-Methode überschreiben und selber zeichnen.

Super_Chemiker 9. Dez 2008 15:33

Re: Frage zur property Lines
 
das soll so sein wie trichedit mit
Delphi-Quellcode:
color := clbtnface;
borderstyle := bsnone;
Readonly := true;
edit:
create sieht so aus:
Delphi-Quellcode:
inherited Create (AOwner);
     flines := tstringlist.Create;
     Color := clbtnface;
     SetBounds (0,0,150,300);
     lines.Text := 'Textfield';

DeddyH 9. Dez 2008 15:36

Re: Frage zur property Lines
 
Dann überschreib doch mal Paint und gib dort den Text aus. Alternativ könntest Du doch auch etwas tiefer ansetzen und etwa von TMemo/TCustomMemo ableiten, das spart eine Menge Arbeit.


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