這個問題已經被問到了,但我仍然找不到一個好的方法來做到這一點。我剛剛制作了一個組件,它只是在 TForm 上繪制一些東西。基本上它是關于 FMX 或 VCL 的完全相同的代碼,但在 fmx 上它使用 FMX.form,在 vcl 上它使用 VCL.form。
- 如何使我的組件與這兩個框架兼容?理想情況下,我不想拆分單元(例如一個 FMX.myunit.pas 和一個 VCL.myUnit.pas)
- 如何使我的組件出現在工具面板僅適用于
VCL project或只為FMX project或為both projects? - 如何在我的 dpr/dproj 中說我的專案使用 VCL 或 FMX 框架?一個專案是否可以同時使用 Framework、VCL 和 FMX?
- 對于FMX成分,為什么我需要做的
RegisterComponents('myGroup', [TMyControl]);,然后RegisterFmxClasses([TMyControl]);(這是這個樣子的所有樣品,我看到)。
uj5u.com熱心網友回復:
我剛剛制作了一個組件,它只是在 TForm 上繪制一些東西。
UI 控制元件根本不應該在 Form 上繪制。它應該利用CanvasVCL/FMX 框架提供給它的方法,例如在重寫的Paint()方法中。
如何使我的組件與這兩個框架兼容?理想情況下,我不想拆分單元(例如一個 FMX.myunit.pas 和一個 VCL.myUnit.pas)
您不需要在自己的單元中使用單元范圍,除非您跨包共享單元并希望區分它們。
如果您沒有為每個框架制作單獨的單元,那么IFDEF在使用特定于框架的編碼時,您將需要根據需要使用單元。
如果您撰寫純粹與框架無關的代碼,那么單個包可用于兩個框架。但是如果您需要撰寫特定于框架的代碼(即因為 UI 代碼等),那么您將需要為每個框架制作單獨的包。
至于組件本身,如果您采用 IFDEF 路線,那么如果可能,請嘗試從兩個框架中都存在的基類派生您的組件。
對于非可視組件,派生自TComponent,它在兩個框架中的行為完全相同。
對于可視控制元件,TControl根據需要派生自或后代。請注意,每個框架實作可視化控制元件的方式存在差異,因此您可能需要相應地IFDEF撰寫實作代碼,或者為每個框架使用單獨的單元。
如何讓我的組件只出現在 VCL 專案或 FMX 專案或兩個專案的工具面板中?
包可以對特定框架具有親和力(請參見下文)。
如果它指定了一個特定的框架,那么這就是它出現的唯一框架。如果它沒有指定框架,那么它將可用于兩個框架。
當您注冊一個 UI 控制元件時,您應該呼叫GroupDescendentsWith()將您的控制元件分組到TControl的類組,例如:
RegisterComponents('My Control', [TMyControl]);
GroupDescendentsWith(TMyControl, TControl);
TControl無論是在此呼叫中還是在您的uses子句中,都不要完全限定 單元范圍。只使用Controls單元,讓編譯器根據你的包被編譯用于哪個框架來選擇FMX.Controls.TControl或Vcl.Controls.TControl取決于TControl可用的版本。
如何在我的 dpr/dproj 中說我的專案使用 VCL 或 FMX 框架?
在.dproj,在第一<PropertyGroup>,有一個<FrameworkType>可用的(添加它,如果它缺少)元件,其可以是設定為VCL,FMX,或None。
一個專案是否可以同時使用 Framework、VCL 和 FMX?
不是正式的,沒有。但是,有一些非官方的方法(即第 3 方解決方案)可以做到這一點。我不建議在包內這樣做,只在應用程式內這樣做。
For fmx components, why I need to do
RegisterComponents('myGroup', [TMyControl]);followed byRegisterFmxClasses([TMyControl]);(It's look like this in all sample I saw).
All that is really doing is grouping TMyControl to the TFmxObject class group, which is only available when the FMX framework is active. It is just another grup used for filtering the display of components within the IDE. Grouping a UI control to the TControl class group accomplishes the same thing.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315627.html
