Composant Memo avec insertion de liens

Présentation
Bonjour à tous.

TLinksMemo est directement dérivé de TMemo.
Il permet d'insérer très simplement des liens sous la forme , la cible du lien n'apparaissant pas dans le texte.
La cible du lien peut être une URL, un dossier ou un fichier à ouvrir par le processus de votre OS ou par un programme spécifique.
Pour la création de liens, le composant se suffit à lui-même : nul besoin de procédures externes.

Le zip contient un programme démo : rien à installer au préalable.
Testé sous Windows et Linux mint.

Merci d'avance pour vos commentaires.

Cordialement
Thierry
Téléchargement
Compatibilité
Linux Windows
2  0 
Téléchargé 25 fois Voir les 7 commentaires
Détails
Avatar de Thierry Dehant
Membre chevronné
Voir tous les téléchargements de l'auteur
Licence : Autre
Date de mise en ligne : 27 juin 2016




Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 27/06/2016 à 16:47
Citation Envoyé par ThWilliam  Voir le message
Il permet d'insérer très simplement des liens sous la forme "<lien>" , la cible du lien n'apparaissant pas dans le texte.

Bonjour Thierry ! Intéressant (et utile) mais, par curiosité, pourquoi pas un lien sous la forme plus habituelle, en bleu et souligné ? Et (tant que j'y suis) pourquoi un double clic pour ouvrir le lien ?
Avatar de ThWilliam ThWilliam - Membre chevronné https://www.developpez.com
le 27/06/2016 à 17:28
Merci Roland.

Le composant est dérivé directement de TMemo. A ma connaissance, il n'y a pas de formatage possible d'une partie du texte dans un TMemo. Donc, mettre le lien en bleu souligné... Il faudrait pour cela partir d'un RichEdit. Pour que l'utilisateur reconnaisse un lien, j'ai opté pour la solution d'un mot entre 2 chevrons.
Pourquoi un double clic ? c'est simplement un choix... qui m'arrangeait bien : sous Windows, le double clic sélectionne à partir du premier chevron jusqu'au deuxième chevron compris. Il devenait donc facile de distinguer un lien simplement avec le texte sélectionné.

Cordialement
Thierry
Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 27/06/2016 à 18:16
Oui, c'est bien comme ça et tu as raison au sujet du TMemo. J'étais préoccupé quand j'ai posé cette question.

Mais si le composant devait être utilisé dans une application destinée à un public non initié, je pense que la solution basée sur le RichEdit serait préférable (ce qui n'enlève rien à l'intérêt intrinsèque de ton code).
Avatar de tintinux tintinux - Membre éprouvé https://www.developpez.com
le 28/06/2016 à 12:29
la solution basée sur le RichEdit serait préférable

Attention le TRichEdit standard ne fonctionne à ma connaissance que sous Windows (c'est un format propriétaire MS et l'affichage utilise une DLL de Windows)

Il y a eu des composants portables permettant d'afficher des textes riches (colorés et soulignés), je ne me rappelle plus leurs noms mais ils se trouvent facilement.
Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 28/06/2016 à 13:03
Citation Envoyé par tintinux  Voir le message
Attention le TRichEdit standard ne fonctionne à ma connaissance que sous Windows (c'est un format propriétaire MS et l'affichage utilise une DLL de Windows)

Il y a eu des composants portables permettant d'afficher des textes riches (colorés et soulignés), je ne me rappelle plus leurs noms mais ils se trouvent facilement.

Oui, oui, c'était un lapsus : Lazarus n'a pas de RichEdit. Nous parlons de RichMemo ou de lzRichEdit.
Avatar de anapurna anapurna - Membre expert https://www.developpez.com
le 29/06/2016 à 10:40
salut

il existe deja des solution sous windows et delphi
il suffisait d'utiliser des message OS déjà existant
Code : Sélectionner tout
1
2
3
4
 
  mask := SendMessage(RE.Handle, EM_GETEVENTMASK, 0, 0); 
  SendMessage(RE.Handle, EM_SETEVENTMASK, 0, mask or ENM_LINK); 
  SendMessage(RE.Handle, EM_AUTOURLDETECT, Integer(True), 0);
et dans le message Notify interne du composant
faire un truc du genre

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
var 
  Link: TENLink; 
begin 
  inherited; 
  if Message.NMHdr^.code = EN_LINK then 
  begin 
    Link := TENLink(Pointer(Message.NMHdr)^); 
    if Link.Msg = WM_LBUTTONDOWN then 
    begin 
      SendMessage(Handle, EM_EXSETSEL, 0, Longint(@(Link.chrg))); 
      executeComande(SelText); 
    end; 
  end; 
end;
pour lazarus j'ai pas lu le code mais je pense qu'il doit déjà exister une option pour détecter les liens
Avatar de Francois_C Francois_C - Membre averti https://www.developpez.com
le 29/06/2016 à 12:20
Merci pour ce composant qui me paraît fort intéressant. Je vais l'essayer dare-dare.

Quant à moi, je ne regrette aucunement le texte bleu souligné : les liens bleus soulignés sont ce que je trouve de plus laid dans le HTML, sans doute parce qu'ils adoptent un bleu pur #0000ff qui est très agressif (alors que le bleu est en général une si belle couleur – pourvu qu'il ne soit pas le bleu primaire des photophores !), et que le souligné est toujours laid dans la typographie, d'autant qu'il est mal géré par l'affichage, trop près ou trop loin des caractères, d'une graisse différente, enfin tout pour déplaire…
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Responsables bénévoles de la rubrique Lazarus : Alcatîz - Gilles Vasseur -