Delphi 页面控制垂直标题

Delphi 页面控制垂直标题,delphi,tpagecontrol,Delphi,Tpagecontrol,我有一个PageControl,TabPosition设置为“tpLeft”。 您注意到,当您设置该属性时,选项卡的标题也变得垂直, 但我希望这些标题以正常的水平方式显示, 尝试更改选项卡高度,但它只会变宽,测试仍然显示为垂直 我怎样才能解决这个问题 使用delphixe5 更新: 此代码有效(感谢“Ken White”): 但这是“正确的方法”吗?还有其他更好的方法吗?所有者绘制选项卡(自己绘制),并旋转字体。您是否尝试根据我的评论搜索任何内容?努力寻找解决方案,而不是在这里问。我给了你一个开

我有一个PageControl,TabPosition设置为“tpLeft”。 您注意到,当您设置该属性时,选项卡的标题也变得垂直, 但我希望这些标题以正常的水平方式显示, 尝试更改选项卡高度,但它只会变宽,测试仍然显示为垂直

我怎样才能解决这个问题

使用delphixe5

更新: 此代码有效(感谢“Ken White”):


但这是“正确的方法”吗?还有其他更好的方法吗?

所有者绘制选项卡(自己绘制),并旋转字体。您是否尝试根据我的评论搜索任何内容?努力寻找解决方案,而不是在这里问。我给了你一个开始研究的主题。@TLama:做得很好(链接中的代码),但我不喜欢硬编码的位置。不过,关于旋转,你是对的;从您的示例中可以看出,它是不需要的。:-)如果您事先知道需要哪些选项卡,那么您发布的代码可能会起作用。您可以将它们保存在列表/数组中,在表单的构造函数中迭代,并根据字体计算字符串的TextWidth和TextHeight,并在运行时使用这些值来设置选项卡宽度和高度值,而不是硬编码的值。您可能想发布一个答案。@TLama谢谢,我做了更改:
Rect.Left+TPageControl(Control)。TabHeight div 2
for循环的
无效。循环完成后的最终
文本
与循环开始前的原始
文本
相同。这样就可以完全摆脱循环。
procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
  I: Integer;
  PageControl: TPageControl;
  TextFormat: TTextFormat;
  Text: string;
  TextRect: TRect;
begin
  PageControl := Control as TPageControl;

  Text := PageControl.Pages[TabIndex].Caption;

  for I := Length(Text) - 1 downto 1 do
  begin
    Text := Copy(Text, 1, I) + Copy(Text, I+1, MaxInt);
  end;

  TextRect := Rect;
  TextRect.Left := TextRect.Left + 5;
  TextRect.Top := TextRect.Top + 3;

  TextFormat := [tfCenter];

  PageControl.Canvas.TextRect(
    TextRect,
    Text,
    TextFormat
    );
end;