![]() |
Neue Kompo mit eigenem Typ
Ich hab ne Komponente geschrieben, die 2 Eigene Typen besitzt. Diese Typen besitzen Variablen die ich unter Private und Eigenschaften die ich als Property unter published deklariert habe.Nachdem ich die Komponenten installiert habe hab ich unter der neuen Eigenschaft auch das "+" gesehen, nur als ich drauf geklickt habe, wurden keine Unterpunkte angezeigt (Wie bei "Font"). Im Quelltext kann ich aber auf die Untereigenschafte zugreifen. Woran liegt das?
|
Re: Neue Kompo mit eigenem Typ
Liefer bitte mal etwas Source. Sonst wird dir kaum einer helfen können.
|
Re: Neue Kompo mit eigenem Typ
Sorry. Hier:
Delphi-Quellcode:
Soll ein Monopoly-Klon werden *g*
unit uMP_Strasse;
interface uses SysUtils, Classes, Controls, ExtCtrls; type TMieten = class(TPersistent) private FMiete:Integer; FMiete1Haus: Integer; FMiete2Haus: Integer; FMiete3Haus: Integer; FMiete4Haus: Integer; FMieteHotel: Integer; published property Miete: Integer read FMiete write FMiete; property Miete1Haus: Integer read FMiete1Haus write FMiete1Haus; property Miete2Haus: Integer read FMiete2Haus write FMiete2Haus; property Miete3Haus: Integer read FMiete3Haus write FMiete3Haus; property Miete4Haus: Integer read FMiete4Haus write FMiete4Haus; property MieteHotel: Integer read FMieteHotel write FMieteHotel; end; TStrassenWerte = class(TPersistent) private FStrassenName:String; FGrundstueckswert: Integer; FHauskosten: Integer; FHotelkosten: Integer; FMieten:TMieten; published property StrassenName: String read FStrassenName write FStrassenName; property Grundstueckswert: Integer read FGrundstueckswert write FGrundstueckswert; property Hauskosten: Integer read FHauskosten write FHauskosten; property Hotelkosten: Integer read FHotelkosten write FHotelkosten; property Mieten:TMieten read FMieten write FMieten; end; TMP_Strasse = class(TImage) private FStrassenWerte:TStrassenWerte; published property StrassenWerte: TStrassenWerte read FStrassenWerte write FStrassenWerte; end; procedure Register; implementation procedure Register; begin RegisterComponents('Monopoloy', [TMP_Strasse]); end; end. |
Re: Neue Kompo mit eigenem Typ
Habe mal in einer Kompo von mir nachgeguckt. Versuche das mal abzukupfern :
Delphi-Quellcode:
Allerdings frage ich mich, wo du das + her haben willst. :gruebel: Das kommt normalerweise nur durch SetSubComponent (true);TlblEdit = class(TEdit) private FAlignment: TAlignment; ... procedure SetAlignment(Value: TAlignment); published ... property Alignment: TAlignment read FAlignment write SetAlignment; procedure TlblEdit.SetAlignment (Value: TAlignment); begin FAlignment := Value; RecreateWnd; end; |
Re: Neue Kompo mit eigenem Typ
Genauso hab ich es doch. Und irgendwas mit SubComponents hab ich nirgends. Das ist der komplette Source
|
Re: Neue Kompo mit eigenem Typ
Zitat:
|
Re: Neue Kompo mit eigenem Typ
Ok. Aber dein TAlignment hat keine Untereigenschaften
|
Re: Neue Kompo mit eigenem Typ
Hallo bo,
wenn Du innerhalb einer Komponente oder einem Nachfahren von TPersistent ein Objekt nutzen möchtest, musst Du dieses auf mit Create erzeugen und mit Free wieder freigeben. D.h. Du muss in Deinen Objekten TStrassenWerte und TMP_Strasse jeweils den constructor und destructor überschreiben. In Deinem Source kann ich das nicht finden. |
Re: Neue Kompo mit eigenem Typ
Doch : links/rechtsbündig und zentriert.
|
Re: Neue Kompo mit eigenem Typ
Mein neuer Code:
Delphi-Quellcode:
TMP_Strasse = class(TImage) private
FStrassenWerte:TStrassenWerte; public constructor Create(AOwner:TComponent);override; destructor Destroy;override; published property StrassenWerte: TStrassenWerte read FStrassenWerte write FStrassenWerte; end;
Delphi-Quellcode:
Da krieg ich beim öffnen des Projekts wo die Kompo schon drin ist:
constructor TMP_Strasse.Create(AOwner:TComponent);
begin FStrassenWerte := TStrassenWerte.Create; end; destructor TMP_Strasse.Destroy; begin FStrassenWerte.free; end; Zitat:
|
Re: Neue Kompo mit eigenem Typ
Was vergessen?
inherited Create(AOwner); :lol: Udo |
Re: Neue Kompo mit eigenem Typ
Hallo bo,
Du musst natürlich auch die Assign Methode von TPersistent überschreiben. Wenn ich mich recht erinnere kann sonst der OI die Werte nicht richtig verarbeiten. |
Re: Neue Kompo mit eigenem Typ
Delphi-Quellcode:
26 TStrassenWerte = class(TPersistent)
27 private 28 FStrassenName:String; 29 FGrundstueckswert: Integer; 30 FHauskosten: Integer; 31 FHotelkosten: Integer; 32 FMieten:TMieten; 33 public 34 constructor Create(AOwner:TComponent);override; // <-- FEHLER 35 destructor Destroy;override; 36 published 37 property StrassenName: String read FStrassenName write FStrassenName; 38 property Grundstueckswert: Integer read FGrundstueckswert write FGrundstueckswert; 39 property Hauskosten: Integer read FHauskosten write FHauskosten; 40 property Hotelkosten: Integer read FHotelkosten write FHotelkosten; 41 property Mieten:TMieten read FMieten write FMieten; 42 end; Zitat:
|
Re: Neue Kompo mit eigenem Typ
Hi,
nur wenn du deine Klasse von TComponent ableiteten würdest, müsstet du den Konstruktor so überschreiben. Wenn du von TPersistent ableitet ist das override überflüssig. mfG mirage228 |
Re: Neue Kompo mit eigenem Typ
Zitat:
Aber er überschreibt den Konstruktor nicht, sondern überlädt ihn, weil der erebte Konstruktor von TObject stammt und keinen Parameter erwartet. |
Re: Neue Kompo mit eigenem Typ
Ich hab das "override" weggelassen aber jetzt krieg ich das hier:
Code:
[Warnung] uMP_Strasse.pas(35): Methode 'Destroy' verbirgt virtuelle Methode vom Basistyp 'TPersistent'
|
Re: Neue Kompo mit eigenem Typ
Zitat:
mfG mirage228 |
Re: Neue Kompo mit eigenem Typ
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 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