einer eigenen klasse zu eigenschaften hinzufügen ?

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

Du kannst es doch von einer vorhandenen klasse anleiten dann hast deren Eigenschaften und Funktionen ?
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 »

Ich hab hier mal n' super einfaches Beispiel gemacht.
Braucht ein TMemo und einen TButton auf dem Formular.
Das zeigt natürlich nur einen Bruchteil der ganzen Geschichte, dafür ist es aber einfach zu verstehen.

Code: Alles auswählen

unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Buttons,
  StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
 
IMyInterface = interface
  procedure P1;
end;
 
{ TB }
 
TA = class(TInterfacedObject, IMyInterface)
public
  procedure P1;
  destructor Destroy; override;
end;
 
{ TB }
 
TB = class(TInterfacedObject, IMyInterface)
public
  procedure P1;
  destructor Destroy; override;
end;
 
var
  Form1: TForm1;
 
implementation
 
{ TA }
 
procedure TA.P1;
begin
  Form1.Memo1.Lines.Add('A');
end;
 
destructor TA.Destroy;
begin
  Form1.Memo1.Lines.Add('A automatisch freigegeben');
  inherited;
end;
 
{ TB }
 
procedure TB.P1;
begin
   Form1.Memo1.Lines.Add('B');
end;
 
destructor TB.Destroy;
begin
  Form1.Memo1.Lines.Add('B automatisch freigegeben');
  inherited;
end;
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var  My: IMyInterface;  //Man beachte !
begin
  My := TA.Create;
  My.P1;            //egal ob TA oder TB
  My := TB.Create//TA wird automatisch freigegeben
  My.P1;
end;
 
initialization
  {$I unit1.lrs}
 
end.

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

Beitrag von theo »

Christian hat geschrieben:Du kannst es doch von einer vorhandenen klasse anleiten dann hast deren Eigenschaften und Funktionen ?


Und wie willst du das bei einem COM Objekt wie TWebBrowser machen?

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 »

hab ich unter lazarus noch nie gesehn
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 »

das löst leider mein problem noch nicht *schnif*
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 »

Ich weiß immer noch nicth konkret was dein Problem ist poste doch den Code ich bin eigentlich sicher das es eine einfache Lösung gibt.
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 »

ich glaube wenn ich code poste würde das nicht viel weiter helfen... also das problem ist folgendes:
ich habe eine klasse:TPaint2BaseOBJ geschrieben für eine aufgabe so.... und jetzt habe ich eine weitere klasse geschrieben: TmyImagelistB diese klasse soll eigenschaften der klasse TPaint2BaseOBJ neue eigenschaften bringen z.b. Imagelist:Tmyimagelistb imagename:String sobalt ich die klasse nicht mehr verwende sollen die eigenschaften verschwinden !

oder haben die das bei lazarus und delphi gleich in einer standart klasse geschrieben ohne es von" ausen" anzufügen !

gut ich werde mal eine beispiel klasse posten:

Code: Alles auswählen

tklasse1 = class(...vererbung)
published
  property test1:.....
  property test2:.....
  property test3:.....
  property test4:.....
end;
 
tklasse2 = class(...vererbung)
published
// diese zwei eigenschaften sollen klasse 1 hinzugefügt werden ohne
// klasse 1 ändern zu müssen... normalerweise würde ich so ein problem mit einer vererbung lösen nur das kann ich nicht weil schon gerbt wird !
property hallo1:.....
property hallo2:.....
end;


so ich hoffe das beispiel ist aussage kräftig genug !
MFG
Michael Springwald

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

Beitrag von theo »

Da würde ich der Klasse1 einfach ein Property der Klasse2 hinzufügen.
Wie TMemo.Lines

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 verstehe dich im moment leider nicht !

wie meinst du das ?
soll ich einfach:
klasse1:
klasse2:TKlasse2

machen ?
genau das möchte ich nicht !
MFG
Michael Springwald

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

Beitrag von theo »

TKlasseA

TKlasseB

TvonAabgleiteteKlasse
fKlasseB:TKlasseB;
property KlasseB read fKlasseB.....

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 »

du meinst also ich sollte eine varbaile in der klasse einfügen die ich erweitern wollte die dann mit der andren klasse zu tuen hat !

naja werde ich wohl so machen müssen *schnif* ich dachte halt das ist noch einen andren weg geben würde !
MFG
Michael Springwald

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

Beitrag von theo »

pluto hat geschrieben:du meinst also ich sollte eine varbaile in der klasse einfügen die ich erweitern wollte die dann mit der andren klasse zu tuen hat !

naja werde ich wohl so machen müssen *schnif* ich dachte halt das ist noch einen andren weg geben würde !


Ja fast, du kannst ein Klasse von deiner ersten Klasse ableiten, welche dann die zweite Klasse als property zur Verfügung stellt. So bleibt deine erste Klasse unberührt und du hast doch beide Funktionalitäten.

Ich weiss gar nicht, wieso du *schnifst*, das ist doch kein Problem.

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 »

ja doch ich habe mir das irngewie anders vorstellt und zwar so:
addProperty(klasse,klasse2)
und alle eigenscahften der klasse2 werden dann in die klasse hinzugefügt...
so änliche hätte ich es mir vorstellt ! ohne das ich die eigetnliche klasse im code ändern muss !
MFG
Michael Springwald

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

Beitrag von theo »

pluto hat geschrieben:ja doch ich habe mir das irngewie anders vorstellt und zwar so:
addProperty(klasse,klasse2)
und alle eigenscahften der klasse2 werden dann in die klasse hinzugefügt...
so änliche hätte ich es mir vorstellt ! ohne das ich die eigetnliche klasse im code ändern muss !


S' ist halt nicht jeden Tag Weihnachten! ;-)
Du meinst sowas wie multiple Vererbung. Das ist aber auch kein Wundermittel.

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 »

währe aber manchemal echt praktisch *G*
MFG
Michael Springwald

Antworten