Delphi-PRAXiS
Seite 2 von 3     12 3      

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 15:52

Re: Methoden einer Kompo überschreiben ohne eigene abzuleite
 
Das ist aber schade... :cry:
Trotzdem danke, sonst hätte ich gesucht und gesucht und wäre nicht draufgekommen :(

Edit: Oja, noch eine Frage:
Zitat:

Zitat von Flocke
Wenn eine andere Unit dieses "TButton" benutzt, dann hängt von der Reihenfolge in der uses-Klausel ab, welcher TButton erzeugt wird.

Welche Unit ist dann höherrangig bzw. wird benutzt. Die früher oder die später definierte?

SirThornberry 28. Aug 2005 16:18

Re: Methoden einer Kompo überschreiben ohne eigene abzuleite
 
die später definierte (probieren hilf). Das sieht man unter anderem wenn man mit TBitmap arbeitet. TBitmap ist in der unit Windows und in der Unit Graphics definiert. Wenn du mal die unit Windows in den Uses nach der Unit Graphics aufführst wirst du sehen das rumgemeckert wird das es kein Object ist oder so weil die TBitmap-Definition in der Windows-Unit keine Klasse ist.

Hansa 28. Aug 2005 16:19

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

Zitat von Delphi-Freak
Wie habe ich die Basisklasse umbenannt, eigentlich habe ich sie ja nur durch Neudefinition überschrieben, oder :gruebel:

Was Du gemacht hast ? Ungefähr das, was Robert_G vorgeschlagen hat. :mrgreen: Von einer vorhandenen Basisklasse abgeleitet.

Edit : Ahhhh, noch was übersehen. Was ist denn das ? :shock:
Zitat:

Zitat von Flocke
Delphi-Quellcode:
TButton = class(StdCtrls.TButton)
published
   procedure alert;
end;

Geht das so überhaupt ? Hier sieht man manchmal wirklich unglaubliche Codefetzen. :lol: Wenn schon dann aber so:

Delphi-Quellcode:
TMeinButton = class(TButton)
published
   procedure alert;
end;
Edit2 :

Zitat:

Welche Unit ist dann höherrangig bzw. wird benutzt. Die früher oder die später definierte?
Da fängts schon an. In einem Programm 2 unterschiedliche TButton. Geht irgendwann mit Sicherheit schief.

tommie-lie 28. Aug 2005 16:37

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

Zitat von Hansa
Edit : Ahhhh, noch was übersehen. Was ist denn das ? :shock:
Zitat:

Zitat von Flocke
Delphi-Quellcode:
TButton = class(StdCtrls.TButton)
// ...

Geht das so überhaupt ?

Sowas nennt sich Fully Qualified Name und ist durchaus legitim, soland eine solche Definition nicht unten an den Interface-Abschnitt der Unit StdCtrls angehangen wird. Mach dich nicht über Dinge lustig, die du nicht begreifst.

Edit: Wenn ich einen schließenden bbCode entferne kann das ja nicht gut aussehen...

Delphi-Freak 28. Aug 2005 16:57

Re: Methoden einer Kompo überschreiben ohne eigene abzuleite
 
Wie ist das also nochmal. Wenn ich TButton als Klasse von StdCtrls.TButton ableite, dann ist das nur in der aktuellen Unit gültig (bzw. in Units die diese Unit einbinden und TButton nicht überschreiben), oder? :gruebel:

Khabarakh 28. Aug 2005 17:05

Re: Methoden einer Kompo überschreiben ohne eigene abzuleite
 
Wenn du nur Methoden hinzufügen willst, könntest du doch (dank D2005) Delphi-Referenz durchsuchenclass helpers benutzen. Du kannst auch Methoden der Klasse verdecken, wie du diese dann aber im Helper wieder aufrufen kannst, kann ich dir nicht sagen (mit inherited hat sich Delphi aufgehängt :stupid: ).

tommie-lie 28. Aug 2005 17:06

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

Zitat von Delphi-Freak
Wenn ich TButton als Klasse von StdCtrls.TButton ableite, dann ist das nur in der aktuellen Unit gültig (bzw. in Units die diese Unit einbinden und TButton nicht überschreiben), oder? :gruebel:

Jupp, so isset.
Wenn dann eine Unit sowohl ExtCtrls, als auch deine Unit einbindet, gibt es einen Namenskonflikt, da ja TButton einmal in ExtCtrls und einmal in deiner Unit. Welche dann bevorzugt wird, kann ich nicht sagen, in so eine unangenehme Situation bin ich noch nicht gekommen, deswegen ist es dann auch besser, den Fully Qualified Name der Klasse zu benutzen, also entweder ExtCtrls.TButton, wenn ich einen Normalo-Button haben will, oder MeineUnit.TButton, wenn ich meinen Enhanced-Button haben will.

Delphi-Freak 28. Aug 2005 17:59

Re: Methoden einer Kompo überschreiben ohne eigene abzuleite
 
Vielen, vielen Dank einmal!
Ihr seid eine große Hilfe! :thumb:
Das mit class helpers muss ich mir noch anschauen, klingt aber viel versprechend.

LG, Gerhard

Edit:ad »class helpers«: irgendwie werde ich da aus der Hilfe nicht gescheit. Hat das irgendwas mit »IClassFactory« zu tun, bzw. wie kann ich das implementieren? :roll:

tommie-lie 28. Aug 2005 18:25

Re: Methoden einer Kompo überschreiben ohne eigene abzuleite
 
Ich habe keine Delphi2005-Hilfe, aber nach dem, was hier geschrieben steht, sieht das alles ziemlich straightforward aus, ohne Interfaces.

Robert_G 28. Aug 2005 19:02

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

Zitat von tommie-lie
Ich habe keine Delphi2005-Hilfe, aber nach dem, was hier geschrieben steht, sieht das alles ziemlich straightforward aus, ohne Interfaces.

Ich weiß nicht wie es in Win32 gelöst wird. Die .Net Variante ist eher als krank zu bezeichnen. Zumindest wenn man seine "Vorteile" zu Herzen nehmen würde. :wall: Dann könnte jeder mit einem "sauberen" .Net compiler einpacken... :shock:

@delphiFreak
Ich verstehe immer noch nicht wo das Problem liegt...
Warum musst du für all die anderen Klassen auch Ableitungen erstellen?
Ich sehe in deinem Bleistift nur die eigentliche neue Klasse und das SynEdit, dass sie verwenden würde.
Dein SynEdit ist wäre aber weiter voll kompatibel zum Rest.
Wo ist das Problem dabei? Du machst dich doch total inkompatibel zu allem anderen wenn du in den Sourcen rumwurschtelst.
Ist das überhaupt erlaubt, ohne die Änderungen wieder als OSS zu veröffentlichen?
Und was hält man dann wohl von deinem Programm, wenn man dann sieht, dass du nicht die Lust hattest, es sauber zu lösen? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 Uhr.
Seite 2 von 3     12 3      

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