Acessar HELP do meu aplicativo
Galera, criei um help para minha aplicação em extensão *.chm e gostaria de acessá-la da minha aplicação através de um ítem do menu ou mesmo clicando em algum componente em tempo de execução do aplicativo e redirecionando para a palavra chave correspondente ao componente.
Como faço para acessar este help, tanto pelo menu, componente ou pressionando <F1> no teclado.
Obrigado!
Como faço para acessar este help, tanto pelo menu, componente ou pressionando <F1> no teclado.
Obrigado!
Alanhfs
Curtidas 0
Respostas
Alanhfs
25/09/2005
Sobe
Estou usando delphi 2005
alguém ?
Estou usando delphi 2005
alguém ?
GOSTEI 0
Emilio
25/09/2005
coloque o seguinte codigo em um botão ou menu:
Application.HelpFile:=´SeuHelp.hlp´;
Application.helpcomand(HELP_CONTENTS,0);
Application.HelpFile:=´SeuHelp.hlp´;
Application.helpcomand(HELP_CONTENTS,0);
GOSTEI 0
Massuda
25/09/2005
Pesquise aqui no fórum por CHM ou HTMLHELP.
GOSTEI 0
Asales
25/09/2005
Pesquisei aqui no forum e não achei nada que pudesse solucionar esta minha dúvida:
Tenho 2 arquivos de ajuda em CHM para o meu aplicativo e para o arquivo principal ´ajuda1.chm´ o funcionamento eh normal pois eh o helpfile do aplicativo.
O segundo arquivo de ajuda ´ajuda2.chm´ chamo através de um shellexecute.
Dúvidas:
1 - Tem como chamar cada arquivo separadamente utilizando comandos para arquivo de ajuda como HelpContext, HelpJump, etc.??
2 - Tem como verificar (no caso de utilizar ShellExecute) se o ´ajuda2.chm´ já está aberto para não executar duas instâncias (tentei utilizar FindWindow mas não funcionou).
Estou trabalhando no Delphi 2007 e Windows Vista.
Obrigado.
Tenho 2 arquivos de ajuda em CHM para o meu aplicativo e para o arquivo principal ´ajuda1.chm´ o funcionamento eh normal pois eh o helpfile do aplicativo.
O segundo arquivo de ajuda ´ajuda2.chm´ chamo através de um shellexecute.
Dúvidas:
1 - Tem como chamar cada arquivo separadamente utilizando comandos para arquivo de ajuda como HelpContext, HelpJump, etc.??
2 - Tem como verificar (no caso de utilizar ShellExecute) se o ´ajuda2.chm´ já está aberto para não executar duas instâncias (tentei utilizar FindWindow mas não funcionou).
Estou trabalhando no Delphi 2007 e Windows Vista.
Obrigado.
GOSTEI 0
Devmedia
25/09/2005
Olá asales.
Tudo bom amigo?
Segue as repostas.
[b:0cd52987c9]1.ª Dúvida:[/b:0cd52987c9]
[b:0cd52987c9]2.ª Dúvida:[/b:0cd52987c9]
Declare TLHelp32, PsAPI na Uses da sua Unit
Para verificar o arquivo:
[b:0cd52987c9]Atenção: [/b:0cd52987c9] ´winhlp32.exe´ ele é padrão para estes tipos de arquivos.
Agora, caso queira verificar se o arquivo existe, no diretório especificado, utilize o código abaixo. Segue:
Teste. Quarquer coisa. Volta um grito aqui.
Um abraço.
Att.
Tudo bom amigo?
Segue as repostas.
[b:0cd52987c9]1.ª Dúvida:[/b:0cd52987c9]
{Comando para carregar o arquivo no Sistema}
Application.HelpFile := ExtractFilePath(Application.ExeName) + ´AJUDA.HLP´;
{Comando para executar o arquivo}
Application.HelpContext(0);
[b:0cd52987c9]2.ª Dúvida:[/b:0cd52987c9]
Declare TLHelp32, PsAPI na Uses da sua Unit
Function VerficarExecutavel(Nome:String):Boolean; var rId:array[0..999] of DWord; i,NumProc,NumMod:DWord; HProc,HMod:THandle; sNome:String; Tamanho, Count:Integer; sNomeTratado:String; begin result:=False; SetLength(sNome, 256); // Aqui vc pega os IDs dos processos em execução EnumProcesses(@rId[0], 4000, NumProc); // Aqui vc faz um for p/ pegar cada processo for i := 0 to NumProc div 4 do begin // Aqui vc seleciona o processo HProc := OpenProcess(Process_Query_Information or Process_VM_Read, FALSE, rId[i]); if HProc = 0 then Continue; // Aqui vc pega os módulos do processo // Como vc só quer o nome do programa, então será sempre o primeiro EnumProcessModules(HProc, @HMod, 4, NumMod); // Aqui vc pega o nome do módulo; como é o primeiro, é o nome do programa GetModuleBaseName(HProc, HMod, @sNome[1], 256); sNomeTratado := trim(sNome); Tamanho:=Length(SnomeTratado); Count:=1; While Count <= Tamanho do begin if SnomeTratado[Count]= ´´ Then Break; count:=Count+1; end; sNomeTratado:=Copy(SnomeTratado,1,Count-1); if AnsiUpperCase(sNomeTratado)=AnsiUpperCase(Nome) Then Result:=True; // Aqui vc libera o handle do processo selecionado CloseHandle(HProc); end; end;
Para verificar o arquivo:
if VerficarExecutavel(´winhlp32.exe´) Then showmessage(´Esta Rodando´) else Showmessage(´Não esta Rodando´);
[b:0cd52987c9]Atenção: [/b:0cd52987c9] ´winhlp32.exe´ ele é padrão para estes tipos de arquivos.
Agora, caso queira verificar se o arquivo existe, no diretório especificado, utilize o código abaixo. Segue:
if not fileExists(ExtractFilePath(Application.ExeName) + ´AJUDA.HLP´) then
{aqui voce faz oque quiser}
Teste. Quarquer coisa. Volta um grito aqui.
Um abraço.
Att.
GOSTEI 0
Asales
25/09/2005
LucasFSS,
Obrigado pelas respostas.
Quanto a 1ª dúvida (que eh a que mais me interessa) não funcionou.
Mesmo informando o nome de outro arquivo de ajuda (ajuda2.chm) o programa continua abrindo o arquivo de ajuda padrão (ajuda1.chm).
Eu tenho 2 itens no menu Ajuda:
Exemplo:
- Chama Ajuda 1
com o comando ´Application.HelpContext(0)´ que abre o arquivo de ajuda principal da aplicação
e tenho outro item
- Chama Ajuda 2
com o comando:
ShellExecute(0,nil, PChar(extractFilePath( application.exeName )+ ´ajuda2.chm´) ,nil, nil, SW_SHOWNORMAL);
que abre o segundo arquivo de ajuda.
Só que gostaria de [u:b21b720566]chamar o segundo arquivo de ajuda através de comandos de Help [/u:b21b720566]e não está funcionando mesmo mudando o nome no comando Application.HelpFile.
Obrigado.
Obrigado pelas respostas.
Quanto a 1ª dúvida (que eh a que mais me interessa) não funcionou.
Mesmo informando o nome de outro arquivo de ajuda (ajuda2.chm) o programa continua abrindo o arquivo de ajuda padrão (ajuda1.chm).
Eu tenho 2 itens no menu Ajuda:
Exemplo:
- Chama Ajuda 1
com o comando ´Application.HelpContext(0)´ que abre o arquivo de ajuda principal da aplicação
e tenho outro item
- Chama Ajuda 2
com o comando:
ShellExecute(0,nil, PChar(extractFilePath( application.exeName )+ ´ajuda2.chm´) ,nil, nil, SW_SHOWNORMAL);
que abre o segundo arquivo de ajuda.
Só que gostaria de [u:b21b720566]chamar o segundo arquivo de ajuda através de comandos de Help [/u:b21b720566]e não está funcionando mesmo mudando o nome no comando Application.HelpFile.
Obrigado.
GOSTEI 0
Lucas_spohr
25/09/2005
olá!
no meu estágio, no computador padrão onde nós iríamos usar para apresentar nossos sistemas, estavam todos atalhos de todos os sistemas. Para cada atalho, nós teríamos q clicar com o botão direito e ir em Propriedades.
Só não estou lembrando, se é no Destino ou no Iniciar Em que eu devo: ou tirar as Aspas, ou colocar aspas.
Tente fazer este teste.
Abraço.
no meu estágio, no computador padrão onde nós iríamos usar para apresentar nossos sistemas, estavam todos atalhos de todos os sistemas. Para cada atalho, nós teríamos q clicar com o botão direito e ir em Propriedades.
Só não estou lembrando, se é no Destino ou no Iniciar Em que eu devo: ou tirar as Aspas, ou colocar aspas.
Tente fazer este teste.
Abraço.
GOSTEI 0
Asales
25/09/2005
Olá lucas_spohr,
Obrigado pela resposta mas mão entendi bem sua dica.
O problema não é chamar o arquivo de ajuda com atalhos externo; o problema é chamar um segundo arquivo de ajuda (além do arquivo de ajuda principal do aplicativo) de dentro do Delphi utilizando comandos como HelpCommand, etc.
Obrigado pela resposta mas mão entendi bem sua dica.
O problema não é chamar o arquivo de ajuda com atalhos externo; o problema é chamar um segundo arquivo de ajuda (além do arquivo de ajuda principal do aplicativo) de dentro do Delphi utilizando comandos como HelpCommand, etc.
GOSTEI 0
Lucas_spohr
25/09/2005
aah tah... desculpa então...
achei q fosse apenas UM Help e que, ao invés de abrir o Help de sua aplicação, abria um Help de um outro sistema.
Desculpa...
achei q fosse apenas UM Help e que, ao invés de abrir o Help de sua aplicação, abria um Help de um outro sistema.
Desculpa...
GOSTEI 0
Asales
25/09/2005
Sobe!
GOSTEI 0
Renato_pinho
25/09/2005
Sobe!
Cria uma variavel auxiliar inteira e coloca 1 se o help for chamado ou 0 caso contrário e antes de chamar o help peça para conferir essa variavel auxiliar! :wink:
GOSTEI 0
Asales
25/09/2005
Renato,
não entendi sua dica.
Minha dúvida é chamar 2 arquivos de ajuda diferentes - acessando o tópico específico - utilizando o mesmo aplicativo.
Exemplo - tenho 2 arquivos de ajuda:
[b:c75e3016e7]help-1.chm[/b:c75e3016e7] e
[b:c75e3016e7]help-2222.chm[/b:c75e3016e7]
O arquivo [b:c75e3016e7]help-1.chm[/b:c75e3016e7] é o [u:c75e3016e7]padrão do aplicativo[/u:c75e3016e7]. Para mim acessar o tópico 10 dele utilizo a chamada:
Application.HelpContext(10);
O problema é como faço para chamar o tópico 5 do arquivo [b:c75e3016e7]help-2222.chm[/b:c75e3016e7] que não é o help padrão do aplicativo?
não entendi sua dica.
Minha dúvida é chamar 2 arquivos de ajuda diferentes - acessando o tópico específico - utilizando o mesmo aplicativo.
Exemplo - tenho 2 arquivos de ajuda:
[b:c75e3016e7]help-1.chm[/b:c75e3016e7] e
[b:c75e3016e7]help-2222.chm[/b:c75e3016e7]
O arquivo [b:c75e3016e7]help-1.chm[/b:c75e3016e7] é o [u:c75e3016e7]padrão do aplicativo[/u:c75e3016e7]. Para mim acessar o tópico 10 dele utilizo a chamada:
Application.HelpContext(10);
O problema é como faço para chamar o tópico 5 do arquivo [b:c75e3016e7]help-2222.chm[/b:c75e3016e7] que não é o help padrão do aplicativo?
GOSTEI 0
Renato_pinho
25/09/2005
Renato,
não entendi sua dica.
Minha dúvida é chamar 2 arquivos de ajuda diferentes - acessando o tópico específico - utilizando o mesmo aplicativo.
Exemplo - tenho 2 arquivos de ajuda:
[b:40b1d929df]help-1.chm[/b:40b1d929df] e
[b:40b1d929df]help-2222.chm[/b:40b1d929df]
O arquivo [b:40b1d929df]help-1.chm[/b:40b1d929df] é o [u:40b1d929df]padrão do aplicativo[/u:40b1d929df]. Para mim acessar o tópico 10 dele utilizo a chamada:
Application.HelpContext(10);
O problema é como faço para chamar o tópico 5 do arquivo [b:40b1d929df]help-2222.chm[/b:40b1d929df] que não é o help padrão do aplicativo?
Ao invés de usar Apllication.HelpContext(10) eu estou usando o seguinte comando:
[b:40b1d929df]HtmlHelp(frm_ajuda.Handle, ´C:\te_tmphhp\te.chm´, HH_HELP_CONTEXT,10);[/b:40b1d929df]
Talvez possa fazer isso mas antes tem que dar o load do arquivo de ajuda!
Espero ter te ajudado! :wink:
GOSTEI 0
Asales
25/09/2005
Renato,
ainda não está funcionando para o que eu preciso (abrir um outro arquivo de ajuda que não seja o principal da aplicação).
Como dou o ´load´ no arquivo de ajuda?
ainda não está funcionando para o que eu preciso (abrir um outro arquivo de ajuda que não seja o principal da aplicação).
Como dou o ´load´ no arquivo de ajuda?
GOSTEI 0