Editor de código
O SynEdit da WCL, completar código, navegação entre declaração e implementação, completar classe e localizar/substituir.
O editor é o SynEdit portado para a WCL, com realce da linguagem Fenner, números de linha, dobra de blocos e esquema escuro quando o tema é escuro (as barras de rolagem seguem o tema, pelo gancho de estilo). F12 alterna formulário e código na aba ativa.
Localizar e substituir#
Ctrl+F localiza, Ctrl+H substitui e F3 repete a última busca sem abrir a tela. A tela tem as opções do SynEdit: diferenciar maiúsculas, palavras inteiras, para trás, só no trecho selecionado e do começo do arquivo. O que estiver selecionado entra como sugestão, e "Substituir tudo" diz quantas trocas fez.
Os três atalhos são atendidos pela janela principal (KeyPreview), porque o SynEdit consome o Ctrl+F e o Ctrl+H antes de o menu vê-los, e é de dentro do editor que se procura.
Navegar e completar#
Como no Delphi, com o foco no editor de código (no desenho, Ctrl+Shift+setas redimensionam o controle pela grade):
| Atalho | O que faz |
|---|---|
| Ctrl+Shift+↑ / ↓ | salta entre a declaração de um método (dentro da classe) e a implementação, nos dois sentidos, de qualquer linha do corpo |
| Ctrl+Shift+C | completa a classe: cria o esqueleto da implementação de tudo o que está declarado sem corpo (procedure, function, constructor, destructor, com parâmetros e tipo de retorno); e, num método com implementação mas sem declaração, declara-o na classe |
| Alt+G (ou Ctrl+G) | pergunta um número de linha e vai até ela |
O completar classe é uma só ação de desfazer (Ctrl+Z desfaz tudo). Métodos abstract e external não ganham corpo, e o LoadComponents de um formulário do RAD também não: o corpo dele mora no .designer.fxi. Com overloads, vale o que tem os mesmos parâmetros.
Completar código#
Ctrl+Espaço abre uma lista com as palavras reservadas da linguagem e os identificadores que já aparecem no módulo (fora comentários e cadeias, e sem a própria palavra que se está digitando). Setas e PgUp/PgDn escolhem, Enter ou Tab aceitam, Esc fecha; seguir digitando filtra, e apagar além do começo da palavra fecha. A janela não toma o foco: o cursor continua no editor.
Maiúsculas e minúsculas contam, como na linguagem: Form1. completa, form1. não; o prefixo Sh sugere Show, não show.
Depois do ponto#
Depois do ponto (Form1., Self., Button1., Form1.Button1.) a lista traz os membros do tipo da expressão. O RAD descobre o tipo pelas declarações do próprio módulo (variáveis, parâmetros, campos, Self, Result, cadeias com pontos) e lista o que a classe declara, e os ancestrais declarados no módulo, mais as propriedades e eventos dos componentes do RAD (um TButton mostra Caption, OnClick…). No modo automático ela abre logo depois de digitar o ponto. Uma expressão que o RAD não entende (Foo(x).) não abre lista.
Símbolos da RTL#
Com a opção Incluir classes e membros da RTL (padrão ligado), o RAD lê uma vez os fontes da RTL (a pasta RtlSource do projeto: o System, o System.Remainder e os módulos do uses) e guarda as classes com seus membros públicos e ancestrais. Assim Form1. traz também Show, Close, ActiveControl…, e digitar TBut sugere TButton. A primeira vez leva um tempo (de 1 a alguns segundos, conforme a máquina); depois é imediato. Desligue a opção se isso incomodar.
Só os primeiros 1,5 milhão de caracteres do módulo são lidos para as palavras.
Configurável#
Em Exibir > Opções > Editor > Completar código, porque em máquina lenta ou com módulo enorme a lista pode pesar:
| Modo | Efeito |
|---|---|
| Desligado | nada disso roda |
| Só com Ctrl+Espaço (padrão) | a lista abre quando você pede |
| Automático (ao digitar) | abre sozinha depois de N letras (padrão 3) e de uma pequena pausa de digitação (não a cada tecla). Não abre depois de um ponto nem dentro de uma cadeia |
Como é feito#
A lógica de navegação e de completar classe é só texto e mora em Rad.CodeNav (sem nenhum controle, testável sem abrir janela). Os atalhos são atendidos pelo Application.OnMessage, porque o Ctrl+Shift+seta não passa pelo KeyPreview e o Alt+G vem como WM_SYSKEYDOWN, que não chega ao OnKeyDown. Se um programa externo reservar o Alt+G como atalho global, o Ctrl+G cobre. As sugestões de completar vêm de Rad.Complete (lógica pura) e a janelinha, as teclas e o disparo automático ficam em Rad.CompletePopup.