在Firemonkey中向TTabControl添加图标

时间:2014-01-23 19:43:14

标签: delphi firemonkey delphi-xe5

首先,我必须说我已经阅读了this SO的问题。但实际上它对我没有帮助。

我想向TTabControl添加图标,但这似乎并不像我在VCL(TPageControl)中那样容易。如您所知,Image Index中没有类似TTabControl的内容。

那么最简单的方法是什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

我建议沿着改变风格的路线,考虑到固有的“复制和粘贴”继承“这种练习的性质”,如果您的目标不止一个,这将成为一个问题操作系统(甚至只是Windows 7和Windows 8.x)。相反,试试这个:

1)对于您想要图标的每个项目,将其TextAlign属性更改为taTrailing,并使用四个前导空格字符填充其Text

2)在每个标签的表单中添加一个TImage,并根据需要将小位图加载到其中。

3)将每个标签项与其图像相关联(例如)将其TagObject属性分配给表单的OnCreate处理程序中的图像控件:

procedure TForm1.FormCreate(Sender: TObject);
begin
  TabItem1.TagObject := Image1;
  //...
end;

4)为每个标签项的OnPaint事件分配以下共享事件处理程序:

procedure TForm1.TabItemPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
var
  B: TBitmap;
  SrcR, DstR: TRectF;
  TabItem: TTabItem;
begin
  TabItem := (Sender as TTabItem);
  B := (TabItem.TagObject as TImage).Bitmap;
  SrcR := RectF(0, 0, B.Width, B.Height);
  DstR := SrcR;
  DstR.Fit(RectF(ARect.Left, ARect.Top, ARect.Left + ARect.Height, ARect.Bottom));
  if not TabItem.IsSelected then DstR.Offset(0, 1);
  Canvas.DrawBitmap(B, SrcR, DstR, 1);
end;