如何对tabcontrol的标签进行自行绘制

tianshanfe 2008-02-18 12:24:07
举例来说:假设tabcontrol的某个标签的capation属性是:A:\BBBBB\CCCCCCCCC\DDDD.TXT,那么这个时候这个标签的宽度就是正好容纳这段字的宽度。
tabcontrol设置了OwnerDraw为true
那么我对这个标签用TextOut画上了去掉路径的文件名DDDD.TXT
但是这个标签的宽度还是原来的宽度,这样就显的标签太宽了,我想问下,怎么才能让现在这个标签的宽度变成刚好容纳DDDD.TXT这段字的宽度呢
...全文
318 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lixinag 2008-02-22
  • 打赏
  • 举报
回复
楼上的能给个使用示例吗?另外就是我不太明白怎样让不同的标签有不同的HINT


是这样,每个标签都有HINT属性,你要区分,可以分别对他们进行赋值就可以了

PageControl1->HINT = ……
编译失败 2008-02-22
  • 打赏
  • 举报
回复
只有PageControl才可以让每页都有Hint,你可以用一个TStringList保存Tab名和文件全名,如下:

DDDD.TXT = A:\BBBBB\CCCCCCCCC\DDDD.TXT
AAAA.TXT = A:\BBBBB\XXXXXXXXX\AAAA.TXT


例:

TStringList *fNames = new TStringList;
fNames->Add("DDDD.TXT = A:\BBBBB\CCCCCCCCC\DDDD.TXT");
fNames->Add("AAAA.TXT = A:\BBBBB\XXXXXXXXX\AAAA.TXT");
AnsiString ACaption = TabControl1->Tabs->Strings[TabControl1->TabIndex];
ShowMessage(fNames->Values[ACaption]);
tianshanfe 2008-02-20
  • 打赏
  • 举报
回复
如何让每个标签都有各自的hint内容呢
tianshanfe 2008-02-19
  • 打赏
  • 举报
回复
楼上的能给个使用示例吗?另外就是我不太明白怎样让不同的标签有不同的HINT
myy 2008-02-18
  • 打赏
  • 举报
回复
可以显示成: A:\...\DDDD.TXT ,然后用Hint显示完整内容。

有现成的 API 可用:


#include <shlwapi.h>
#pragma link "shlwapi.lib"

AnsiString __fastcall EllipsesPath(const AnsiString sPath, const int Len)
{
int i = sPath.Length();
int j = Len;
char c[1024]={0};

if(j<=0 || j>i)
j = i;
if(j==i)
return sPath;
if(PathCompactPathEx(c, sPath.c_str(), j, 0))
return AnsiString(c);
return sPath;
}
cczlp 2008-02-18
  • 打赏
  • 举报
回复
那你为什么不直接把标签设成DDDD.TXT ?

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧