AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Methoden einer Kompo überschreiben ohne eigene abzuleiten
Thema durchsuchen
Ansicht
Themen-Optionen

Methoden einer Kompo überschreiben ohne eigene abzuleiten

Ein Thema von Delphi-Freak · begonnen am 28. Aug 2005 · letzter Beitrag vom 29. Aug 2005
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Delphi-Freak
Delphi-Freak

Registriert seit: 26. Sep 2004
Ort: Wien Nähe (Österreich)
321 Beiträge
 
Delphi 2006 Architect
 
#21

Re: Methoden einer Kompo überschreiben ohne eigene abzuleite

  Alt 28. Aug 2005, 20:58
Naja, das stimmt. Das mit dem Hergeben ist so eine Sache, deshalb habe ich mich mal fast entschlossen mein Proggy nicht herzugeben, zumindest einstweilen
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

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
Gerhard Pfister
*
»To him who loves us and has freed us from our sins by his blood [...] be glory and power for ever and ever! Amen.« (Revelation*1,*5?6)
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#22

Re: Methoden einer Kompo überschreiben ohne eigene abzuleite

  Alt 28. Aug 2005, 21:06
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.
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Freak
Delphi-Freak

Registriert seit: 26. Sep 2004
Ort: Wien Nähe (Österreich)
321 Beiträge
 
Delphi 2006 Architect
 
#23

Re: Methoden einer Kompo überschreiben ohne eigene abzuleite

  Alt 29. Aug 2005, 09:09
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

LG
Gerhard Pfister
*
»To him who loves us and has freed us from our sins by his blood [...] be glory and power for ever and ever! Amen.« (Revelation*1,*5?6)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz