Ich habe versucht, VCLStyle für TLinkLabel anzuwenden.Wie greife ich auf VCLStyle für TLinkLabel an?
Leider kann ich nicht anzeigen unterstreichen (sentece A Tag)
TLinkLabel.Caption := 'Sma<a>pl</a>e';
Wie kann ich dieses Problem lösen?
Um dieses Problem zu lösen, aber ein Tag erschienen ist nicht wahrscheinlich, um dieses "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;
Die Standardschriftart wird verwendet, weil Sie den 'DrawControlText' aufrufen, der die Standardschriftart des Steuerelements zum Rendern verwendet. Das überschreibt die Zeichensatzeinstellungen für die Zeichenfläche. Eine andere Sache ist, dass Sie die Link-Farben nicht auf etwas anderes als die Systemfarben (wie COLOR_HIGHLIGHT) oder die Standardschriftfarbe der Beschriftung ändern können, so dass Ihr Versuch nutzlos scheint, wenn ich richtig komme, wollen Sie benutzerdefinierte Verbindung verwenden Farben. Siehe zum Beispiel ['here'] (http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/bd54bd30-e21f-4dc7-a77f-88de02c63f72/). – TLama
Sie können 'StyleServices.DrawText' anstelle von' DrawControlText' aufrufen, aber nichts ändert sich an der Tatsache, dass die Links von 'TLinkLabel' ([' SysLink'] (http://msdn.microsoft.com/en-us/library/) windows/desktop/bb760706 (v = vs.85) .aspx) control) werden vom System mit Systemfarben gerendert, und wenn Sie sie selbst rendern möchten, müssten Sie den Text erneut parsen und jedes Teil von Ihrem Renderer darstellen lassen eigenen, was die Verwendung von 'TLinkLabel' unbrauchbar macht. – TLama
@TLama, du hast recht, warum postest du deinen Kommentar nicht als Antwort? – RRUZ