按照此前的VCL里使用TImageList非常簡單,在IDE中添加好圖片資源后,使用ImageList的GetBitmap或GetIcon即可獲取圖片,很好理解。
但是在FMX中,TImageList不是這樣使用了,需要多一些步驟,下面一步一步來演示。
1.添加圖片資源
首先添加一個TImageList控件,雙擊該控件來添加圖片資源。
如上圖,點擊新建來增加Item(如Item 0,Item 1,這些Item名稱是有作用的,在Item 0上選中后再單擊一下可以修改名稱),
雙擊Item 0,彈出新界面,選中一張本地圖片,關閉窗口時自動會添加,如下圖
回過頭看看,剛才添加Item 時,所在的區域是叫Sources Of Images,這里正是和VCL使用差別的地方,如果想和VCL的TImageList使用方法接近,則可以直接在下面的 List Of Images區域里添加,在過程中會自動添加到Sources Of Images區域。
而如果先在Sources Of Images區域添加,則必須在List Of Images區域里點擊新建按鈕進行添加(此時Sources Of Images里選擇哪個Item則自動添加對應的圖片)。
2. 圖片尺寸說明
在 Sources Of Images區域添加圖片時,可以看到一個圖片尺寸,而在List Of Images區域添加並選擇后,在Selected Image里又有圖片尺寸,這些有什么區別呢?
直接的講,首先,Sources Of Images對應的是TImageList的Source屬性,而List Of Images對應的是Destination屬性,在FMX的TImageList中,為了滿足各種分辨率的圖片資源管理(也導致被人詬病的文字資源問題,即占用內存高,如顯示TMemo大量文字時速度慢等),總之,先由一個Source做為圖片資源,再由Destination自動轉換為各種尺寸的圖片資源,其中Source並不是用來顯示的,而是做為轉換的圖片源頭,其尺寸大小為原始圖片的大小(即在Sources Of Images區域添加圖片時的尺寸),而要使用TImageList來顯示圖片,則必須先設置Destination屬性,這時候的尺寸才是最終顯示的圖片尺寸(即Selected Image里的圖片尺寸),當然實際使用圖片資源的控件又可以進一步設置圖片的顯示模式和大小。
3. 在開發中使用TImageList
對於TButton等自帶ImageList屬性的,可以直接設置關聯,並設置好ImageIndex序號即可正常顯示圖片,這些跟VCL一樣。
在VCL中,我們有時候會使用TImage和ImageList的GetBitmap或GetIcon方法獲取一張圖片並Assign來顯示,
而在FMX,則不推薦使用TImage了,更方便的做法是使用TImageList所在單元的另一個圖片控件TGlyph,
使用TGlyph控件在界面中和TImage效果一樣,但配合TImageList則是方便到令人發指,在IDE中設置其ImageList屬性再選擇ImageIndex即可,也可以在代碼如下操作:
GlyphImage.ImageIndex := 2;
4.更多備注
1)前面講到每個圖片Item 的名稱是有作用的,如使用BitmapItemByName方法獲取圖片,具體如何使用可以參考RAD的實例代碼(有個專門的ImageList實例)。
2)前面講到必須設置Destination屬性,其實通過ImageList源碼可以看到其中Draw,Bitmap和BitmapExists等方法里都會直接或間接判斷Destination.Count是否大於0才能正常返回。
3)前面也講到Source並不是用來顯示的,其實也可以通過BitmapItemByName方法來得到Source的圖片資源。