einer eigenen klasse zu eigenschaften hinzufügen ?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
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)

einer eigenen klasse zu eigenschaften hinzufügen ?

Beitrag von pluto »

Hallo,
ich habe jetzt eine klasse entwicklet der möchte ich gerne neue eigenschaften durch eine andre klasse hinzufügen.

Die TPaint2Obj klasse ist soweit fertig.... jetzt habe ich eine imagelist geschrieben die auch wunderbar funktniert und nun möchte ich gerne bestimmte eigenschaften zu jedem TPaint2OBJ hinzufügen. wie z.b. ImageIndex, Imagelist, ImageName und soweiter.....
das einfachste währe ja jetzt diese eigenschaften einfach der besagten TPaint2OBJ hinzuzufügen nur das möchte ich nicht(nur wenn sich nicht vermeiden lässt).

Vielen dank im vorraus !

edit:
habe folgenden code bei meiner such bei delphipraxis gefunden:

Code: Alles auswählen

TObjectHelper = class helper for TPaint2Obj
  public
    fImageList:tImagelistb
  end;

allerdings meckert er bei for
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

hä ? was macht das "class helper for TPaint2Obj " lässt sich das überhaupt compilieren ?

Also ich würd das so machen

Code: Alles auswählen

TObjectHelper = class
private
  fImageList:tImagelistb
public
  property ImageList : tImagelistb read fImageList write fImageList;
end; 
 
TMyObjekt = class(TObjectHelper)
end;


Damit hat TMyObjekt automatisch auch automatisch eine Eigenschaft ImageList ...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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 das geht leider nicht da TPaint2OBJ schon von einer andren klasse abgeleitet ist und zwar von TPaint2Object(von der sind alle klassen abgeleitet) und dieses klasse ist von:TPersistent abgeleitet wegen dem OI
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Klar geht das Objekt vererbung geht unendlich in die tiefe
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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 aber nicht mehrfach vererbung !
also sowas:
tmyclass = class(klasse1,klasse2)

das währe praktisch !
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Nein das geht nicht das kann nur c++ mit interfaces geht das irgendwie aber da bin ich auch nicht so ganz dahinter *ruf* theo ?! ne ahnung ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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 dann muss ich wohl die einfachste methode wählen:
die klasse TPaint2Obj veärndern... irgenwie schade ich dachte OOP könnte mehr !
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Naja bisher bin ich auch so immer hingekommen und ich verpacke fast jede funktionalität in klassen :) So jetzt muss ich aber wirklich mitm hund ...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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 »

was meinst du eigentlich mit "mitm hund" ? ="mit meinem hund" ?
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

mitm = mit dem in diesem fall
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Christian hat geschrieben:Nein das geht nicht das kann nur c++ mit interfaces geht das irgendwie aber da bin ich auch nicht so ganz dahinter *ruf* theo ?! ne ahnung ?


Hier! ;-)

Naja interfaces mag ich eigentlich auch nicht so.
Das ist von mir aus gesehen nur praktisch, wenn's gar nicht anders geht.
Beispiel: Du schreibst einen Datei Viewer und möchtest z.B. zur Laufzeit zwischen TWebBrowser und TRichEdit wechseln, ohne das deine GUI Methoden einen Unterschied machen müssen, welches Teil gerade aktiv ist.
Da du da nicht gut "unten" anfangen kannst, bei der Ableitung von einer gemeinsamen Basisklasse kannst du ein Interface deklarieren, welches z.B. die Methoden LoadFromFile und SaveToFile vorschreibt.

Dann kannst du eine Klasse von TWebBrowser und TRichEdit ableiten, welche das Interface implementiert.

z.B: TGUIBrowser= class(TWebBrowser, IGUIView)
z.B: TGUIRichEdit= class(TRichEdit, IGUIView)

Dann kannst du im GUI Code einfach eine Variable IGUIView halten und diese mit LoadFromFile ansprechen, egal welches nun aktiv ist.

..oder so ähnlich, habe ich jetzt ausnahmsweise aus dem Handgelenk geschrieben. ;-)

Wenn's irgendwie geht, benutze ich aber immer die gemeinsame Basisklasse.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Also ist n Interface auch nichts anderes als ne klasse bloss das ich das in eine Vererbung mit einschleusen kann ? Gibt's da irgendwelche Einschränkungen ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Christian hat geschrieben:Also ist n Interface auch nichts anderes als ne klasse


Interfaces machen "Reference Counting" und damit automatisches "free", wenn keiner mehr d'rauf zugreift.

Die Details habe ich aber auch nicht d'rauf und ernsthaft benutzt habe ich es nicht.

-Michael

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 »

ich glaube ich meinte das anders... weil wenn ich das so mache wie du es vorschlägst könnte ich gleich die eigentliche klasse erweitern ohne es so kompliziert zu machen !

schade ! ich dachte es würde einen weg geben vorhandene klassen, eigenschaften, methoden hinzuzufügen :(

naja das bleibt mir wohl nichts andres ürbig als die eigentliche klasse zu ändern !
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Christian hat geschrieben:Also ist n Interface auch nichts anderes als ne klasse bloss das ich das in eine Vererbung mit einschleusen kann ?


Naja, das Interface (Schnittstelle) ist eigentlich nur die Defintition von Methoden.

Einfach könnte man's so sagen:
Eine Klasse, welchen ein Interface implementiert, "verspricht" die im interface definierten Methoden bereitzustellen.

Antworten