GARANTIR DESCONTO

Fórum Acessar HELP do meu aplicativo #296932

25/09/2005

0

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!


Alanhfs

Alanhfs

Responder

Posts

28/09/2005

Alanhfs

Sobe

Estou usando delphi 2005

alguém ?


Responder

Gostei + 0

28/09/2005

Emilio

coloque o seguinte codigo em um botão ou menu:

Application.HelpFile:=´SeuHelp.hlp´;
Application.helpcomand(HELP_CONTENTS,0);


Responder

Gostei + 0

28/09/2005

Massuda

Pesquise aqui no fórum por CHM ou HTMLHELP.


Responder

Gostei + 0

06/01/2008

Asales

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.


Responder

Gostei + 0

06/01/2008

Devmedia

Olá asales.
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.


Responder

Gostei + 0

07/01/2008

Asales

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.


Responder

Gostei + 0

08/01/2008

Lucas_spohr

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.


Responder

Gostei + 0

08/01/2008

Asales

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.


Responder

Gostei + 0

08/01/2008

Lucas_spohr

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...


Responder

Gostei + 0

12/01/2008

Asales

Sobe!


Responder

Gostei + 0

11/03/2008

Renato_pinho

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:


Responder

Gostei + 0

11/03/2008

Asales

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?


Responder

Gostei + 0

11/03/2008

Renato_pinho

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:


Responder

Gostei + 0

17/03/2008

Asales

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?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar