AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Warum kann man Vererbung verhindern (csInheritable)?
Thema durchsuchen
Ansicht
Themen-Optionen

Warum kann man Vererbung verhindern (csInheritable)?

Offene Frage von "himitsu"
Ein Thema von MaBuSE · begonnen am 24. Aug 2006 · letzter Beitrag vom 18. Nov 2024
Antwort Antwort
sgbSoftwareEntwickler

Registriert seit: 2. Nov 2010
Ort: Bayern
14 Beiträge
 
Delphi XE Professional
 
#1

AW: Warum kann man Vererbung verhindern (csInheritable)?

  Alt 7. Jul 2011, 15:50
Aber ich sehe die Frage noch nicht als beantwortet
Sehe ich genau so ^^

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
Angehängte Dateien
Dateityp: 7z TEMP.7z (1,1 KB, 3x aufgerufen)
Thomas
Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Diesen nennen Sie dann Ihren Standpunkt.
- Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Warum kann man Vererbung verhindern (csInheritable)?

  Alt 7. Jul 2011, 16:32
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?
Du kannst den ActionManager auf ein TForm oder TDataModule legen und quasi einfach verwenden.
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
Angehängte Dateien
Dateityp: 7z ActionManagerTest.7z (84,0 KB, 3x aufgerufen)
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
sgbSoftwareEntwickler

Registriert seit: 2. Nov 2010
Ort: Bayern
14 Beiträge
 
Delphi XE Professional
 
#3

AW: Warum kann man Vererbung verhindern (csInheritable)?

  Alt 8. Jul 2011, 07:51
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
Jo, danke. Da hat man eine passable Idee und scheitert an seiner eigenen Blindheit. Das dass Fenster modal ist... darauf wäre ich gar nicht gekommen xD

Versucht mal einen TActionManager auf einen TFrame zu legen
Der war gut
Thomas
Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Diesen nennen Sie dann Ihren Standpunkt.
- Albert Einstein

Geändert von sgbSoftwareEntwickler ( 8. Jul 2011 um 09:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Warum kann man Vererbung verhindern (csInheritable)?

  Alt 3. Sep 2012, 13:59
Und wieder ist ein Jahr vergangen und immer noch keine Antwort in Sicht
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.588 Beiträge
 
Delphi 12 Athens
 
#5

AW: Warum kann man Vererbung verhindern (csInheritable)?

  Alt 3. Sep 2012, 14:46
Hab zwar keine Antwort auf die Frage, also nach dem Warum und so.

Was ich sagen kann, daß auch noch die Ribbons davon betroffen sind, aber die nutzt ja eh Keiner.

Und die Prüfung auf dieses Vererbungszeugs scheint direkt in der Delphi-IDE eingebaut zu sein, so daß man daran auch nicht so leicht was ändern kann.

Was aber eventuell ginge,
Delphi-Quellcode:
type
  TActionManager2 = class(TActionManager)
  public
    constructor Create(AOwner: TComponent); override;
  end;

constructor TActionManager2.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FComponentStyle := FComponentStyle + [csInheritable];
end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TActionManager2]);
end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Warum kann man Vererbung verhindern (csInheritable)?

  Alt 18. Nov 2024, 17:10
  FComponentStyle := FComponentStyle + [csInheritable];
Wäre so was nicht auch mit einem Class Helper zu lösen?
Dann müsste man "nur" eine weitere Unit einbinden

Wenig elegant, aber ...

Ich komme leider nicht dazu es zu Testen.
Für die, die nicht wissen was ein ClassHelper ist und was man damit machen kann:
hier ein kleines Tutorial von mir
https://www.delphipraxis.net/164041-...ntdataset.html
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.588 Beiträge
 
Delphi 12 Athens
 
#7

AW: Warum kann man Vererbung verhindern (csInheritable)?

  Alt 18. Nov 2024, 17:22
Nee, da es dort ja kein Override gibt.
und somit kennt der DFM-Reader das Create des Helpers nicht.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Warum kann man Vererbung verhindern (csInheritable)?

  Alt 15. Nov 2024, 15:03
Und wieder ist ein Jahr vergangen und immer noch keine Antwort in Sicht
inzwischen sind weitere 12 Jahre vergangen, und ich bin über das selbe Problem gestolpert. Ich benutze eine ComPort Library, die etwa ebenso alt ist.
http://comport.sf.net/

Da ist dieses Flag csInheritable ebenfalls ausgeblendet und ich suche den Sinn dahinter.

Die Komponente wurde irgendwann im Grundprojekt ausgetauscht, weil die noch ältere Comport-Komponente, die bis dahin im Einsatz war, nicht mehr wollte (an die Gründe kann ich mich nicht mehr entsinnen).

Vom Grundprojekt abgeleitet gibt es aber ebenfalls noch Projekte, die ähnlich sind und Grundformulare erben und ggf. modifizieren.

An eines dieser abgeleiteten Projekte muss ich jetzt drangehen und habe das selbe Problem.

Ich tendiere dazu, die entsprechende Programmzeile der ComPort-Komponente einfach flach zu legen, wollte aber vorher noch dazu recherchieren, ob das Vererbungsverbot einen tieferen Sinn hat.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.588 Beiträge
 
Delphi 12 Athens
 
#9

AW: Warum kann man Vererbung verhindern (csInheritable)?

  Alt 15. Nov 2024, 15:25
Die Komponente nicht auf der Form, sondern erst im OnCreate erstellen, wäre auch noch eine Lösung.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Warum kann man Vererbung verhindern (csInheritable)?

  Alt 15. Nov 2024, 16:43
Die Komponente nicht auf der Form, sondern erst im OnCreate erstellen, wäre auch noch eine Lösung.
oder man verwendet nicht die IDE,sondern Notepad

...
Man beachte: Nur die IDE verweigert das mit der Fehlermeldung:
Zitat:
Fehler beim Erzeugen von Formular: Vererbung von 'Form2' nicht möglich. Es enthält eine Komponente 'AchtionManager1' ohne Vererbungsmöglichkeit.
Wenn man das *.pas und *.dfm von Hand erstellt (z.B. mit Notepad), geht es durchaus zur Laufzeit.
...




Erstaunlich: Ich habe den Thread 2006 erzeugt. Aber es scheint immer noch ab und zu jemanden zu interessieren.

(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:40 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-2025 by Thomas Breitkreuz