1. 程式人生 > 其它 >Delphi D10.X VCL和FireMonkey之間的常見差異介紹

Delphi D10.X VCL和FireMonkey之間的常見差異介紹

VCL與FireMonkey不相容

這裡介紹他們的差異主要是幫助已熟悉VCL的朋友可以快速的瞭解控制元件使用上的不同,快速的轉變到FireMonkey的開發思路上來。

  • 警告:

FireMonkey與VCL本質上是完全不同的,FireMonkey(FMX)和可視元件庫(VCL)不相容,因此不應在同一模組中一起使用。

也就是說,一個模組應該是FireMonkey或VCL之一。不相容是由FireMonkey(FMX)和VCL之間的框架差異引起的。

您可以:

  • 如適用於macOS的共享庫中所述,將FireMonkey庫與VCL應用程式一起使用,或將VCL庫與FireMonkey應用程式一起使用。
  • 瞭解將VCL應用程式轉換為FireMonkey的一般準則,然後做遷移。
  • 瞭解一般操作,再遷移VCL應用到FireMonkey。
  • 在http://www.midaconverter.com/上獲取VCL-to-FireMonkey轉換器程式。可以自動遷移VCL應用FireMonkey的某些方面。

RAD Studio提供了三個主要的庫:

FireMonkey(FMX)是一個視覺元件庫,具有複雜的圖形,動畫和樣式功能。您可以為任何受支援的目標平臺建立FireMonkey應用程式。

視覺元件庫(VCL) 是僅在Windows(在Win32和Win64應用程式中)支援的視覺元件的物件層次結構。

執行時庫(RTL) 是Delphi和C ++為任何受支援的目標平臺共享的過程庫。RTL由 System, System.SysUtils, System.IOUtils和 System.Classes單元的成員組成。

您可以在FireMonkey應用程式中自由使用RTL,但不能在FireMonkey應用程式模組中直接使用VCL。

FireMonkey與VCL的差異


Actions
與VCL操作不同,FireMonkey操作不支援操作管理器。因此,您不能使用VCL Action Manager編輯器來管理FireMonkey操作。

複選框
在FireMonkey中,複選框應使用OnChange事件而不是OnClick對已選中狀態的更改做出反應。是否選中的狀態屬性是 IsChecked,VCL中使用的是Checked。

控制元件的父子關係
在VCL中,只能通過TForms,TFrames,TPanels和Data Modules作為其他元件的父物件。在FireMonkey中,您可以將任何物件作為其他物件的父物件,並且可以在“ 結構檢視”中輕鬆建立此關係。

控制元件間的關係顯得更多樣,從而可以完成多樣化組合使用,這是非常大的進步。
(可參閱我另一篇部落格介紹:Delphi D10.X 移動開發中APP介面基本佈局(二))

顏色

  除RGB外,FireMonkey顏色還具有alpha(不透明度)成分。顏色由系統型別TAlphaColor和TAlphaColorRec表示。FireMonkey使用System.UIConsts單元中的顏色常量。這些顏色常量的字首為“ cla”而不是“ cl”。

控制定位
  在VCL中,控制元件的位置由其頂部和左側屬性表示。
  在FireMonkey中,控制元件使用具有巢狀X和Y屬性的TPosition型別的Position。3D控制元件的Position屬性是TPosition3D的一個例項,帶有一個附加的Z座標。對於大小,FireMonkey使用寬度和高度(對於3D控制元件使用深度)。
  (可參閱我另一篇部落格介紹:Delphi D10.X 移動開發中APP介面基本佈局(二))

資料庫表格事件

  VCL的事件OnDrawDataCell或OnDrawColumnCell可以使用FireMonkey中的TStringGrid與LiveBindings替換。
在FireMonkey不使用VCL那樣的DB顯示控制元件,而FireMonkey中幾乎所有的控制元件都可以使用LiveBindings來繫結資料,包括是否顯示、禁用某控制元件都可以直接繫結,並由資料內容直接控制,從而完全不需要編寫程式碼處理。

顯示文字
  FireMonkey標籤中顯示的文字的屬性是Text,不是Caption。

字型大小
  在VCL中,字型大小以點表示,每英寸72個點。
  在FireMonkey中,字型大小以與裝置無關的畫素(DIP)表示,每英寸96畫素。
  因此,在FireMonkey中使用相同Font.Size的設定,顯示出來的文字會感覺較小。

Masked編輯
VCL中的TMaskEdit或TEDIT在FireMonkey中使用來TEDIT和Password 屬性來處理。將TEDIT中Password 屬性設定為True,使此編輯控制元件隱藏其字元,以進行類似密碼的輸入。將Password 設定為False可使此編輯控制元件顯示其所有字元。

單選按鈕和組
要將VCL TRadioGroup轉換為FireMonkey,可以使用TPanel或TGroupBox。
注:在FireMonkey,TPanel不支援專案單選按鈕。
每個VCL TGroupBox中的單選按鈕都是獨立的。如果將多個VCL TGroupBox轉換為FireMonkey TGroupBox,則包含的單選按鈕將相互關聯(一個組中的選擇將清除其他組中的選擇)。要在FireMonkey中恢復獨立性,需要為每個轉換的TRadioButton手動指定GroupName屬性。

相關或類似文章
1、Delphi D10.3 LayoutsPro 控制元件簡介 -避免輸入焦點被虛擬鍵盤遮擋
推薦到這裡,不是因為控制元件,是因為這個DEMO裡有較多的可用於介面佈局學習的內容,可直觀的瞭解VCL與FireMonkey的差異;

2、Delphi D10.1 移動開發中APP介面基本佈局(一)

3、Delphi D10.X 移動開發中APP介面基本佈局(二)
與本部落格內容有相關更詳細描述。