IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Téléchargé 8 fois
Vote des utilisateurs
2 
0 
Détails
Licence : Non renseignée
Mise en ligne le 27 juin 2016
Plate-formes : Linux, Windows
Langue : Français
Référencé dans
Navigation

Composant Memo avec insertion de liens

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
Avatar de 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 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 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 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
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
Expert confirmé 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
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.