Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 11 de Julho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
214 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Associando uma extensão ao seu aplicativo
Publicado por tonyy : Sexta, Fevereiro 01, 2008 - 09:05 GMT-3 (1147 leituras)
Comentários 1 Comentário   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Olá amigos delphianos, este é o meu primeiro tutorial de delphi e ensinarei como associar uma determinada extensão ao seu aplicativo. Faremos isto usando o Delphi e o InnoSetup.

Primeiramente pelo Delphi.

Vamos às partes:

1ª - Uses

Inclua as seguintes units na cláusula Uses do seu Form:

Registry: Unit que manipulará o registro do windows (onde estão as extensões, icones e aplicativos associados)
ShlObj: Unit que manipulará a shell do windows (nesse caso somente "dirá" ao windows que foram feitas modificações na associação de extensão)

2ª - A procedure

Declare uma procedure chamada "Associa" (ou outro nome que você quiser) na cláusula públic do seu form. Com o cursor de texto ao final da procedure, aperte Ctrl+Shift+C para que seja criada automaticamente o bloco da procedure Associa.

3ª - As variáveis

Dentro da procedure Associa, declare as variáveis:

procedure TForm1.associa;
Var
  reg : TRegistry; // variável que sera usada para manipular o registro do windows.
  ext : string; // extensão do seu aplicativo.
  extipo : string; // tipo de extensão do seu aplicativo.
  extdesc : string; // descrição da extensão do seu aplicativo.
begin

end
;

4ª - O código

Agora, dentro do bloco da procedure Associa, coloque o seguinte código:

procedure TForm1.associa;
Var
  reg : TRegistry; // variável que sera usada para manipular o registro do windows.
  ext : string; // extensão do seu aplicativo.
  extipo : string; // tipo de extensão do seu aplicativo.
  extdesc : string; // descrição da extensão do seu aplicativo.
begin
  try
    //troque "extensao" pela extensao do seu aplicativo
    ext := '.extensao';
    //aqui coloque o tipo da extensao do seu aplicativo
    extipo := 'tipoextensao';
    //aqui coloque a descrição da extensão do seu aplicativo
    extdesc := 'Extensao do meu aplicativo';
    //cria a variável que manipulará o registro do windows
    reg := TRegistry.Create;
    with reg do
    begin

      //chave que será editada
      RootKey := HKEY_CLASSES_ROOT;

      {cria a chave da extensão}
      //cria a chave com a extensão do seu aplicativo

      OpenKey(ext, true);
      //define o tipo da extensao do seu aplicativo
      WriteString('', extipo);
      //fecha a chave
      CloseKey;

      {cria os parametros da extensão}
      {ícone do arquivo}
      //chave onde é definido o ícone do seu arquivo

      OpenKey(Extipo + '\DefaultIcon', True);
      //aqui coloque o caminho completo de onde está o icone do seu arquivo ou
      //o caminho de uma biblioteca com icones (exemplos de como colocar
      //bibliotecas mais abaixo)

      WriteString('', 'caminho ou biblioteca de icones');
      //fecha a chave
      CloseKey;

      {//chave onde é definida opções do menu de contexto
      OpenKey(extipo + '\shell\Open',True);
      //texto que aparecerá no lugar de "abrir" no menu de contexto
      WriteString('','texto');
      CloseKey;}


      {Programa associado}
      //chave onde é definida o caminho do seu aplicativo

      OpenKey(extipo + '\shell\Open\Command', True);
      //o %1 é o parâmetro que é passado ao aplicativo quando se abre o arquivo
      //pelo explorer. esse parâmetro é o nome do arquivo que foi aberto.

      WriteString('', Application.ExeName + ' "%1"');
      //fecha a chave
      CloseKey;
    end;
  finally
    //notifica ao windows a mudança de associação de aplicativo à extensão
    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
    //destrói a variável de manipulação do registro do windows
    reg.free;
  end;
end;

6ª - Anexo

Aqui vão exemplos de como usar bibliotecas de ícones quando for associar um ícone ao arquivo do seu aplicativo.

  //método normal
  WriteString('', 'C:\meu programa\icone.ico');

  //usando icones dentro do seu aplicativo (o número é o índice do ícone,
  //sendo que um programa pode ter vários índices de ícones)

  WriteString('', Application.ExeName + ',0');

  //mesmo método acima, com a diferença que é usado bibliotecas do tipo DLL
  WriteString('', 'C:\meu programa\icones.dll,-123');

Agora vai de cada um criar ou usar um método para associar um ícone ao seu aplicativo. Obs: use uma dessas linhas de código quando for definir o ícone na chave DefaultIcon.

Registrando o tipo de arquivo pelo instalador da aplicação

Como vimos, para associar uma extensão a um programa é necessário criar as respectivas chaves no registro do Windows. Isto é possível ser feito também durante a instalação da aplicação. Abaixo veremos um exemplo de script de como realizar essa tarefa utilizando o gerador de instaladores InnoSetp, ferramenta muito utilizada por desenvolvedores de software em todo o planeta:

[Registry]
Root: HKCR; Subkey: .QRP; ValueType: string; ValueData: ArquivoQRP; Flags: uninsdeletekey
Root: HKCR; Subkey: ArquivoQRP; ValueType: string; ValueData: Arquivo de visualização de relatório; Flags: uninsdeletekey
Root: HKCR; Subkey: ArquivoQRP\shell\open; ValueType: string; ValueData: &Abrir com AbrirQRP; Flags: uninsdeletevalue
Root: HKCR; Subkey: ArquivoQRP\shell\open\command; ValueType: string; ValueData: {app}\AbrirQRP.exe %1; Flags: uninsdeletevalue
Root: HKCR; Subkey: ArquivoQRP\DefaultIcon; ValueType: none; Flags: uninsdeletevalue

Bom galera, obrigado pela atenção e espero que esse artigo tenha ajudado a tantas pessoas assim como me ajudou.

Qualquer dúvida, podem mandar e-mails para racdevc@msn.com que as responderei.

Abraços!

Contato: racdevc@msn.com



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: ppmendes (paulo_ufrpe@yahoo.com.br) : Set 18, 2016 - 07:44
(Informações sobre o membro | Enviar uma mensagem)
Estou tentando há dias e não consigo associar a extensão e o ícone de um programa no Windows. Trabalhamos com o Delphi 10.1 e Windows 8. Mas, já tentamos também no Delphi 7 e W. home basic. Utilizamos a rotina que existe na internet (ver abaixo), para essa finalidade. Acreditamos que deva ser um problema de permissão, para alterar HKEY_CLASSES_ROOT, pois ao usar esse mesmo código em (HKEY_CURRENT_USER), não tenho problema, na compilação. Ao usar HKEY_CLASSES_ROOT, eu não consigo passar da linha (Reg.WriteString('','Nome programa')), pois aparece (Failed to set data for ''). Tentamos outro caminho e usamos arquivo.reg. Funcionou maravilha. Mas, o usuário tem que pressionar um botão do regedit.exe, para permitir (não ficou legal). Alguém pode dar uma ajudinha, para resolver o problema.


procedure TForm1.BitBtn1Click(Sender: TObject);
Var
Reg: TRegistry;
Begin
Reg:= TRegistry.Create;
Try
Reg.RootKey:= HKEY_CLASSES_ROOT;
Reg.LazyWrite:= false; //testei sem com
reg.Access := KEY_ALL_ACCESS; //testei sem e com (outros)
Reg.OpenKey('.spro',true);
Reg.WriteString('','N_programa'); (compila até aqui e pula para Reg.free com a mensagem de fracasso)
Reg.CloseKey;
EXISTEM OUTRAS LINHAS
finally
Reg.Free;
end;

  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados