Zeigt die zusätzlichen Eigenschaften des TFrame-Nachkommens im Objektinspektor an

9

Im Delphi-Objekt-Inspektor werden die zusätzlichen Eigenschaften von TFrame-Nachkommen nicht nach Entwurf angezeigt. Menschen neigen dazu, einen bekannten Trick vorzuschlagen, der üblicherweise dazu verwendet wird, die Eigenschaften von TForm-Nachkommen im Objektinspektor anzuzeigen. Der Trick besteht darin, ein benutzerdefiniertes Modul für TForm-Nachkommen über ein Entwurfszeitpaket wie:

in Delphi IDE zu registrieren %Vor%

Der Objektinspektor kann auf diese Weise zusätzliche Eigenschaften der Instanz des TFrame-Descendants anzeigen, verliert jedoch sein Rahmenverhalten, während er in ein Formular eingebettet ist. Nicht redesignable, nicht möglich, Ereignisse für seine Unterkomponenten zu implementieren, und es akzeptiert untergeordnete Steuerelemente (was nicht möglich ist). Aber es verhält sich normalerweise in seinem eigenen Entwurfsbereich.

Sieht so aus, als würden diese Verhaltensweisen von Delphi IDE speziell für TFrame bereitgestellt. Sie sind wahrscheinlich keine generischen Einrichtungen.

Gibt es eine andere Möglichkeit, dies zu erreichen, ohne das Rahmenverhalten zu verlieren?

Ich benutze Delphi 2007

@Tondrej,

Lesen Sie Kommentare für das Problem, danke im Voraus.

frameunit.dfm:

%Vor% %Vor% %Vor%     
Serguzest 14.11.2008, 10:02
quelle

4 Antworten

4

Welche benutzerdefinierte Modulklasse registrieren Sie für Ihren Rahmen? Welche Version von Delphi verwenden Sie?

Aus meinen Experimenten mit Delphi 2007 ist die benutzerdefinierte Modulklasse, die zu funktionieren scheint, TFrameModule. Diese Klasse ist in delphivclide100.bpl enthalten. Da es kein entsprechendes delphivclide.dcp gibt, müssen Sie es manuell laden:

%Vor%

Meine FrameTest-Unit ist sehr einfach, es hat keine FrameTest.dfm, nur die Deklaration des neuen TFrame-Nachkommens:

%Vor%

Mit der TFrameModule-Klasse scheint bisher alles in Ordnung zu sein. Ich kann einen neuen Nachkomme von TTestFrame erstellen, um in das Projekt aufzunehmen und seine veröffentlichten Eigenschaften im Objektinspektor zu bearbeiten, Instanzen dieses neuen Nachfahrens auf ein Formular in der IDE zu setzen, ihre neuen veröffentlichten Eigenschaften im Objektinspektor zu bearbeiten, Ereignishandler dafür schreiben ihre untergeordneten Komponenten usw. In der .dfm-Ressource kann ich die erwartete Inline-Direktive für die Instanzen sehen. Ich habe bisher kein Problem damit gefunden, vielleicht ist dies die Lösung.

    
Ondrej Kelle 14.11.2008 12:32
quelle
0

Nein, ich denke nicht, dass dies möglich ist.

Was ich normalerweise mache, wenn ich ähnliche Bedürfnisse habe, ist einfach den Frame-Nachkommen als eigenständige Komponente zu installieren. Aber ja, auf diese Weise verlieren Sie eine Menge des typischen Rahmenverhaltens (insbesondere zur Designzeit), z. Sie können Subkomponenten nicht mehr direkt bearbeiten, und Änderungen am Frame werden nicht mehr automatisch an Formulare weitergegeben, die sie zur Entwurfszeit verwenden. Sie müssen das Laufzeitpaket, das den Frame enthält, zuerst neu kompilieren.

Andererseits ist dies aus einer OOP-Perspektive nicht so schlimm. Es erzwingt tatsächlich das Konzept des Implementierungsverbergens. Sie können einzelne Eigenschaften und Funktionen von Unterkomponenten weiterhin über neue Eigenschaften und Methoden für den Rahmen selbst verfügbar machen.

    
Oliver Giesen 14.11.2008 12:27
quelle
0
%Vor%

Ich denke, das liegt daran, dass es zur Entwurfszeit nicht funktionieren sollte. Sie haben TBaseFrame als ein benutzerdefiniertes Modul registriert, daher sind es die Eigenschaften des TBaseFrames (nicht deren Nachkommen !!!), die zur Entwurfszeit editierbar sein sollten. Delphi IDE kennt nur die veröffentlichten Eigenschaften der von Ihnen registrierten Klasse. Sie wissen nichts über Nachkommen und Außerkraftsetzungen, die Sie in Ihrem Projekt vorgenommen haben. Damit der Code zur Entwurfszeit funktioniert, sollten Sie ihn entweder in die TBaseFrame-Definition aufnehmen:

%Vor%

oder (zusätzlich zu TBaseFrame) registrieren Sie die TMyFrame-Definition als benutzerdefiniertes Modul.

Versuchen Sie zu verstehen: Delphi IDE zur Entwurfszeit weiß nur über Dinge, die darin registriert wurden. Es ist kein Handicap; Es ist ein logisches Verhalten.

    
boojum 11.03.2012 04:22
quelle
0

Es gibt keine Notwendigkeit, auf "Hack-Art" zu machen

%Vor%

Es gibt noch einen anderen Weg um Frames hinzuzufügen

%Vor%

+

%Vor%

Namen der Einheiten (getestet in XE7):

TCustomModule = & gt; DesignEditors

TDataModuleCustomModule = & gt; DMForm (designide.dcp)

TWinControlCustomModule = & gt; WCtlForm (designide.dcp)

TFrameModule = & gt; VCLFormContainer (vcldesigner.dcp)

Ich nehme an, dass es für FireMonkey ähnlich möglich sein sollte ( fmxdesigner.dcp & amp; zu finden, was in Notepad ++ drin ist)

PS. In älteren Delphi-Versionen gab es die Metaklasse TDataModuleDesignerCustomModule anstelle von TDataModuleCustomModule in der Einheit DMDesigner

PPS. Andere vorhandene Metaklassennamen:

TCustomFormCustomModule

TIDESourceModuleCustomModule

    
Mad Scientist 23.06.2016 10:28
quelle

Tags und Links