TStrings 除 Strings 存放文字外,Objects 陣列可攜帶任意物件(索引對應)。大多數操作(AddObject、InsertObject、IndexOfObject)與字串對應。Delete/Clear 會同步移除物件,但 LoadFromFile/SaveToFile 僅處理字串。
// 方式一:對現有字串指派物件
with Fruits do Objects[IndexOf('apple')] := AppleBitmap;
// 方式二:同步加入字串與物件
Fruits.AddObject('Apple', AppleBitmap);
常見用途:自繪控制項綁定位圖,實現圖文並茂列表。
lbOwnerDrawFixed/Variable、csOwnerDrawFixed/Variable;TabSet 使用 tsOwnerDrawVariable。FormCreate 動態建立 TBitmap、載入檔案、呼叫 AddObject。OnMeasureItem/OnDrawItem(或 Tab 對應事件)。procedure TForm1.FormCreate(Sender: TObject);
var Bitmap: TBitmap;
begin
ListBox1.Items := Screen.Fonts; // 取得系統字體列表
ListBox1.Style := lbOwnerDrawVariable;
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile('PHONE.BMP');
TabSet1.Tabs.AddObject('phone', Bitmap);
// ... 更多圖示 ...
end;
ListBox 顯示字體名稱並以該字體渲染;TabSet 標籤顯示圖示+文字。詳見下一節事件實作細節。