FAQ.Net中的工具提示可注释程序或在RTF文档上导航,而无需更改文档本身

引言


通常,记笔记应用程序中的文档导航以链接(Link)的形式进行,用户可以在每个文档中手动创建它们。 但是,如果您在不使用文档中唯一链接的情况下进行关键字导航呢?

在改进FAQ.Net程序的功能时,我设定的任务是创建一种方便的机制,用于在FAQ.Net应用程序中浏览RTF文档。

结果, FAQ.Net 2.7版使用自定义关键字及其定义获得了工具提示功能。

在Notes程序中它们的优点和好处是什么以及如何使用它们,我将在本文的框架中简要介绍。



使用标准RichTextBox组件在RTF文档中创建导航的方法


  1. 使用书签
    在RTF标准中,有一个内置的书签机制,但是标准的RichTextBox组件不支持bkmkstart和bkmkend元素的操作。
  2. 禁用DetectUrls属性并创建自己的链接。
    在RichTextBox中的带有任意文本的链接文章中描述了此方法。 在这种情况下,您需要添加代码来确定URL,并在打开RTF文档时恢复所有链接。 我认为这很耗时,并且会稍微降低应用程序的速度。
  3. 工具提示
    在上述两种方法之后,我阅读了有关VisualTextStudio的RichTextBox [WinForms]组件RichTextBox ToolTip中的工具提示的文章 。 该选项作为基础。

工具提示 任务清单


在带有工具提示的想法中,我看到了实现预期结果的潜力,并开始意识到这一点。 需要做的只是扩展工具提示组件并添加带有过渡的链接。 庞大的Internet中没有现成的解决方案,因此我自己开发了代码。

要完成的任务清单:

  1. 通过链接组织关键字(提示)的存储
  2. 实现悬停时确定单词的功能
  3. 创建用于创建和编辑“提示字典”的界面(请参见下面的说明)
  4. 创建使用“提示字典”在RTF文档中快速创建关键字的功能
  5. 工具提示功能必须是可扩展的

项目明细


  1. 关键字存储在SQLite数据库中。 表创建脚本:

    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. 使用RichTextBox组件的标准功能执行将鼠标悬停时确定单词的功能:GetPositionFromCharIndex和GetCharIndexFromPosition。

    确定单词开头或结尾的符号:

     ',',';',':','!','?','%','+','=','*','$','\'','\"','<','>','^','(',')','[',']','{','}','°','&','|',' ','\n','"','\t' 
  3. “提示字典”-这就是我所说的面板,其中显示和编辑所有用户创建的单词,将鼠标悬停在RTF文档上时需要在其上显示提示。 面板“技巧词典”包括:
    -控制按钮:创建,编辑,复制和删除。
    -搜索栏
    -以树的形式显示的一组单词(TreeView)
    -编辑面板
  4. 通过按Ctrl +空格键可在“提示字典”中创建单词。 如果将光标放在单词的中间,则在调用Ctrl + Space时,单词过滤器将自动设置为帮助词典中光标之前单词开头的帮助词过滤器中的单词过滤器,并且当您选择一个单词(Enter或双击)时,整个单词将被选定的单词替换。 在键盘上按字母时,会在单词选择组件的顶部为用户显示一个过滤单词。 为了方便使用字典,将鼠标悬停在单词上时,过滤列表中会显示一个提示。






  5. 工具提示功能的扩展位于tooltip_type INTEGER NOT NULL字段中。 工具提示的类型:

    • 参考注释(内部RTF文档)。 仅显示注释(问题)的ID。 将鼠标悬停在单词上时,便笺的名称将显示为提示。
    • 参考Internet资源。 提供了URL和提示文本。
    • 静态提示。 仅显示提示文本。


优势优势


  1. 存储和修改带有结构化形式的链接的关键字(表)
  2. 浏览RTF文档,而无需更改文档本身
  3. 从用户定义的词典中自动完成单词(IntelliSense)的能力
  4. 在有关键字的所有文档中快速创建和更改链接

缺点


  1. RTF表的问题。 不幸的是,标准的RichTextBox组件在显示表方面有一个缺点。 为了消除此缺点,使用了Msftedit.dll库,该库将错误引入到GetPositionFromCharIndex和GetCharIndexFromPosition函数中。 我还不知道如何解决这个问题,但我希望能找到解决方案。 在这方面,在FAQ.Net 2.7版本中,我不建议在RTF表内部和之后使用工具提示。
  2. 词的形态,即 每个单词都必须重复一个新提示。

FAQ.Net应用程序将进一步改善什么?


  1. 导入/导出提示字典的功能将被添加
  2. 您将能够在笔记中添加标签。 此外,它将增加输入标签提示字典的功能。
    例如:创建一个C#标签,创建所需颜色的关键字。 之后,为所选片段创建语法突出显示功能。 这将允许用户输入他们的单词并定义他们的突出显示单词。

结论


总的来说,我真的很喜欢这个功能。 我相信已经实现了在FAQ.Net应用程序内部的RTF文档之间导航的目标。
在个人使用中,我会保留翻译提示,这有助于我学习和记住新的外来词。
您可以轻松地在字典中存储和显示缩写提示。
该词典可方便地存储来自Internet的文章链接,并附有简短评论。

附件文章链接


FAQ.Net中工具提示的视频演示
应用程序FAQ.Net的详细说明
VK集团

下载Windows应用程序FAQ.Net(免费):
(x64) yadi.sk/d/sq3g4NOD3Zt7ZY
(x86) yadi.sk/d/NKXeyUWH3Zt8PQ

Source: https://habr.com/ru/post/zh-CN479350/


All Articles