Dicas de ferramenta no FAQ.Net registra programa ou navegação em documentos RTF sem alterar os próprios documentos

1. Introdução


Freqüentemente, a navegação de documentos em aplicativos de anotações é feita na forma de links (Link), que o usuário cria manualmente em cada documento. Mas e se você fizer a navegação por palavras-chave sem usar links exclusivos no documento?

A tarefa que me propus ao melhorar a funcionalidade do programa FAQ.Net foi criar um mecanismo conveniente para navegar pelos documentos RTF no aplicativo FAQ.Net.

Como resultado, o FAQ.Net versão 2.7 adquiriu uma função de dica de ferramenta usando palavras-chave personalizadas e suas definições.

Quais são suas vantagens e benefícios no programa de anotações e como usá-las, descreverei brevemente na estrutura deste artigo.



Maneiras de criar navegação em documentos RTF usando o componente RichTextBox padrão


  1. Usando marcadores
    No padrão RTF, existe um mecanismo de marcação interno, mas o componente RichTextBox padrão não suporta a operação dos elementos bkmkstart e bkmkend.
  2. Desative a propriedade DetectUrls e crie seus próprios links.
    Este método é descrito no artigo Links with text arbitrary in a RichTextBox . Nesse caso, você precisa adicionar código para determinar os URLs e restaurar todos os links ao abrir um documento RTF. Eu pensei que isso é demorado e reduzirá ligeiramente a velocidade do aplicativo.
  3. Dicas de ferramentas
    Após os dois métodos descritos acima, li um artigo sobre dicas de ferramentas no RichTextBox [WinForms] RichTextBox ToolTip do componente, como o Visual Studio . Esta opção foi tomada como base.

Dicas de ferramentas Lista de tarefas


Na idéia com dicas de ferramentas, vi o potencial para o resultado desejado e comecei a percebê-lo. Tudo o que era necessário era expandir o componente de dica de ferramenta e adicionar links com transições. Não havia uma solução pronta na vasta Internet, então eu mesmo desenvolvi o código.

Lista de tarefas a serem concluídas:

  1. organizar o armazenamento de palavras-chave (dicas) com links
  2. implementar a função de determinar uma palavra quando você passa o mouse sobre ela
  3. crie uma interface para criar e editar um "dicionário de prompts" (veja a descrição abaixo)
  4. crie a capacidade de criar rapidamente palavras-chave em um documento RTF usando o "dicionário de dicas"
  5. A funcionalidade da dica de ferramenta deve ser extensível

Detalhes do item


  1. Palavras-chave são armazenadas dentro do banco de dados SQLite. Script de criação da tabela:

    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. a função de determinar uma palavra ao passar o mouse sobre ela é executada usando as funções padrão do componente RichTextBox: GetPositionFromCharIndex e GetCharIndexFromPosition.

    Símbolos pelos quais o início ou o fim de uma palavra é determinado:

     ',',';',':','!','?','%','+','=','*','$','\'','\"','<','>','^','(',')','[',']','{','}','°','&','|',' ','\n','"','\t' 
  3. "Dicionário de dicas" - foi o que chamei de painel no qual todas as palavras criadas pelo usuário são exibidas e editadas, nas quais você precisa exibir dicas quando passa o mouse sobre um documento RTF. O painel "Dicionário de dicas" consiste em:
    - botões de controle: crie, edite, copie e exclua.
    - barra de pesquisa
    - painéis de palavras semelhantes a árvores (TreeView)
    - painéis de edição
  4. A criação de palavras no "dicionário de prompts" é realizada pressionando Ctrl + Space. Se você colocar o cursor no meio da palavra, quando você chamar Ctrl + Space, o filtro de palavras será automaticamente definido como filtro de palavras no dicionário de ajuda no início da palavra antes do cursor e, quando você selecionar uma palavra (digite ou clique duas vezes), a palavra inteira será substituída pela palavra selecionada. À medida que você pressiona as letras no teclado, o usuário recebe uma palavra de filtro na parte superior do componente de seleção de palavras. Para a conveniência de trabalhar com o dicionário, quando você passa o mouse sobre uma palavra, uma dica é exibida dentro da lista filtrada.






  5. a extensão da funcionalidade da dica de ferramenta está no campo tooltip_type INTEGER NOT NULL. Tipos de dicas de ferramentas:

    • com referência à nota (documento interno da RTF). Somente o ID da nota (pergunta) é indicado. Ao passar o mouse sobre uma palavra, o nome da nota é exibido como uma dica.
    • com referência ao recurso da Internet. O URL e o texto da dica são fornecidos.
    • dica estática. Somente o texto da dica é indicado.


Vantagens


  1. armazenamento e modificação de palavras-chave com links de forma estruturada (tabela)
  2. navegação através de documentos RTF, sem alterar os próprios documentos
  3. a capacidade de preencher automaticamente palavras (IntelliSense) de um dicionário definido pelo usuário
  4. criação e alteração rápidas de links em todos os documentos em que há uma palavra-chave

Desvantagens


  1. O problema com as tabelas RTF. Infelizmente, o componente RichTextBox padrão tem uma desvantagem na exibição de tabelas. Para eliminar essa desvantagem, é usada a biblioteca Msftedit.dll, que introduz bugs nas funções GetPositionFromCharIndex e GetCharIndexFromPosition. Ainda não sei como lidar com esse problema, mas espero que seja encontrada uma solução. A esse respeito, na versão do FAQ.Net 2.7, eu não recomendo o uso de dicas de ferramentas dentro e depois das tabelas RTF.
  2. A morfologia das palavras, ou seja, Cada palavra deve ser duplicada com uma nova dica.

O que melhorará ainda mais no aplicativo FAQ.Net?


  1. A função para importar / exportar um dicionário de dicas será adicionada
  2. Você poderá adicionar tags às notas. Além disso, ele adicionará a capacidade de inserir seu dicionário de dicas para tags.
    Por exemplo: crie uma tag C #, crie palavras-chave da cor desejada. Depois disso, crie uma função de destaque de sintaxe para o fragmento selecionado. Isso permitirá que o usuário insira suas palavras e defina suas palavras de destaque.

Conclusão


Em geral, eu realmente gosto da funcionalidade. Acredito que o objetivo de navegar entre documentos RTF dentro do aplicativo FAQ.Net foi alcançado.
No uso pessoal, mantenho dicas de ferramentas como tradutor, o que me ajuda a aprender e lembrar de novas palavras estrangeiras.
Você pode facilmente armazenar e exibir dicas de abreviações no dicionário.
O dicionário é conveniente para armazenar links para artigos da Internet e acompanhar um breve comentário.

Links de artigos anexados


Apresentação em vídeo de dicas de ferramentas no FAQ.Net
Descrição detalhada do aplicativo FAQ.Net
Grupo VK

Faça o download do aplicativo para Windows FAQ.Net (gratuito):
(x64) yadi.sk/d/sq3g4NOD3Zt7ZY
(x86) yadi.sk/d/NKXeyUWH3Zt8PQ

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


All Articles