AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Eigene Komponente mit TStrings als Eigenschaft
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Komponente mit TStrings als Eigenschaft

Ein Thema von little-x · begonnen am 23. Sep 2008 · letzter Beitrag vom 23. Sep 2008
Antwort Antwort
little-x

Registriert seit: 13. Apr 2007
Ort: Brandenburg
60 Beiträge
 
Delphi 6 Enterprise
 
#1

Eigene Komponente mit TStrings als Eigenschaft

  Alt 23. Sep 2008, 12:29
Hallo,

jetzt muss ich doch nochmal hier um Rat fragen. Ich habe eine eigene Komponente erstellt und installiert. Wenn ich die Komponente in eine Form einbinde, sehe ich im Entwurfsmodus alle published propertys der Komponente und kann sie bearbeiten. Jetzt hat eine dieser Propertys (name: Tabellen) den Typ TStrings. Im Designer sieht man dann, wie man es kennt, die 3 Punkte (...), auf die man dann klickt und dann kommt so ein Editor.

Das mit dem Editor klappt nicht; Fehlermeldung: nil kann nicht zu TRichEditStrings zugewiesen werden.
Mir ist schon klar warum das nicht geht. Die interne Speichervariable dieser Property ist nunmal nil. Im Konstruktor dieser Komponente wird ja auch gleich ein TStrings-Objekt erzeugt und mit eben jener internen Speichervariable referenziert.

Wie aber kann ich dafür sorgen dass ich schon zur Entwurfszeit mit obigem Editor arbeiten kann? Mit ListBoxes o.ä. haben sie es schließlich auch hingekriegt.

Folgende relevante Quellcodeteile:

Delphi-Quellcode:
 TFeldSperrManager = class(TComponent)

  private
        Ftabellen: TStrings;
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
        procedure setTabellen(myTabellen: TStrings);
  public
    { Public-Deklarationen }
        constructor Create(AOwner: TComponent); override;
  published
    { Published-Deklarationen }
        property Tabellen: TStrings read FTabellen write setTabellen;
  end;

//...

constructor TFeldSperrManager.Create(AOwner: TComponent);
begin
        inherited;
        FTabellen:= TStrings.Create;
end;

//...
procedure TFeldSperrManager.setTabellen(myTabellen: TStrings);
begin
        FTabellen.Assign(myTabellen);
        // hab ich mal aus TCustomListBox abgeguckt. Leider ohne Erfolg.
        // Vorher habe ich gänzlich auf Getter/Setter verzichtet (sondern direkt FTabellen angegeben). Auch ohne Erfolg.
end;

//...
Bin gespannt...

ps. Suchfunktion habe ich genutzt, die hiesige Suchfunktion ist jedoch etwas für fortgeschrittene. Daher: Wenn mir jemand einen Tipp geben kann mit welchen Suchbegriffen ich hier was gefunden hätte, bin ich gerne bereit daraus zu lernen.
manchmal machts mich mürbe
  Mit Zitat antworten Zitat
IceBube

Registriert seit: 9. Jul 2008
177 Beiträge
 
#2

Re: Eigene Komponente mit TStrings als Eigenschaft

  Alt 23. Sep 2008, 12:31
Hallo!
Das Problem hatte ich auch einmal

Die Lösung ist ganz einfach...

FTabellen := TstringList.Create; lg
  Mit Zitat antworten Zitat
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#3

Re: Eigene Komponente mit TStrings als Eigenschaft

  Alt 23. Sep 2008, 12:33
Liegt daran das TStrings ein abstrakter typ ist.
Das Create macht also ungefähr nichts (jedenfalls nichts was mit strings zu tun hat)

TStringlist.create sollte das Problem lösen
narf - not a real function
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Eigene Komponente mit TStrings als Eigenschaft

  Alt 23. Sep 2008, 12:43
Wie meine Vorredner sagten ist TStringList eine Lösung.

TStrings ist dafür gedacht, dass du bspw. eine eigene Anforderung an deine Liste hast. Z.B. ein Memo hat keine TstringList dahinter sondern, TMemoStrings; Ein Grid hat irgendwelche TGridstrings im Inneren. Das interessiert dich nur nicht, weil alle denselben Aufbau haben wie die abstrakte Klasse TStrings. Und intern machen sie noch ein wenig mehr und unterscheiden sich auch. Ansprechen kannst du also alle Klassen mit TStrings und zwar über die virtuellen Schreib- und Lese-Methoden. TStrings ist nur die Verpackung, innen sind die Methoden unterschiedlich implementiert.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
little-x

Registriert seit: 13. Apr 2007
Ort: Brandenburg
60 Beiträge
 
Delphi 6 Enterprise
 
#5

Danke Euch!

  Alt 23. Sep 2008, 12:53
Tja das war's auch schon. Jetzt sind auch gleich die Laufzeitfehler der Art "abstrakter Fehler" mit weg, die aufgetreten sind als ich die Einträge programmiertechnisch hinzufügen wollte.

Werd's mir merken!

Danke!
manchmal machts mich mürbe
  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:06 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