微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

delphi – 我如何申请VCLStyle for TLinkLabel

我试图为TLinkLabel应用VCLStyle.

可悲的是,我无法显示下划线(标签标签)

TLinkLabel.Caption := 'Sma<a>pl</a>e';

我该如何解决这个问题?

解决这个问题,但是这个“Sample”可能没有出现标签

procedure TgLinkLabelHook.Paint(Canvas: TCanvas);
var
  LDetails: TThemedElementDetails;
  ParseStr: String;
  DrawRect: TRect;
  DC: HDC;
  TextSize: TSize;
  SaveFont: HFont;
  ThemeTextColor: TColor;
begin
  ParseStr := ParseLinks;
  LDetails := StyleServices.GetElementDetails(tbPushButtonpressed);
  DC := GetDC(0);
  try
    SaveFont := SelectObject(DC,TLinkLabel(Control).Font.Handle);
    try
      GetTextExtentPoint32(DC,PWideChar(ParseStr),Length(ParseStr),TextSize);
    finally
      SelectObject(DC,SaveFont);
    end;
  finally
    ReleaseDC(0,DC);
  end;
  Canvas.Font := TLinkLabel(Control).Font;
  Canvas.Font.Style := Canvas.Font.Style + [fsUnderline];
  Canvas.Font.Size := TLinkLabel(Control).Font.Size;
  if StyleServices.GetElementColor(LDetails,ecBodyTextColor,ThemeTextColor) then
    Canvas.Font.Color := ThemeTextColor;
//  DrawRect := Rect(0,TextSize.cx,TextSize.cy);
  DrawRect := Control.ClientRect;
  DrawControlText(Canvas,LDetails,ParseStr,DrawRect,DT_VCENTER or DT_CENTER);
end;

procedure TForm8.FormCreate(Sender: TObject);
begin
  TStyleManager.Engine.RegisterStyleHook(TLinkLabel,TgLinkLabelHook);
end;

解决方法

如何根据您使用的画布字体设置呈现标签文本:

使用TCustomStyleServices.DrawText功能

StyleServices.DrawText(Canvas.Handle,DT_VCENTER or DT_CENTER,Canvas.Font.Color);

而不是TStyleManager.DrawControlText.此功能使用认的控制字体设置,因此它只是忽略您已完成的设置.在第一行,它从指定的控件获取字体,将画布字体设置为认控件的字体:

Canvas.Font := TWinControlClass(Control).Font;

关于你的意图:

请注意,标签链接不能使用自定义颜色,因为它们由系统呈现.只有两种解决方法可以改变它们,要么你可以设置用于链接字体渲染的系统颜色,要么解析并完全由你自己渲染标签标题,这使得TLinkLabel的使用无用.

原文地址:https://www.jb51.cc/delphi/101217.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐