Intenté aplicar VCLStyle para TLinkLabel.Cómo aplico VCLStyle para TLinkLabel
Lamentablemente, no puedo mostrar subrayado (sentece de una etiqueta)
TLinkLabel.Caption := 'Sma<a>pl</a>e';
¿Cómo lo resolvió?
Para resolver este problema, sino una etiqueta no se parecía probable que esta "muestra"
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;
La fuente de texto predeterminada se utiliza porque llama al 'DrawControlText' que utiliza la fuente predeterminada del control para la representación. Eso es lo que anula la configuración de la fuente de lienzo. Otra cosa es que no puede cambiar los colores del enlace a otra cosa que los colores del sistema (como COLOR_HIGHLIGHT) o el color de fuente predeterminado de la etiqueta, por lo que su intento parece ser inútil, si lo hago bien, quiere usar un enlace personalizado colores. Ver por ejemplo ['here'] (http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/bd54bd30-e21f-4dc7-a77f-88de02c63f72/). – TLama
Puede llamar a 'StyleServices.DrawText' en lugar de a' DrawControlText' pero nada cambia en el hecho de que los enlaces de 'TLinkLabel' ([' SysLink'] (http://msdn.microsoft.com/en-us/library/ windows/desktop/bb760706 (v = vs.85) .aspx) control) son procesados por el sistema utilizando los colores del sistema y si desea renderizarlos por su cuenta, deberá volver a analizar el texto y representar cada parte por su propia, lo que hace inútil el uso de 'TLinkLabel'. – TLama
@TLama, tienes razón, ¿por qué no publicar tu comentario como respuesta? – RRUZ