Prezados,
Estou passando pela seguinte situação:
No sistema que estou dando manutenção existe uma rotina para fazer a criação de formulários personalizados onde o usuário pode escrever textos e colocar os campos que deseja que sejam impressos, semelhante a Mala Direta do Word.
A escolha dos campos é feita ao pressionar uma tecla (F2) que apresenta uma lista de campos disponíveis e ao escolher o campo é preenchido no memoedit o código referente a este campo. Esta função sempre funcionou e começou a apresentar erro depois que passei a utilizar o xHarbour 1.0, testei com versões mais recentes mas com este sistema ele ocupa quase 50% do tempo do processado, isto estando parado sem processar nada.
O problema ocorre pois na função passada ao Memoedit, quando o usuário escolhe o campo, o seu código é armazenado em uma variável local e depois de um processamento é utilizado a função Keyboard para colocar o código do campo no MemoEdit no local onde o cursor esta. Depois de passar para o xHarbour 1.0 é apresentado apenas o primeiro caracter do código.
Pelo que pode analisar, colocando alertas, antes de chamar a função Keyboard(variavel), a variável que armazena o campo esta com o valor correto, na linha abaixo da chamada do Keyboard(variavel) a variável já não possui mais o valor. Observei que ao chamar o Keyboard a função definida no Memoedit é chamada novamente, o que causa a perda do conteúdo da variável, e o primeiro caracter é retornado pois ele fica armazenado na Lastkey().
Alguém já passou por algo parecido ou teria alguma ideia, que não seja migrar para o Harbour ou uma versão mais recente do xHarbour ?
Agradeço a atenção de todos!
Buffer do teclado é limpo no Memoedit()
Moderador: Moderadores
-
chrissoares
- Usuário Nível 1

- Mensagens: 45
- Registrado em: 23 Dez 2009 14:35
- Localização: Belo Horizonte/MG
- Contato:
Buffer do teclado é limpo no Memoedit()
Christiano R. Soares
Analista Desenvolvedor
www.bhdados.com.br
'Tudo o que fizerem, façam de todo o coração, como para o Senhor, e não para os homens, sabendo que receberão do Senhor a recompensa da herança. É a Cristo, o Senhor, que vocês estão servindo. '
Colossenses 3:23-24
Analista Desenvolvedor
www.bhdados.com.br
'Tudo o que fizerem, façam de todo o coração, como para o Senhor, e não para os homens, sabendo que receberão do Senhor a recompensa da herança. É a Cristo, o Senhor, que vocês estão servindo. '
Colossenses 3:23-24
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Buffer do teclado é limpo no Memoedit()
Olá Chrissoares,
Nã passei por isso, mas lendo seu post, e considerando que o primeiro caracter chega no MemoEdit, acredito que o buffer não está sendo limpo.
Se vc teve sucesso com versões mais recentes, será que no caso do xHarbour 1.0 não é necessário aumentar ou definir o buffer do teclado?
Você tentou usar:
Nã passei por isso, mas lendo seu post, e considerando que o primeiro caracter chega no MemoEdit, acredito que o buffer não está sendo limpo.
Se vc teve sucesso com versões mais recentes, será que no caso do xHarbour 1.0 não é necessário aumentar ou definir o buffer do teclado?
Você tentou usar:
Código: Selecionar todos
SET TYPEAHEAD TO <nTamnho> // Onde nTamanho pode ser qualquer número entre 0 e 4096.Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
chrissoares
- Usuário Nível 1

- Mensagens: 45
- Registrado em: 23 Dez 2009 14:35
- Localização: Belo Horizonte/MG
- Contato:
Buffer do teclado é limpo no Memoedit()
Obrigado Jairo pela resposta.
Na verdade eu verifiquei o tamanho do Buffer no momento que é chamado o Keyboard, ele esta com o tamanho de 50 neste momento.
Fiz a alteração e coloquei antes da chamada do MemoEdit definindo o tamanho do Buffer para 100, mesmo assim não deu certo.
Um detalhe que esqueci de mencionar é que existe um Case dentro da função passada ao MemoEdit. Neste Case eu verifico o seguinte:
Quando é um ME_INIT, Ligo o Insert e seto o Cursor.
Quando é ME_IDLE, não faço nada, apenas retorno da função.
Quando é ME_UNKEY ou ME_UNKEYX, verifico se a tecla pressionada não foi F2 (ou alguma outra com função definida), caso seja F2, é apresentado a lista com os campos para o usuário escolher, depois que ele escolhe, o código do campo é armazenado na variável e depois é chamado o Keyboard.
Obrigado mais uma vez, vou continuar pesquisando e testando combinações diferentes.
Abraços!
Na verdade eu verifiquei o tamanho do Buffer no momento que é chamado o Keyboard, ele esta com o tamanho de 50 neste momento.
Fiz a alteração e coloquei antes da chamada do MemoEdit definindo o tamanho do Buffer para 100, mesmo assim não deu certo.
Um detalhe que esqueci de mencionar é que existe um Case dentro da função passada ao MemoEdit. Neste Case eu verifico o seguinte:
Quando é um ME_INIT, Ligo o Insert e seto o Cursor.
Quando é ME_IDLE, não faço nada, apenas retorno da função.
Quando é ME_UNKEY ou ME_UNKEYX, verifico se a tecla pressionada não foi F2 (ou alguma outra com função definida), caso seja F2, é apresentado a lista com os campos para o usuário escolher, depois que ele escolhe, o código do campo é armazenado na variável e depois é chamado o Keyboard.
Obrigado mais uma vez, vou continuar pesquisando e testando combinações diferentes.
Abraços!
Christiano R. Soares
Analista Desenvolvedor
www.bhdados.com.br
'Tudo o que fizerem, façam de todo o coração, como para o Senhor, e não para os homens, sabendo que receberão do Senhor a recompensa da herança. É a Cristo, o Senhor, que vocês estão servindo. '
Colossenses 3:23-24
Analista Desenvolvedor
www.bhdados.com.br
'Tudo o que fizerem, façam de todo o coração, como para o Senhor, e não para os homens, sabendo que receberão do Senhor a recompensa da herança. É a Cristo, o Senhor, que vocês estão servindo. '
Colossenses 3:23-24
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Buffer do teclado é limpo no Memoedit()
Olá!
Não tive tempo de olhar melhor o caso mas, você está jogando o conteúdo da variável de uma só vez no buffer do teclado?
Acho que teria que fazer um loop:
Não tive tempo de olhar melhor o caso mas, você está jogando o conteúdo da variável de uma só vez no buffer do teclado?
Acho que teria que fazer um loop:
Código: Selecionar todos
Local cVar, cChar
For Each cChar in cVar
KEYBOARD Chr( Asc( cChar ) )
Next[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
chrissoares
- Usuário Nível 1

- Mensagens: 45
- Registrado em: 23 Dez 2009 14:35
- Localização: Belo Horizonte/MG
- Contato:
Buffer do teclado é limpo no Memoedit()
Obrigado pela ajuda Alex, mas ainda não foi a solução para o problema.
Eu acredito que o problema esteja no caso que ao entrar na função passada para o MemoEdit, o primeiro parametro da função (Modo), recebe o modo ME_UNKEY e ME_UNKEYX. Vou tentar cercar pois estes modos indicam se altera ou não o Buffer.
Obrigado mais uma vez!
Abraços!
Eu acredito que o problema esteja no caso que ao entrar na função passada para o MemoEdit, o primeiro parametro da função (Modo), recebe o modo ME_UNKEY e ME_UNKEYX. Vou tentar cercar pois estes modos indicam se altera ou não o Buffer.
Obrigado mais uma vez!
Abraços!
Christiano R. Soares
Analista Desenvolvedor
www.bhdados.com.br
'Tudo o que fizerem, façam de todo o coração, como para o Senhor, e não para os homens, sabendo que receberão do Senhor a recompensa da herança. É a Cristo, o Senhor, que vocês estão servindo. '
Colossenses 3:23-24
Analista Desenvolvedor
www.bhdados.com.br
'Tudo o que fizerem, façam de todo o coração, como para o Senhor, e não para os homens, sabendo que receberão do Senhor a recompensa da herança. É a Cristo, o Senhor, que vocês estão servindo. '
Colossenses 3:23-24