JH *_*ang 6 delphi delphi-xe2 vcl-styles
我试图为TLinkLabel应用VCLStyle.
可悲的是,我无法显示下划线(标签的标签)
TLinkLabel.Caption := 'Sma<a>pl</a>e';
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
要解决这个问题,但是这个"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, 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;
Run Code Online (Sandbox Code Playgroud)
TLa*_*ama 10
如何根据您使用的画布字体设置呈现标签文本:
使用TCustomStyleServices.DrawText功能:
StyleServices.DrawText(Canvas.Handle, LDetails, ParseStr, DrawRect, DT_VCENTER or DT_CENTER, Canvas.Font.Color);
Run Code Online (Sandbox Code Playgroud)
而不是TStyleManager.DrawControlText.此功能使用默认控制字体设置,因此它会忽略您已完成的设置.在第一行,它从指定的控件获取字体,将画布字体设置为默认控件的字体:
Canvas.Font := TWinControlClass(Control).Font;
Run Code Online (Sandbox Code Playgroud)
关于你的意图:
请注意,标签链接不能使用自定义颜色,因为它们由系统呈现.只有两种解决方法可以更改它们,要么您可以设置用于链接字体渲染的系统颜色,要么解析并完全由您自己渲染标签标题,这使得TLinkLabel使用无用.