Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Téléchargez Pascal Discussion :

Composant Memo avec insertion de liens


Sujet :

Téléchargez Pascal

  1. #1
    Membre chevronné
    Composant Memo avec insertion de liens
    Bonjour à tous,

    Je vous propose un nouvel élément à utiliser : Composant Memo avec insertion de liens


    TLinksMemo est directement dérivé de TMemo.

    Il permet d'insérer très simplement des liens sous la forme "<lien>" , 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

  2. #2
    Rédacteur/Modérateur

    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 ?

  3. #3
    Membre chevronné
    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

  4. #4
    Rédacteur/Modérateur

    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).

  5. #5
    Membre éprouvé
    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.
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  6. #6
    Rédacteur/Modérateur

    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.

  7. #7
    Expert confirmé
    salut

    il existe deja des solution sous windows et delphi
    il suffisait d'utiliser des message OS déjà existant
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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 -Visualiser dans une fenêtre à part
    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
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #8
    Membre averti
    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…

###raw>template_hook.ano_emploi###