![]() |
AW: Warum kann man Vererbung verhindern (csInheritable)?
Zitat:
Es wird nicht das Ableiten (Vererben) der Komponenten verhindert. Das ist weiterhin möglich. Es wird verhindert, das das TForm, auf dem die Komponente liegt vererbt werden kann. Im 1. Beitrag es es genau erklärt. |
AW: Warum kann man Vererbung verhindern (csInheritable)?
Zitat:
Es gibt in Delphi XE 4 Komponenten bei denen das der Fall ist.
TRibon wurde ja schon von sgbSoftwareEntwickler entdeckt ;-) Ich wollte nur sichergehen, dass nicht noch mehr Komponenten davon infiziert wurden. |
AW: Warum kann man Vererbung verhindern (csInheritable)?
Das Problem besteht nach wie vor. Ich will die Ribbonbar (mit Actionmanager) in einem bestehenden Grundformular einführen. Ich bin nach wie vor für Ideen offen :)
|
AW: Warum kann man Vererbung verhindern (csInheritable)?
zu TNotebook und Vererbung:
wir nutzen TNotebook intensive! und vermeiden rein aus praktischen Gründen eine Vererbung eines solchen Fensters. Mann stelle sich vor es gibt ein Fenster mit einem TNotebook auf dem sind 10 Pages. Insgesamt sind dort Hunderte von Controls drauf. Wenn ich jetzt im Basis Fenster ein paar Veränderungen mache, hab ich in den abgeleiteten Fenster meine mühe alles wieder glatt zu ziehen damit alles wieder gut funktioniert... Schon besser sind Frames die ich dann auf die Seiten des TNotebook plaziere. --- Und, wenn ich in großen Teams arbeite will ich verhindern das nicht jede Nase ungefragt wichtige, komplizierte Klasse vererbt... |
AW: Warum kann man Vererbung verhindern (csInheritable)?
Aus der Delphi Hilfe:
Zitat:
Zitat:
Zitat:
Und gerade wenn du in großen Teams arbeitest, ist doch ein Grundformular hilfreich, da jeder mit der selben Basis arbeitet / arbeiten muss und somit CorpIdent Geschichten und wichtige (geänderte, neue und/oder entfernte) Funktionalitäten sofort in allen vom Grundformular vererbten Projekten nach der nächsten Kompilierung greifen. |
AW: Warum kann man Vererbung verhindern (csInheritable)?
Das hat eigentlich nix mit Vererbung zu tun. Denn dafür wäre die Sprache zuständig (Delphi hat IMO mitttlerweile abstrakte Klassen?).
Das Problem ist diese grauenvolle Art, in der IDE und Designer einem globale Variablen und unflexibel geteilte Referenzen aufzwingen. Wenn du ein Form mit einem ActionManager 2-mal instanzierst, bekommst du auch die Actions 2-mal. Innerhalb des Forms wird er das wohl noch richtig hinkriegen, nutzt du Actions außerhalb dieser Form fangen die Probleme natürlich an. Ein anderer Grund kann sein, dass sie wohl Probleme haben, so komplexe Strukturen auch in Ableitungen noch reproduzierbar richtig aufzubauen. Wenn du vom Form ableitest und Action entfernst, hinzufügst, bestehende mit andere Handlern versiehst etc. Vllt kommt dann ein Frankenstein-ActionManager raus, der nix Halbes und nix Ganzes ist. Man kann halt nur soviel mit einem so einfach gestrickten RAD-Designer von 1995 anstellen, bevor man für 1m Weg 10m Umweg gehen muss. |
AW: Warum kann man Vererbung verhindern (csInheritable)?
Zitat:
Es ist ja durchaus möglich mehrere Instanzen zu verwenden.
Delphi-Quellcode:
Die IDE versagt nur die Vererbung:
...
var a, b, c: TMyActionForm; begin a := TMyActionForm.Create(Self); b := TMyActionForm.Create(Self); c := TMyActionForm.Create(Self); a.Show; b.Show; c.Show; ...
Delphi-Quellcode:
Man beachte: Nur die IDE verweigert das mit der Fehlermeldung:
...
type TMyForm = class(TMyActionForm) ... Zitat:
Zitat:
Ein TNotebook ist nun mal nicht sooo komplex. Und viel interesannter ist die Frage, warum eine TActionList, die auch Actions beinhaltet, erlaubt ist. Zitat:
Aber ich sehe die Frage noch nicht als beantwortet :) |
AW: Warum kann man Vererbung verhindern (csInheritable)?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Hab gerade folgendes probiert: Ich habe eine Form erstellt, und einen Actionmanager darauf Platziert. Diesen ActionManager habe ich dann als Property dieser Form zur Verfügung gestellt. Danach habe ich auf meinem Hauptformular eine Komponente (TActionMainMenuBar) gesetzt und diese dann mit dem Actionmanager vom anderen Formular verknüpft. Die Idee dahinter: Ich muss die form, die den Actionmanager enthält nicht vererben, kann aber das Formular wo es verknüpft ist vererben. Leider bin ich an dem Versuch gescheitert, Actions von diesem Actionmanager in mein TActionMainMenuBar einzufügen. Hat jemand ne Idee ob und wie das geht? Den Code findet Ihr im Anhang |
AW: Warum kann man Vererbung verhindern (csInheritable)?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Interesanterweise muß noch nicht mal die uses-Anweisung angepasst werden (kein uses Unit2 in der Unit1). (Beispiel im Anhang) Um die Menüs zu verknüpfen muß nur der ActionManager auf dem DataModule doppeltgeklickt werden. Das Fenster ist nicht modal (also Show statt ShowModal) damit kannst Du dann auf das Formular wechseln, in dem Deine Action Toolbars sind und loslegen. Anmerkung: TActionToolbars müssen von Hand auf das Form gelegt werden, da beim Anlegen aus dem TActionManager versucht würde, die Toolbar in das DataModul zu erzeugen. Wenn das Dein Problem lösen sollte ;-) |
AW: Warum kann man Vererbung verhindern (csInheritable)?
Versucht mal einen TActionManager auf einen TFrame zu legen :twisted:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:00 Uhr. |
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 by Thomas Breitkreuz