Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Qrp - Associar


Eder

Pergunta

Ola....

eu uso um aplicativo de terceiro pra visualizar arquivos QRP.

Ele funciona perfeitamente, mas ele quando é instalado não associa a extensão QRP a ele....e ai quando o usuario click em cima de um arquivo QRP não abre.....

Neste caso teria que associar na mão.

Teria algum codigo aonde eu pudesse associar, tipo o usuario clicaria em um botão e o botão associaria os *.qrp a este aplicativo?

Grato

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Ola..JOnas...dei uma analizada no linck que você me passou..mas como deu um erro...ai desisti..

procurando na net achei esta dica:

procedure TForm1.XiButton1Click(Sender: TObject);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.LazyWrite := false;
{ Define o nome interno (ArquivoQRP) e uma legenda que
aparecerá no Windows Explorer (Arquivos QRP) }
Reg.OpenKey('ArquivoQRP', true);
Reg.WriteString('', 'Arquivos QRP');
Reg.CloseKey;
{ Define o comando a ser executado quando abrir um arquivo
            pelo Windows Explorer (NomeDoExe %1). O símbolo %1 indica
            que o arquivo a ser aberto será passado como primeiro
            parâmetro para o aplicativo - ParamStr(1). }
Reg.OpenKey('ArquivoQRP\shell\open\command', true);
Reg.WriteString('', ParamStr(0) + ' %1'); { NomedoExe %1 }
Reg.CloseKey;
{ Define o ícone a ser usado no Windows Explorer:
0 - primeiro ícone do EXE
1 - segundo ícone do EXE, etc }
Reg.OpenKey('ArquivoQRP\DefaultIcon', true);
Reg.WriteString('', ParamStr(0) + ',0'); { 0 = primeiro ícone }
Reg.CloseKey;
{ Define as extensões de arquivos que serão abertos pelo
            meu aplicativo }
{ *.qrp }
Reg.OpenKey('.qrp', true);
Reg.WriteString('', 'ArquivoQRP');
Reg.CloseKey;
{{ *.dan }
{Reg.OpenKey('.dan', true);
Reg.WriteString('', 'ArquivoQRP');
Reg.CloseKey; }
finally
Reg.Free;
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
{ Se o primeiro parâmetro for um nome de arquivo
            existente... }
if FileExists(ParamStr(1)) then
{ Carrega o conteúdo do arquivo no memo }
Memo1.Lines.LoadFromFile(ParamStr(1));
end;

Porem pelo que entendi no exemplo que montei ele monta a associação do arquivo em cima do proprio aplicativo..ou seja, vamos supor que este aplicativo se chama TESTE ....então eu associei o *.qrp ao aplicativo TESTE.

Beleza..funcionou certinho...

porem como eu to usando um aplicativo de terceiro e ai eu não tenho acesso ao fonte e consequentemente não posso utilizar este codigo...

eu precisaria de algo tipo assim num botão:

arquivo *.qrp aberto pelo programa c:\teste\teste.exe

compreendeu??

Grato

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

OBS: com relação ao post anterior, deu erro para voce porque voce não colocou os uses necessarios

uses shlobj, registry;

vai um outro exemplo

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function Executa (Arquivo : String; Estado : Integer) : Integer;
var
   Programa : array [0..512] of char;
   CurDir : array [0..255] of char;
   WorkDir : String;
   StartupInfo : TStartupInfo;
   ProcessInfo : TProcessInformation;
begin
   StrPCopy (Programa, Arquivo);
   GetDir (0, WorkDir);
   StrPCopy (CurDir, WorkDir);
   FillChar (StartupInfo, Sizeof (StartupInfo), #0);
   StartupInfo.cb := sizeof (StartupInfo);
   StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
   StartupInfo.wShowWindow := Estado;
   if not CreateProcess (nil, Programa, nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
   Result := -1
else
   begin
      WaitForSingleObject (ProcessInfo.hProcess, Infinite);
      //GetExitCodeProcess (ProcessInfo.hProcess, Result);
   end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
   // associar o executavel AbrirQRP.exe ao arquiv.QRP
   Executa (pchar('D:\Prj\AbrirQRP>AbrirQRP.exe C:\Temp\Arquivo.QRP') ,sw_hide);
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jonas.....Beleza??

Bdia...

Carinha...testei...realmente funcionou...mas não era exatamente o que imaginava....

neste caso a manipulação é feito no delphi, no aplicativo, em cima do aplicativo.

vou explicar desta forma....

vamos supor que você abra o seu windows explorer...e la encontre arquivos com extensão *.qrp

e estes arquivos você sabe pela cor dos icones que estes arquivos não estão associados no windows....

ai o que você faz?? você clicka com o lado direito do mouse em cima de um deles e faz a associação no braço......pois é....eu só queria fazer este pequeno processo num simples click....ou no Onshow de um aplicativo algo parecido...mas sem intervensão do usuario...ele nem iria perceber tal associação..e quando fecharia o aplicativo delphi..esta associação ficaria pronta pra qualquer operação.

eu só queria fazer automatizada sem ter que o usuario fazer a associação.

se o aplicativo que lê qrp´s fosse meu(com codigos fontes) ai eu faria este processo que você me explicou..e aquele que achei na net...mas como não é meu tenho que fazer desta maneira.

talvez esta função que você me passou tenha alguma coisa parecida......

o que você acha??

Abraços...t+ :) ;)

Grato

Link para o comentário
Compartilhar em outros sites

  • 0

Eder, o link que o Jhonas lhe passou inicialmente contém o código que você precisa implementar para o que você deseja - está mais ao final do artigo (Automatizando a tarefa com o Delphi).

Vou postá-lo aqui (ref. Associando extensão de arquivo à uma aplicação Delphi):

procedure RegistrarExtensao(const Extensao, TipoArquivo, NomeAplicacao, Executavel: string);
var
  ChaveArquivo: string;
  Registro: TRegistry;

  procedure EditarChave(const Chave, Valor: string);
  begin
    Registro.OpenKey(Chave, True);
    Registro.WriteString('', Valor);
    Registro.CloseKey;
  end;

begin
  Registro := TRegistry.Create;
  try
    Registro.RootKey := HKEY_CLASSES_ROOT;
    Registro.LazyWrite := False;
    ChaveArquivo := ‘Arquivo’ + Extensao;

    //Registra a extensão
    EditarChave(’.’ + Extensao, ChaveArquivo);

    //Define a descrição para o tipo de arquivo
    EditarChave(Format(’%s’, [ChaveArquivo]), TipoArquivo);

    //Adiciona uma entrada no menu de contexto
    EditarChave(Format(’%s\shell\open’, [ChaveArquivo]), Format(’&Abrir com %s’, [NomeAplicacao]));

    //Associa a extensão à aplicação
    EditarChave(Format(’%s\shell\open\command’, [ChaveArquivo]), Format(’”%s” “%s”‘, [Executavel, ‘%1′]));

    //Define o ícone associado ao tipo de arquivo
    EditarChave(Format(’%s\DefaultIcon’, [ChaveArquivo]), Format(’%s, 0′, [Executavel]));
  finally
    Registro.Free;
  end;
  //Notifica o SO da alteração na associação do tipo de arquivo
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;

procedure RegistrarExtensaoQRP;
begin
  RegistrarExtensao(’QRP’, ‘Arquivo de visualização de relatório’, ‘AbrirQRP’, ParamStr(0));
end;

procedure TfrmPrincipal.FormCreate(Sender: TObject);
begin
  RegistrarExtensaoQRP;
end;
Na prática, você vai precisar da procedure RegistrarExtensao apenas, e no seu form você utilizará o comando: RegistrarExtensao('QRP', 'Arquivo de visualização de relatório', 'AbrirQRP', <path e nome do programa de terceiro>); Abraços Eder, o link que o Jhonas lhe passou inicialmente contém o código que você precisa implementar para o que você deseja - está mais ao final do artigo (Automatizando a tarefa com o Delphi). Vou postá-lo aqui (ref. Associando extensão de arquivo à uma aplicação Delphi):
procedure RegistrarExtensao(const Extensao, TipoArquivo, NomeAplicacao, Executavel: string);
var
  ChaveArquivo: string;
  Registro: TRegistry;

  procedure EditarChave(const Chave, Valor: string);
  begin
    Registro.OpenKey(Chave, True);
    Registro.WriteString('', Valor);
    Registro.CloseKey;
  end;

begin
  Registro := TRegistry.Create;
  try
    Registro.RootKey := HKEY_CLASSES_ROOT;
    Registro.LazyWrite := False;
    ChaveArquivo := ‘Arquivo’ + Extensao;

    //Registra a extensão
    EditarChave(’.’ + Extensao, ChaveArquivo);

    //Define a descrição para o tipo de arquivo
    EditarChave(Format(’%s’, [ChaveArquivo]), TipoArquivo);

    //Adiciona uma entrada no menu de contexto
    EditarChave(Format(’%s\shell\open’, [ChaveArquivo]), Format(’&Abrir com %s’, [NomeAplicacao]));

    //Associa a extensão à aplicação
    EditarChave(Format(’%s\shell\open\command’, [ChaveArquivo]), Format(’”%s” “%s”‘, [Executavel, ‘%1′]));

    //Define o ícone associado ao tipo de arquivo
    EditarChave(Format(’%s\DefaultIcon’, [ChaveArquivo]), Format(’%s, 0′, [Executavel]));
  finally
    Registro.Free;
  end;
  //Notifica o SO da alteração na associação do tipo de arquivo
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;

procedure RegistrarExtensaoQRP;
begin
  RegistrarExtensao(’QRP’, ‘Arquivo de visualização de relatório’, ‘AbrirQRP’, ParamStr(0));
end;

procedure TfrmPrincipal.FormCreate(Sender: TObject);
begin
  RegistrarExtensaoQRP;
end;

Na prática, você vai precisar da procedure RegistrarExtensao apenas, e no seu form você utilizará o comando:

RegistrarExtensao('QRP', 'Arquivo de visualização de relatório', 'AbrirQRP', <path e nome do programa de terceiro>);

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Oba...Micheus....beleza?

Eder, o link que o Jhonas lhe passou inicialmente contém o código que você precisa implementar para o que você deseja - está mais ao final do artigo (Automatizando a tarefa com o Delphi).

R. : perdão faltou atenção

carinha eu coloquei assim na procedure...acredito que só aqui que muda.

procedure RegistrarExtensaoQRP;
begin
RegistrarExtensao('QRP', 'Arquivo de visualização de relatório', 'programa', 'C:\pasta\programa.exe');
end;

ai testei.....mas não funcionou ...o icone dos qrp até mudou....ficou certtinho com icone do programa a ser usado..porem quando clicko nele...abre um outro programa....

Será porque eu já tinha associado na mão pra outro programa(testando) e agora ele não altera...e sim só inclui??porque o ícone ele mudou certinho..

valeu...grato

Link para o comentário
Compartilhar em outros sites

  • 0
ai testei.....mas não funcionou ...o icone dos qrp até mudou....ficou certtinho com icone do programa a ser usado..porem quando clicko nele...abre um outro programa....

Será porque eu já tinha associado na mão pra outro programa(testando) e agora ele não altera...e sim só inclui??porque o ícone ele mudou certinho..

Bom, eu implementei o código aqui (eu utilizei o Bloco de Notas como programa) e observei o seguinte:

- O registro da extensão só é realizado quando executado o programa pela conta do Administrador. Como usuário "normal", há erro na criação da chave (já na primeira chamada à EditarChave);

- Uma vez executado o programa, o registro foi feito corretamente: aparecem em HKEY_CLASSES_ROOT as chaves ".QRP" e "ArquivoQRP" (devidamente configurado);

- Já ao visualizar o arquivo no Windows Explorer, o ícone não se alterou. Entretanto, no menu de contexto (clicar o botão direito sobre nome do arquivo) aparece como default a opção "Abrir com Bloco de Notas" (conforme configurado) bem como ao dar um duplo-click o arquivo é aberto com o bloco de notas.

Assim, acho que possivelmente você já teria mesmo associado a extensão para teste, porém por não executar o programa como Administrador (login do Windows) as alterações no registro não foram feitas. É só uma hipótese, mas que você pode verificar olhando o arquivo de registros e procurando pelas duas chaves que deveriam ter sido criadas.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...