einer eigenen klasse zu eigenschaften hinzufügen ?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

pluto hat geschrieben:währe aber manchemal echt praktisch *G*


Aber auch gefährlich. Leider gibt es den Wiki Artikel nicht auf deutsch.
Probier mal die Google Übersetzung zu verstehen:
Hier (Url gekürzt)

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

naja..... wobei ich glaube das sich dadruch mein problem auch nicht lösen läst !
ich habe mal irgenwo( ich glaube unter http://www.delphiforum.de) was gefunden per zufall und im nachhin war es glaube ich genau das problem was ich jetzt habe !
aber finde mal genau diesen beitrag wieder !

das ist wie eine suche nach der nadel im heuhaufen *G*
MFG
Michael Springwald

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Jessas, ist die Übersetzung grauslich... :lol:

Aber warum mußt Du denn unbedingt die Vererbung so veranstalten? Um mal auf das Beispiel aus dem Kauderwelsch einzugehen:

Code: Alles auswählen

type
  TTierartSet = (tier_land, tier_wasser);
  TTierart    = tier_land..tier_wasser;
 
  TSaeugeTier = class(TPersistent) // das hier ist wichtig wegen published
  private
    FTierart: TTierart;
    FAnzBeine : integer;
  published
    property Tierart: TTierart read FTierart write FTierart;
    property AnzBeine : integer read FAnzBeine;
  end;
 
  TKatze = class(TSaeugeTier) // nun hat Katze schon alles was zu Säugetier paßt
  private
    FJagtMaeuse: boolean
  published
    property Tierart default tier_land;
    property AnzBeine default 4;
    property JagtMaeuse: boolean read FJagtMaeuse default true;
  end;


Mach die alle in einer Unit und du kannst auf die private-Eigenschaften des Vorgängers zugreifen. Brauchste aber nicht, wenn du die interessierenden Eigenschaften aus dem Vorgänger einfach in published wiederholst, aber ohne dabei den Typ anzugeben, nur der Name reicht.

Da Du von TPersistent abgeleitet hast, kommst du auch an die Propertys ran. Im verarbeitenden Objekt kann man dann:

Code: Alles auswählen

TLebenwesenEditor = class(TForm)
private
  TLebewesenList: TList;
end;


TList frißt grundsätzlich alles, also auch alle Tiere. Durch Testen auf das Objekt in der Liste bekommst du dann das richtige Tier und kannst ein Typecast (TKatze(TLebewesenList.Items[i])) machen und das dem Propertygrid zuweisen. Das stellt das dann auch genau richtig dar.

Schwimmende Säugetiere kriegen dann einfach 0 Beine und Tierart = tier_wasser. Verfeiner das mal, dann kannst du alleine durch sammeln von Datensätzen auch alle beliebigen Vierbeiner an Land beschreiben und deren Besonderheiten als Text beschreiben. Großartig vererben muß man da garnix.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

genau so mache ich es... ich werde mal denn qullcode anhängen ! ob ihr es komplieren könnt weiß ich nicht ! ihr müst aufjedenfall die VST installiert haben !
Dateianhänge
soruce.zip
(1.2 MiB) 82-mal heruntergeladen
MFG
Michael Springwald

Antworten