Info-bulles dans le programme de notes FAQ.Net ou navigation sur les documents RTF sans modifier les documents eux-mĂŞmes

Présentation


Souvent, la navigation des documents dans les applications de prise de notes se fait sous forme de liens (Link), que l'utilisateur crée manuellement dans chaque document. Mais que faire si vous effectuez une navigation par mots clés sans utiliser de liens uniques dans le document?

La tâche que je me suis fixée lors de l'amélioration des fonctionnalités du programme FAQ.Net était de créer un mécanisme pratique pour naviguer dans les documents RTF dans l'application FAQ.Net.

En conséquence, FAQ.Net version 2.7 a acquis une fonction d'info-bulle à l'aide de mots clés personnalisés et de leur définition.

Quels sont leurs avantages et leurs avantages dans le programme de notes et comment les utiliser, je vais les décrire brièvement dans le cadre de cet article.



Façons de créer la navigation dans les documents RTF à l'aide du composant RichTextBox standard


  1. Utiliser des signets
    Dans la norme RTF, il existe un mécanisme de signet intégré, mais le composant RichTextBox standard ne prend pas en charge le fonctionnement des éléments bkmkstart et bkmkend.
  2. Désactivez la propriété DetectUrls et créez vos propres liens.
    Cette méthode est décrite dans l'article Liens avec du texte arbitraire dans un RichTextBox . Dans ce cas, vous devez ajouter du code pour déterminer les URL et restaurer tous les liens lors de l'ouverture d'un document RTF. Je pensais que cela prenait du temps et réduirait légèrement la vitesse de l'application.
  3. Info-bulles
    Après les deux méthodes décrites ci-dessus, j'ai lu un article sur les info-bulles dans le composant RichTextBox [WinForms] RichTextBox ToolTip comme Visual-Studio . Cette option a été prise comme base.

Info-bulles Liste des tâches


Dans l'idée avec les info-bulles, j'ai vu le potentiel du résultat souhaité et j'ai commencé à le réaliser. Tout ce qui était nécessaire était d'étendre le composant info-bulle et d'y ajouter des liens avec des transitions. Il n'y avait pas de solution toute faite dans le vaste Internet, j'ai donc développé le code moi-même.

Liste des tâches à réaliser:

  1. organiser le stockage des mots-clés (astuces) avec des liens
  2. mettre en œuvre la fonction de détermination d'un mot lorsque vous passez la souris dessus
  3. créer une interface pour créer et éditer un «dictionnaire d'invites» (voir description ci-dessous)
  4. créer la possibilité de créer rapidement des mots clés dans un document RTF en utilisant le "dictionnaire d'indices"
  5. la fonctionnalité des info-bulles doit être extensible

DĂ©tails de l'article


  1. Les mots clés sont stockés dans la base de données SQLite. Script de création de table:

    CREATE TABLE word_tooltip ( id_content INTEGER NOT NULL, /*  id_content=0,      */ word VARCHAR NOT NULL, /* ,     */ tooltip_type INTEGER NOT NULL, /*   : 0 -     , 1 -    -, 2 -   */ comment VARCHAR NOT NULL, /*   */ url_adr VARCHAR NULL, /* URL- */ group_name VARCHAR NULL, /*       */ fore_color VARCHAR NULL, /*   */ create_date DATETIME DEFAULT (CURRENT_TIMESTAMP), modif_date DATETIME, PRIMARY KEY (id_content, word) ) 
  2. la fonction de détermination d'un mot lors du survol est effectuée à l'aide des fonctions standard du composant RichTextBox: GetPositionFromCharIndex et GetCharIndexFromPosition.

    Symboles par lesquels le début ou la fin d'un mot est déterminé:

     ',',';',':','!','?','%','+','=','*','$','\'','\"','<','>','^','(',')','[',']','{','}','°','&','|',' ','\n','"','\t' 
  3. "Dictionnaire d'indices" - c'est ce que j'ai appelé un panneau dans lequel tous les mots créés par l'utilisateur sont affichés et modifiés, sur lesquels vous devez afficher des indices lorsque vous survolez un document RTF. Le panneau "Dictionnaire de conseils" se compose de:
    - boutons de commande: créer, éditer, copier et supprimer.
    - barre de recherche
    - un panneau de mots sous forme d'arbre (TreeView)
    - panneaux d'Ă©dition
  4. La création de mots dans le "dictionnaire des invites" s'effectue en appuyant sur Ctrl + Espace. Si vous placez le curseur au milieu du mot, lorsque vous appelez Ctrl + Espace, le filtre de mots sera automatiquement défini sur le filtre de mots dans le dictionnaire d'aide au début du mot avant le curseur, et lorsque vous sélectionnez un mot (Entrée ou double-clic), le mot entier est remplacé par celui sélectionné. Lorsque vous appuyez sur des lettres du clavier, l'utilisateur affiche un mot de filtre en haut du composant de sélection de mot. Pour la commodité de travailler avec le dictionnaire, lorsque vous survolez un mot, un indice s'affiche dans la liste filtrée.






  5. l'extension de la fonctionnalité info-bulle se trouve dans le champ tooltip_type INTEGER NOT NULL. Types d'infobulles:

    • en rĂ©fĂ©rence Ă  la note (document RTF interne). Seul l'identifiant de la note (question) est indiquĂ©. Lorsque vous survolez un mot, le nom de la note s'affiche sous forme d'indice.
    • en rĂ©fĂ©rence Ă  la ressource Internet. L'URL et le texte de l'indice sont fournis.
    • indice statique. Seul le texte de conseil est indiquĂ©.


Les avantages


  1. stockage et modification de mots-clés avec des liens sous une forme structurée (tableau)
  2. navigation dans les documents RTF, sans modifier les documents eux-mĂŞmes
  3. la possibilité de saisir automatiquement des mots (IntelliSense) à partir d'un dictionnaire défini par l'utilisateur
  4. création et changement rapides de liens dans tous les documents contenant un mot-clé

Inconvénients


  1. Le problème avec les tables RTF. Malheureusement, le composant RichTextBox standard présente un inconvénient avec l'affichage des tableaux. Pour éliminer cet inconvénient, la bibliothèque Msftedit.dll est utilisée, ce qui introduit des bogues dans les fonctions GetPositionFromCharIndex et GetCharIndexFromPosition. Je ne sais pas encore comment résoudre ce problème, mais j'espère qu'une solution sera trouvée. À cet égard, dans la version de FAQ.Net 2.7, je ne recommande pas d'utiliser des info-bulles à l'intérieur et après les tables RTF.
  2. La morphologie des mots, c'est-à-dire Chaque mot doit être dupliqué avec un nouvel indice.

Qu'est-ce qui va encore s'améliorer dans l'application FAQ.Net?


  1. La fonction d'import / export d'un dictionnaire de conseils sera ajoutée
  2. Vous pourrez ajouter des balises aux notes. En outre, il ajoutera la possibilité d'entrer dans votre dictionnaire de conseils pour les balises.
    Par exemple: créez une balise C #, créez des mots clés de la couleur souhaitée. Après cela, créez une fonction de coloration syntaxique pour le fragment sélectionné. Cela permettra à l'utilisateur d'entrer ses mots et de définir leurs mots en surbrillance.

Conclusion


En général, j'aime vraiment la fonctionnalité. Je crois que l'objectif de naviguer parmi les documents RTF à l'intérieur de l'application FAQ.Net a été atteint.
À titre personnel, je garde des info-bulles en tant que traducteur, ce qui m'aide à apprendre et à mémoriser de nouveaux mots étrangers.
Vous pouvez facilement stocker et afficher des astuces pour les abréviations dans le dictionnaire.
Le dictionnaire est pratique pour stocker des liens vers des articles sur Internet et accompagner un bref commentaire.

Liens vers les articles attachés


Présentation vidéo des info-bulles dans FAQ.Net
Description détaillée de l'application FAQ.Net
Groupe VK

Téléchargez l'application Windows FAQ.Net (gratuite):
(x64) yadi.sk/d/sq3g4NOD3Zt7ZY
(x86) yadi.sk/d/NKXeyUWH3Zt8PQ

Source: https://habr.com/ru/post/fr479350/


All Articles