|
Postada em 13/11/2004 22:40 hs
Tudo bem, pessoal?
AgorA, é outros erros esquisitos, vejam o código abaixo (copiam e testam, pois é loucura, loucura, loucura): *** Function Cliq_Tecla(index) If (Chr(index) Like "[0-9]") Then ' MsgBox index ElseIf (index = 43 Or index = 45) Then End If Txtdig = Txtdig & Chr$(index) End Function
Private Sub Optdig_Click(index As Integer) Cliq_Tecla (index) End Sub *** As propriedades dos Options são padrões, menos “ Style: 1 Graphical “, e as “ Index “. Estes index tem valores entre 48 e 57, ou seja, eu coloquei valores da tabela ASCII que representa de 0 à 9. A linha “If (Chr(index) Like "[0-9]") Then “ é a mesma coisa que “ If index >= 48 And index <= 57 Then “. Aparentemente, o código parece normal, mas...Quando se clica em um dos Options (acontecem com todos), ele exibe em txtdig 2 vezes, mas era para exibir 1 vez, só. Quando, eu analiso linha após linha (com a tecla: <F8>), o problema não ocorre. E também, não ocorre quando eu habilito a linha “MsgBox index “, mas quando desabilito este problema permanece. Que programa misterioso? Que código Maluco?
Valeu.
|
|
|
|
|
Postada em 14/11/2004 00:53 hs
Não entendi, esse erro não aconteceu comigo, mas já vi coisas estranhas acontecerem com options e combos. Se você tiver códigos que manipulem os estados dos options em eventos como MouseUp e MouseDown, por exemplo, ou ainda outro form varrendo os estados das options, acontece a reentrância de eventos, ou seja, o evento é disparado duas ou mais vezes. Você pode tentar resolver isso com o uso do comando DoEvents, que dá uma pausa na execução do código para que o Windows trate as mensagens entre processos. Ah! outra coisa, você não está usando subclassificação de janelas não, está? Subclassificação é um recurso usando a API do Windows para desviar as mensagens de eventos do Windows para uma procedure específica do form. Acontece que este recurso tem grande possibilidade de atrapalhar o fluxo de mensagens entre controles, principalmente em vetores de controles. Tente o Doevents, se não resolver, mande outra mensagem. Um abraço, Sandro.
|
|
|
léee
|
OURINHOS SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 14/11/2004 14:14 hs
Aonde exatamente coloco este comando? RAtificando, não estou usando API.
Vou fazer o teste aqui. Se precisar de + informaçoes sobre o codigo é só escrever.
|
|
|
|
Postada em 14/11/2004 14:22 hs
Olha, Sandro coloquei dentro da function e/ou do evento Click, e nao dei certo. Vou colocar mais detalhes pode ajudar, e tb todos me ajudar:
Vou explicar melhor, no formulario tem varios OptionButton com a propriedade "Style = Graphical ", e de mesmo nome(Optdig), mas com a propriedade " Index " diferente indo de 48 à 57 (para representar numeros na Tabela ASCII). Este codigo abaixo é o evento Click de qdo se clica no OptionButton, e já chama a funçao " (Cliq_Tecla (index)) " levando consigo o valor de Index do Optdig.
Private Sub Optdig_Click(index As Integer) Cliq_Tecla (index) End Sub
Está Funcao tem que exibir o valor no txtdig (TextBox), este valor é o index (que representa a Tabela AsCII) convertido pelo Chr$(index), representado a faixa de valores (0 à 9) A Funcao abaixo roda legal, mas ao clicar um vez em um dos Option, ela exibe 2 vezes, e o cursor fica no começo do TextBox. Mas nao entendo pois qdo executo o codigo passo-a-passo pelo <F8>, ou qdo deixo a linha " Msgbox index " o codigo nao apresenta problema e exibe uma vez só. Mas nos 2 casos o cursor continua a ficar antes do conteudo do Txtdig (ou seja no comeco de Txtdig).
Function Cliq_Tecla(index) Optdig(index).Value = False ' Tinha ESQUECIDO desta Linha. If (Chr(index) Like "[0-9]") Then ' MsgBox index ElseIf (index = 43 Or index = 45) Then End If Txtdig = Txtdig & Chr$(index) End Function
|
|
|
|
Postada em 14/11/2004 15:21 hs
E ai, Sandro, beleza? Gente boa.
Eu vou fazer + umas consideraçoes: E sabe porque estou fazendo com Option ao invés de Command (sendo que este não me apresentou este problema de adicionar 2 vezes o conteúdo quando eu clico). É por que ainda vou adicionar este Programa, algo assim. Quando eu estiver digitando na TextBox(txtdig) por exemplo 1, este terá que fazer com que o Optdig (de index=48) afunde e levante, simulando um clique (que nem houve, eu apenas estou digitando em uma TextBox). Entendeu? E na Option dá para fazer está simulação só mexendo na Propriedade Value. Mas no Command não achei propriedade que faça isto (com que ele afunde e levante) só por via de codigo de comandos. Para fazer isto já pensei até (mas não sei como fazer), em trocar as cores de fundo da borda do Command, isto dará a impressão que deu um clique. Obs: O CommandButton não me apresentou estes problemas que estou tento com o OptionButton, mas eu não descobri como faz para simular um clique do botão, então optei por OptionButton que sei fazer a simulação, mas agora não sei resolver este problema que faz ele exibir 2 vezes no txtdig. Agora se você sabe como eu faço isto com que o CommandButton afunde e levante só por comandos, me fala ou melhor me escreva. To precisando de ajuda, Valeu.
|
|
|
Sandro
não registrado
|
|
ENUNCIADA !
|
|
|
Postada em 14/11/2004 22:21 hs
Oi Léee, Recebi o seu email e já respondi para você. Descobri o erro da options e como resolver o problema do Textbox. Infelizmente, para resolver o problema dos CommandButton deve-se usar a API do Windows, provavelmente a SendMessage ou PostMessage. Acontece que estas APIs podem receber uma infinidade de parâmetros diferentes e não tenho nenhuma documentação que mostre os parâmetros usados especificamente pelo Command, mas veja a resposta para as Options, pode ser que seja mais interessante continuar a usá-las. um abraço, Sandro.
|
|
|
|