USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Erro lógico ou o código que é Maluco?
léee
OURINHOS
SP - BRASIL
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.

     
Sandro
não registrado
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.
   
léee
OURINHOS
SP - BRASIL
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
     
léee
OURINHOS
SP - BRASIL
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.
   
Página(s): 1/2      PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página