我試圖將VCLStyle應用於TLinkLabel。我如何申請VCLStyle TLinkLabel
可悲的是,我不能顯示下劃線(A標籤的sentece)
TLinkLabel.Caption := 'Sma<a>pl</a>e';
如何解決呢?
爲了解決這個問題,但標籤也不太可能出現這個「樣本」
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;
使用默認文本字體是因爲您調用了'DrawControlText',它使用控件的默認字體進行渲染。這是覆蓋您的畫布字體設置。另一件事是,你不能改變鏈接顏色爲系統顏色(如COLOR_HIGHLIGHT)或標籤的默認字體顏色以外的東西,所以你的嘗試似乎是無用的,如果我得到正確的你想使用自定義鏈接顏色。請參閱['here'](http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/bd54bd30-e21f-4dc7-a77f-88de02c63f72/)。 – TLama
您可以調用'StyleServices.DrawText'而不是'DrawControlText',但是沒有任何更改的鏈接來自'TLinkLabel'(['SysLink'](http://msdn.microsoft.com/zh-cn/library/ windows/desktop/bb760706(v = vs.85).aspx)控制)由系統使用系統顏色渲染,如果您想自己渲染它們,則必須再次解析文本並渲染每個部分自己的,是什麼使'TLinkLabel'用法無用。 – TLama
@TLama,你說的對,爲什麼不發表你的評論作爲答案? – RRUZ