¿Cómo puedo hacer que un TLinkLabel funcione en Delphi?
(6)
Puse un TLinkLabel en mi formulario, lo llené con un título que incluye un enlace HTML válido, y obtuve un bonito texto azul subrayado. Cuando ejecuté el programa, esperaba invocar Firefox (mi navegador predeterminado) y abrir el enlace automáticamente. Aparentemente ese no es el caso.
El archivo de ayuda dice que tengo que codificar esto en un controlador de eventos OnLinkClick. Sin embargo, no dice nada sobre cómo hacer eso. Pasará un valor de cadena llamado "Enlace". ¿Cómo digo "invocar el navegador predeterminado y abrirlo"?
Yo uso un control llamado TInternetLabel en su lugar. Hace exactamente lo que quiere: al hacer clic, abre el navegador para que no tenga que poner el código en el evento OnClick.
Puede llamar a ShellExecute. Escribí este método para llamadas genéricas, y debería funcionar en su caso.
procedure ShellOpen(const Url: string; const Params: string = '''');
begin
ShellAPI.ShellExecute(0, ''Open'', PChar(Url), PChar(Params), nil, SW_SHOWNORMAL);
end;
En tu código debes llamar esto
procedure TForm1.LinkLabelClick(Sender: TObject);
begin
ShellOpen(LinkLabel.Caption);
end;
Tengo todo tipo de problemas con TLinkLabel que se incluye con Delphi 2010. a) El control no se representa como un hipervínculo, sino como un simple texto de etiqueta en el formulario. b) el cursor no cambia para indicar que se trata de un enlace aunque configuré la propiedad Cursor. c) el evento OnLinkClick no se dispara en absoluto. Estoy trabajando en Windows 7.
Entonces, en lo que a mí respecta, TLinkLabel no hace nada como debería y es inútil. ShellExecute es la única solución y debe colocarse en el evento OnClick.
LOL, es gracioso. Entonces, en lugar de configurar crHandPoint como cursor, fuente coloreada y subrayada y rellenar el evento OnClick para TLabel estándar, tenemos un componente que conoce la etiqueta de enlace y que en absoluto necesito suministrar con el mismo evento On (Link) Click :))
Lo único bueno es que hace más fácil insertar un enlace en algún texto y que está utilizando el estilo del sistema de enlace ...
ps: realmente tienes que poner Some text with <a href="some URL">link</a>
en el OnLinkClick
y configurar OnLinkClick
en ese ShellExecute
...
Probé esta solución, pero aún dio problemas en Delphi XE4, probablemente porque ShellOpen no comprende el código HTML en el título. Lo que funcionó para mí fue una combinación de Cesar Romero (el código básico), Adam Feistner (El código HTML en el título) y una solución anterior:
- Coloque la URL en el campo Sugerencia.
- Cambiar la línea: ShellOpen (LinkLabel.Caption); a ShellOpen (LinkLabel.Hint);
Esto funcionó para mí.
TLinkLabel
proporciona una etiqueta que se parece a un enlace. Es su trabajo como programador hacer que actúe como un enlace porque solo usted puede saber cómo se supone que deben actuar los enlaces en su programa. Quería que la etiqueta abra automáticamente el navegador web predeterminado del usuario usando la URL en la etiqueta, pero eso no es lo único que hacen los enlaces. Por ejemplo:
- Internet Explorer no es mi navegador predeterminado, pero cuando hago clic en un enlace en Internet Explorer, no espero que la página enlazada se abra en Firefox.
- Cuando hago clic en un enlace en el programa de ayuda, espero que el tema vinculado aparezca en el programa de ayuda, no en ningún navegador web.
- Las páginas de preferencia en Eclipse son muy complicadas. La configuración en una página a veces está relacionada con la configuración en otra página. Hay enlaces en esas páginas que llevan al usuario directamente a la página relacionada. No hay URL ni HTML involucrados en este caso, y sin embargo, siguen siendo etiquetas con texto subrayado.
Algunos programas intentan ofrecer una opción entre abrir enlaces en ventanas nuevas o volver a usar ventanas antiguas. No puede implementar esa función sin saber qué navegador está en uso. Su programa podría ofrecer al usuario la opción de ignorar la configuración predeterminada del navegador y siempre usar una específica. Para hacer eso, su control de UI no puede hacer demasiadas suposiciones sobre lo que se supone que debe hacer el programa.
Supongo que te refieres a un control TLinkLabel
que viene con Delphi. (Mis versiones no tienen ese componente.) Imagino que el control Delphi está destinado a imitar el de la biblioteca de clases .Net . Puede contener enlaces múltiples, y cada enlace puede hacer algo diferente.
Si desea un control que siempre TLinkLabel
la acción predeterminada del shell para las URL, considere usar un TLinkLabel
diferente; el de Alexander Bach hace exactamente lo que esperabas. Es de Delphi 3, pero también debería funcionar sin modificaciones en todas las versiones posteriores, incluida Delphi 2009. Si miras el código, verás cómo funciona. Simplemente llama a ShellExecute
, como lo demuestra la respuesta de Cesar .