Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Methoden einer Kompo überschreiben ohne eigene abzuleiten (https://www.delphipraxis.net/52338-methoden-einer-kompo-ueberschreiben-ohne-eigene-abzuleiten.html)

Delphi-Freak 28. Aug 2005 20:58

Re: Methoden einer Kompo überschreiben ohne eigene abzuleite
 
Naja, das stimmt. Das mit dem Hergeben ist so eine Sache, deshalb habe ich mich mal fast entschlossen mein Proggy nicht herzugeben, zumindest einstweilen :mrgreen:
Ich habe zwar in den Sourcen rumgewurschtelt, jetzt aber erkannt, dass das nicht die saubere Lösung ist und deshalb möchte ich die Änderungen in mein eigenes Projekt einbauen.
Nun nochmal zur Erklärung des "Problems", am Beispiel irgend eines anderen Objekts, z.B. TMainKompo. Die ganzen Units usw. von TMainKompo haben noch andere Komponenten dabei, z.B. TSubKompo1 und TSubKompo2.
TMainKompo.Prop1 ist vom Typ TSubKompo1, TMainKompo.Prop2 vom Typ TSubKompo2. Ich lade also diesen ganzen Source irgendwo runter und möchte jetzt zu TMainKompo noch eine Eigenschaft Prop3 hinzufügen, zu TSubKompo1 noch Prop11 und zu TSubKompo2 noch Prop21.
Jetzt würde ich gerne kurz schreiben, z.B.:
Delphi-Quellcode:
type
   TKompo = class(TKompo)
      property Prop3: Integer;
   end;

   TSubKompo1 = class(TSubKompo1)
      property Prop11: Integer;
   end;

   TSubKompo2 = class(TSubKompo2)
      property Prop21: Integer;
   end;
Nur geht es eben nicht ganz so. Wenn ich meine eigenen Kompos ableite müsste ich nun noch etwas hinzufügen:
Code:
type
   TMyKompo = class(TKompo)
[color=#ff0000]     property Prop1: TMySubKompo1;
      property Prop2: TMySubKompo2;[/color]
      property Prop3: Integer;
   end;

   TMySubKompo1 = class(TSubKompo1)
      property Prop11: Integer;
   end;

   TMySubKompo2 = class(TSubKompo2)
      property Prop21: Integer;
   end;
In diesem Fall wären es nur 2 Zeilen, in anderen Fällen könnten es aber auch mehr sein...
Zum Schluss noch zur Verdeutlichung, den Code den ich mir irgenwo runtergeladen habe:
Delphi-Quellcode:
type
   TKompo = class(TObject)
      property Prop1: TMySubKompo1;
      property Prop2: TMySubKompo2;
      property Haha1: String;
   end;

   TSubKompo1 = class(TObject)
      property Haha11: String;
   end;

   TSubKompo2 = class(TObject)
      property Haha21: String;
   end;
Klarer Weise sind das alles nur Beispiele, die Sinnhaftigkeit der Kompos ist also anzuzweifeln :mrgreen:

Ich hoffe, jetzt habe ich mich verständlich ausgedrückt, sonst bitte nochmal rückfragen!!

LG & gute Nacht dann... , ich


Edit: Achja, @tommie-lie: deinen Beitrag habe ich nicht übersehen, ich schau mir dann den Link morgen oder so an!


Edit2: Tippfehler ausgebessert

tommie-lie 28. Aug 2005 21:06

Re: Methoden einer Kompo überschreiben ohne eigene abzuleite
 
Zitat:

Zitat von Robert_G
Ist das überhaupt erlaubt, ohne die Änderungen wieder als OSS zu veröffentlichen?

Mit den Class Helpers wäre es auf jeden Fall erlaubt, denn man hat keine Modifikationen am Code vorgenommen.
Allerdings ist jede Anwendung ein von SynEdit abgeleitetes Werk. Meine Spezialität ist die GPL, für die LGPL und die MPL, die von SynEdit laut Projektseite verwendet werden, müsste ich nachschauen, und dafür bin ich jetzt zu faul ;-) Wäre es GPL, müsste jede Anwendung, die SynEdit benutzt, ebenfalls unter GPL sein.

Delphi-Freak 29. Aug 2005 09:09

Re: Methoden einer Kompo überschreiben ohne eigene abzuleite
 
So, das mit den Class Helpers: Sagen wir so, es funktoiniert halb.
Delphi-Quellcode:
   TTest = class
      public
         SomeStr: String;
   end;

   TTestHelper = class helper for TTest
      public
         procedure SomeInt;
   end;
Das funktioniert ohne Probleme und ich kann auch in TTest auf SomeInt zugreifen (und in SomeInt auf SomeStr).

Was aber nicht funktioniert, ist eine Variable zu definieren:
Delphi-Quellcode:
   TTest = class
      public
         SomeStr: String;
   end;

   TTestHelper = class helper for TTest
      public
         test: String;
         procedure SomeInt;
   end;
Da sagt das Delphi dann »Felddefinition nicht erlaubt nach Methoden oder Eigenschaften«

Wenn ich Properties definieren will, dann kommen auch Probleme:
  • Beim Zugriff auf SomeStr: »Feld- oder Methodenbezeichner erwartet«
  • Zugriff auf eine in TTestHelper definierte Variable ist aus dem Grund schon nicht möglich, weil ich ja gar keine Variablen definieren kann...
Zusätzlich beschwert sich das Delphi beim Zugriff auf diese Property mit »Einer Nur-Lesen Eigenschaft kann kein Wert zugewiesen werden«.

Also irgendwie funktionierts eben nicht ganz :gruebel:

LG


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 Uhr.
Seite 3 von 3     123   

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