Outras considerações e futuro do programa

Outras considerações importantes para redistribuir o projeto modificado

A checagem de parâmetros passados na linha de comando para o programa é feita direto no código fonte do projeto (“MepTexto.dpr”), antes de qualquer formulário ser carregado. Para abri-lo no Delphi, use o menu “Project > View Source”, estando com o projeto já carregado.

A associação de arquivos poderia ser feita pelo instalador, mas fica mais prático fazê-la pelo próprio programa, simplificando a instalação. Você precisa apenas chamar o executável com o parâmetro correto. A saber, eis os parâmetros suportados:

  • /assoc

Associa o programa aos arquivos de texto no Windows (“.txt”). Atualmente ele define como ícone padrão o “icTxt.ico”, que deve estar na mesma pasta do executável. Os ícones dos outros tipos de arquivos estão como recursos (resources) na DLL “ImageRes.dll”. Esta DLL não possui funções, e pode ser modificada com um editor de recursos visual, caso você queira trocar os ícones (use, por exemplo, o Resource Hacker).

  • /desassoc

Remove a associação, na verdade reassociando o Bloco de notas (todo Windows vem com o bloco de notas mesmo 😉 É útil e importante chamá-la na desinstalação, senão os usuários não conseguiriam abrir com o duplo clique os arquivos “.txt”, pelo Explorer (claro que poderiam fazer isso reassociando, mas um programa responsável deve cuidar disso, ainda mais num tipo de arquivo genérico, usado por outros programas também).

  • /ie

Associa o editor como visualizador do código-fonte do IE (não funciona com o IE 5 ou mais antigo, mas funciona no 6 e 7). Parece que não funcionou no Windows 2000, mesmo com o IE 6, então incluí no instalador uma instrução para permitir esta associação apenas se ele for instalado no Windows XP ou superior. Todavia, pela tela das opções, o usuário poderá clicar para associar

  • /lic

Exibe a licença de uso, sem carregar todo o programa. O texto exibido é o conteúdo do arquivo “license.txt”, que deve estar na mesma pasta do executável.

  • /reset

Limpa todas as configurações do programa no registro (exceto a associação de arquivos, para isso, use o /desassoc). Basicamente remove a chave “HKEY_CURRENT_USER Software Mep Mep Texto”, com todas as suas subchaves, e também a correspondente na chave HKEY_LOCAL_MACHINE. É importante chamar na desinstalação também, para limpar o registro do sistema do usuário. Para evitar perda de opções, o Mep Texto perguntará ao usuário se ele quer realmente excluir as configurações, e orienta para não fazê-lo caso pretenda reinstalar o programa.

Algumas imagens usadas em algumas telas do programa estão como recursos, dentro do arquivo “mt.res”, e podem ser trocadas com editores visuais de recursos, como o já comentado Resource Hacker. Abra o “mt.res” nele, localize a imagem e troque-a pela desejada. Esse arquivo não precisará ser redistribuído, pois os recursos inclusos nele serão embutidos no executável, pelo Delphi, durante a compilação. Eu incluí como recurso pois estas imagens são compartilhadas por várias telas comuns, assim uma única imagem de cada faz parte do programa, evitando colocar as mesmas imagens independentes em cada tela, o que ocuparia mais espaço.

Não deixe de curiar a unit “MepUtil2.pas”, nela existem diversas funções usadas no Mep Texto, por exemplo, para escrita e leitura de dados no registro (já comentadas), para descobrir a versão de Windows utilizada, uma que retorna a pasta do Windows, outra a System, outra a Temp, etc. Se quiser, fique a vontade para usar estas funções em outros programas 🙂

Para redistribuir o programa para os usuários finais, sugiro copiar o executável compilado para a pasta “distrib”, que contém outros arquivos necessários, e então redistribuir esta pasta. Comentando agora os arquivos incluídos, como sugestão de redistribuição (e que são redistribuídos no pacote oficial):

  • MepTexto.exe.manifest

É o manifesto para ativar suporte aos temas visuais do Windows XP. Sem ele na mesma pasta do programa, os botões e controles visuais não receberão os efeitos dos temas do Windows. Ele pode ser incluído diretamente como um recurso no Delphi (no Delphi 7, basta adicionar a unit “XPMan” na cláusula Uses de qualquer formulário, de preferência, direto no código do projeto – o arquivo “.dpr”). Pensando em possíveis problemas com versões superiores do Windows ou por qualquer outro motivo, preferi deixá-lo num arquivo a parte, que pode ser removido ou renomeado por qualquer um – estando como um recurso embutido, os usuários finais não poderiam desativar o suporte aos temas do Windows facilmente. O nome do arquivo deve ter o mesmo nome do executável, mais a extensão “.manifest”. Se você renomear o executável, deve renomear este arquivo também.

  • Arquivos .bat

São arquivos que chamam o editor com algum parâmetro, para executar algumas ações sem precisar abrir o programa. Os nomes dos arquivos já explicam tudo 🙂

  • FundoMT1.bmp

Aplicado desde a versão 1.1 do Mep Texto, é uma imagem, como sugestão de imagem de fundo para as barras de ferramentas (há nas opções um item para alterar o fundo; caso o usuário não tenha nenhuma imagem, pode usar esta). Depois foram aplicados os estilos de menus dos programas “.NET”, como o Office XP e o Office 2003, no Mep Texto 2.0, praticamente inutilizando o uso de uma imagem de fundo nas barras de ferramentas. Mas se o usuário deixar os menus sem temas, aplicar a imagem de fundo pode dar um efeitinho leve e agradável para alguns.

  • HTML.MEP

Ideal para quem mexe com HTML, mas pode ser personalizado e editado para qualquer uso, como um “modelo”. Ao usar o menu “Arquivo > Novo > Página da web”, ou ao inserir no arquivo atual a base do HTML (com CTRL + F2), o conteúdo deste arquivo será inserido no editor. É um arquivo de texto puro, apenas com a extensão “.mep”, comum nos meus programas, rs.

  • icTxt.ico

O arquivo de ícone usado por padrão para os arquivos de texto, no Windows Explorer, quando feita a associação de arquivos. Os outros ícones estão dentro do ImageRes.dll, e a idéia é, em versões futuras, recolocar esse ícone dentro da DLL. Ao fazer isso, deve-se alterar as referências a ele no código da associação de arquivos, indicando o caminho correto da DLL com o índice do ícone, dentro dela.

  • ImageRes.dll

Já comentado acima, inclui os ícones para os tipos de arquivos que o Mep Texto se associa ao clicar nos botões de associação, na tela das opções. Você pode trocar os ícones usando editores de recursos, como o Resource Hacker. Esta DLL não tem funções, apenas armazena os ícones, por isso não é fornecido o código fonte dela – até porque nem tenho mais, usar programas como o Resource Hacker para editar recursos é muito mais cômodo do que usar os ambientes de programação em geral 🙂 (exceto em alterações em lotes, claro).

  • license.txt

Óbvio, a licença de uso. O conteúdo deste arquivo será exibido dentro do campo de texto na tela de licença de uso. Você não pode removê-lo nem modificá-lo.

  • sobrew.mep

É uma página HTML, novamente aqui com a extensão “.mep”, rs. O conteúdo dela será exibido na tela “Sobre”, dentro do campo de visualização compartilhado, puxado do controle Active-X do Internet Explorer. Você pode remover este componente e as referências dele se você for daqueles “anti-IE”. Como o Windows 98 ou superior vem com o IE integrado, não há problema nenhum em usar esse controle nos programas. E em tempo de programação é muito fácil manipulá-lo, pois o Delphi 5 ou superior já vem com “suporte integrado”, digamos (exceto se você tiver optado pela instalação mínima, ao instalar o Delphi). Talvez devido a isso, o Mep Texto não rodou no Windows que roda do CD, que não tem o IE pronto para uso.

  • ic.exe

Esse arquivo é um exemplo claro e aplicado da POG, “Programação Orientada a Gambiarras”, rs. Ele basicamente cria atalhos para o editor, puxando como base a pasta do programa, sem exibir nada para o usuário. Os atalhos feitos durante a instalação são criados pelo instalador, mas depois de instalado, há um item “Instalar atalhos”, no menu “Configurar” e também na aba “Associação de arquivos” da tela das opções. Esses itens chamam esse arquivo, para, por exemplo, restaurar atalhos que o usuário possa ter perdido (na área de trabalho, menu Iniciar, etc). Esse arquivo é um arquivo SFX comprimido pelo WinRAR, visto que o WinRAR possui função de criação de atalhos nos auto-extraíveis. Fiz dessa forma porque eu queria esse item, de recriação de atalhos, na interface do programa. Mas nenhuma das funções que eu tinha em mãos criaram atalhos corretamente; a idéia é aplicar funções para isso nas versões futuras, removendo então este arquivo. Lógico que o Mep Installer/Inno Setup têm funções de criação de atalhos, eu poderia muito bem ter pego deles, mas… Na falta de tempo, optei por usar o arquivo gerado com o WinRAR; personalizando, é claro, o nome de destino do atalho e a referência ao “MepTexto.exe” na pasta atual. Para o usuário final não importa, os atalhos serão criados normalmente. Tá vendo como é um exemplo de POG? rs

Claro que você pode remover ou alterar esses arquivos (exceto o “LICENSE.TXT”!), ou ainda adicionar novos. O melhor, no caso de Windows, seria mesmo criar um instalador, que basicamente copiasse o conteúdo dessa pasta para uma pasta do tipo “C:Arquivos de programasSeu Programa” e criasse atalhos, chamando o editor com o parâmetro “/assoc” logo no final da instalação, e chamando-o na desinstalação com “/desassoc” e depois novamente, com “/reset”.

A instalação eu faço com o Mep Installer, uma versão personalizada por mim do Inno Setup (é um “fork” do Inno, basicamente, mas de código fechado). Basta usar o arquivo de extensão “.mpi” fornecido no pacote do código fonte, compilando-o no Mep Installer, para gerar o instalador. Se você quiser usar o Inno Setup, por ser de código aberto (ou por qualquer outro motivo), pode usar este mesmo arquivo, pois eles são bem compatíveis, exceto um ou outro item (mas mesmo assim bastará remover ou comentar as linhas que não funcionarem no Inno Setup). Outro instalador bom e open source é o da Nullsoft, o NSIS (sim, da mesma dona do Winamp!), mas o script de projeto dele não tem nada a ver com o do Inno e você deveria criar o instalador do zero.

Nota: para quem se perguntar porque o Mep Installer é fechado, sendo baseado no Inno Setup, que é open source… Primeiro, a licença de uso do Inno não impõe esta restrição, ele não é GPL, o autor pede apenas para manter os créditos. Segundo, que sendo open source, não dá para confiar totalmente nas funções de proteção por senha ou número serial da forma como são aplicadas. Eu mudei estas funções, coloquei proteção nativa por número serial fixo, verificações redundantes, personalizei o visual com base num instalador que eu tentava desenvolver antes de conhecer o Inno, deixando a instalação super fácil para os usuários finais… Além de ter opcionalmente a interface de compilação em português 🙂 E como apliquei medidas de proteção, não quis redistribuir o código fonte; mas ele é freeware.

Mesmo sendo um aplicativo de pequeno porte, digamos, mas de uso geral, eu penso muito no sistema do usuário, em respeito a eles, e espero que você aja assim como programador também. Configurações de opções? Grave sob a chave HKEY_CURRENT_USER, é mais prático e melhor. Se você gravar sob a HKEY_LOCAL_MACHINE, todos os usuários ficarão com as mesmas opções, e o pior: usuários limitados não podem gravar dados na maioria dos locais sob esta chave, o que resultará em erros exibidos ao abrir e ao fechar o editor, além de que isso provoca a saída do procedimento atual criado pelo Delphi, não carregando todas as opções posteriores ao ponto em que ocorreu o erro – ao ponto em que a chave não pôde ser gravada. Evite também gravar arquivos nas pastas do Windows ou sob a Arquivos de programas. As versões inciais do Mep Texto gravavam as configurações num arquivo INI, que ficava na pasta do programa (em alguns releases, na pasta do Windows). Como inconvenientes, além de as mesmas opções serem aplicadas a todas as contas, os usuários limitados recebiam mensagens de erro ao abrir e fechar o editor, se a partição da pasta do programa estivesse formatada em NTFS, que é o padrão no Windows. Isso simplesmente porque não teriam direito de escrita nessa pasta. Uma alternativa, caso você prefira salvar as opções num arquivo INI, é gravar o arquivo em uma pasta do usuário, como a “Application Data”, por exemplo, dentro da pasta do perfil dele. Esses caminhos podem ser encontrados no registro, para que você recupere a pasta correta (dê uma curiada na chave “HKEY_CURRENT_USER Software Microsoft Windows CurrentVersion Explorer Shell Folders”, e carregue com a função LeReg, por exemplo, para pegar o valor correto da pasta, independentemente do idioma do Windows ou da partição e local da pasta). Gravar o arquivo de configurações na mesma pasta do programa só é útil em programas que serão “móveis”, por exemplo, para rodar o editor a partir de um pen drive, sem alterar nada no computador. Uma dica caso você queira fazer isso, é alterar as funções “EscreveReg” e “LeReg”, da unit “MepUtil.pas”. Assim o programa continua chamando elas, nas inúmeras referências que tem às mesmas, mas elas redirecionariam o que seria gravado no registro para um arquivo INI. Se você fosse alterar todas as ocorrências delas, teria um trabalho absurdamente maior.

Mesmo com todos esses cuidados, uma coisa será inevitável… Ao desinstalar o programa, mesmo que o desisntalador seja programado para remover arquivos de configuração nas pastas do usuário, ele removerá apenas do perfil do usuário que rodar o desinstalador. As outras contas continuarão com as chaves no registro e/ou com os arquivos no HD. No caso do registro, normalmente isso é verificado e limpo ao passar limpadores de registro, que quase sempre varrem a chave “HKEY_CURRENT_USER Software”, em busca de programas que não existem mais. Já no caso dos arquivos, desconheço uma forma de limpá-los, a menos que se crie um limpador e o programa oriente a cada usuário fazer a limpeza. Mas isso seria praticamente insignificante, pois os arquivos de configuração seriam pequenos e únicos para cada usuário, além do que não é comum um computador doméstico ter muitas contas de usuário. Isso é claro, vale apenas para os usuários que chegaram a abrir o programa, pelo menos uma vez.

O futuro deste programa

Sonhar nunca é demais, não é? Eis algumas coisas que eu gostaria de implementar ou ver no programa, e trabalho em cima disso ao longo dos tempos sempre que posso, para trazer cada vez mais benefícios aos usuários dele:

  • Auto-correção e verificação ortográfica. O componente SynEdit inclui um item para substituição automática de textos ao digitar, atualmente não usado neste programa, mas sinto falta de um corretor propriamente dito, que destaque as palavras, tenha um dicionário, etc.
  • Ambiente MDI com apenas o campo de edição no formulário do editor. Atualmente o formulário do editor carrega uma instância completa dos menus, componentes visuais, etc. da interface. O ideal seria que os menus, abas e etc. ficassem no formulário “pai”, sendo “fixos”, como ocorre na maioria dos programas MDI. Eu não apliquei isso pois muita coisa precisaria ser alterada. Ao portar a versão 3 do Mep Texto para a 5, basicamente transferi o “frmMepTexto” de formulário principal para secundário e do tipo “MDIChild”, criando um novo vazio (o “pai”) e deixando ele como principal. Manter apenas o editor e uns poucos componentes diretamente relacionados a ele no formulário do editor, economizaria diversos KBytes de memória, otimizando bastante o desempenho quando muitas abas estivessem abertas. Mas mesmo assim, por ser um programa leve, isso não atrapalha tanto. No entanto, estar com 3 abas abertas é diferente de estar com 3 janelas, é claro que da forma que está ele já consome menos memória. Só explicando aqui, pulei a versão 4, que foi fracassada, usando um componente de skins meio problemático. Ela também era SDI, como a 3, e não MDI (não permitia abrir vários arquivos na mesma janela).
  • Melhor suporte a unicode. Não tenho experiência com isso em termos de programação no Delphi, mas gostaria de colocar algo para escolher entre unicode e ASCII ao salvar. Alguns poucos problemas ocorrem, mas ainda bem que o SynEdit normalmente abre e lê corretamente arquivos gerados por programas no Linux – melhor que o Bloco de notas do Windows, para isso, onde normalmente ou funciona os acentos e os textos ficam grudados, sem quebras de linha, ou fica o contrário.
  • Suporte multilíngue! Pensei em aplicar uma vez mas novamente, devido o tempo e trabalho que isso me tomaria, deixei para depois. Não é por “preguiça”, mas daria muito trabalho mesmo, e para fazer um negócio às pressas ou mal feito, simplesmente prefiro não fazer :)*
  • E portá-lo para o Linux, senão diretamente, pelo menos tendo participação no desenvolvimento. Não é que eu divulgue ou faça propaganda do Mep Texto demais, é que ele é considerado por quem testa, realmente superior a editores como o KEdit ou GEdit. Ele perde no quesito corretor ortográfico, por exemplo, e na quantidade de linguagens suportadas na coloração de sintaxe, mas nas outras áreas se mostra muito mais prático e agradável. Quanto à quantidade de linguagens suportadas na coloração de sintaxe, é questão de tempo também, o SynEdit vem com vários componentes prontos, eu não apliquei para linguagens menos usadas para não deixar o editor mais pesado, e não tive reclamações de usuários querendo essas outras linguagens até o momento…

Boa sorte! E não se esqueça de me enviar as modificações se você fizer algo significante ou simplesmente interessante 🙂

Marcos Elias Picão é produtor do Explorando e Aprendendo (http://www.explorando.cjb.net), um blog de informática que traz toda semana dicas de Windows, programas, sites, configurações e otimizações, para todos os níveis.
Iniciou sua vida digital em 2001, e aos poucos foi evoluindo, para frente e para trás, avançando nas novidades do mercado e, ao mesmo tempo, voltando ao passado para conhecer as “Janelas” antigas, de vidro a vidro.
Mexe livremente com programação em Delphi, e mantém sites com dicas e tutoriais, além dos seus programas para Windows.


Sobre o Autor

Redes Sociais:

Deixe seu comentário

X