delphi – 我如何申请VCLStyle for TLinkLabel
发布时间:2020-12-15 04:32:01 所属栏目:大数据 来源:网络整理
导读:我试图为TLinkLabel应用VCLStyle. 可悲的是,我无法显示下划线(标签的标签) TLinkLabel.Caption := 'Smaapl/ae'; 我该如何解决这个问题? 要解决这个问题,但是这个“Sample”可能没有出现标签 procedure TgLinkLabelHook.Paint(Canvas: TCanvas);var LDetails
|
我试图为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;
解决方法
如何根据您使用的画布字体设置呈现标签文本:
使用 StyleServices.DrawText(Canvas.Handle,DT_VCENTER or DT_CENTER,Canvas.Font.Color); 而不是 Canvas.Font := TWinControlClass(Control).Font; 关于你的意图: 请注意,标签链接不能使用自定义颜色,因为它们由系统呈现.只有两种解决方法可以改变它们,要么你可以设置用于链接字体渲染的系统颜色,要么解析并完全由你自己渲染标签标题,这使得TLinkLabel的使用无用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
