• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

trqt

Erro com função no VB 6

13 mensagens neste tópico

Criei a seguinte função no VB6

Function plano(x1, y1, x2, y2)

px1 = Form1.pontozero.x1 - (x1 * 100)
py1 = Form1.pontozero.y1 - (y1 * 100)
px2 = Form1.pontozero.x2 - (x2 * 100)
py2 = Form1.pontozero.y2 - (y2 * 100)

num = Rnd() * 4000
num2 = Arredonda(num, 0)
num3 = "reta" & num2

Set obj = Form1.Controls.Add("VB.Line", num3)

obj.y1 = py1
obj.y2 = py2
obj.x1 = px1
obj.x2 = px2
obj.BorderColor = &HFF&
obj.BorderWidth = 2
obj.Visible = True

End Function

Tentei também começar com:

Public Function plano(x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer)

Mas dos dois modos eu recebo o seguinte erro na hora de chamar a função:

chamo a função assim:

plano(anteriorx, anteriory, valx, valy)

E recebo esse erro:

Compile error:

Expected: =

Já me certifiquei de que essas variáveis estão ok, não sei qual pode ser o erro, alguém faz idéia?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me parece que seja da função, embora uma função deva retornar qualquer coisa, mas já colocaste um breakpoint no inicio da função e verificaste passo a passo onde o erro ocorre ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me parece que seja da função, embora uma função deva retornar qualquer coisa, mas já colocaste um breakpoint no inicio da função e verificaste passo a passo onde o erro ocorre ?

Não, pq logo quando eu dou enter na linha:

plano(.......)

ele jah me dá o erro de expected: =

ele nem chega a executar a função. . .

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque ele está há espera que atribuas o resultado da função a alguma variável, atendendo a que é uma função e não um procedimento.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, estive a testar (ainda não tinha feito isso) e dá-me logo o mesmo erro em Form1.pontozero !

O que é esta propriedade "pontozero" ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, estive a testar (ainda não tinha feito isso) e dá-me logo o mesmo erro em Form1.pontozero !

O que é esta propriedade "pontozero" ?

pontozero é uma linha...

Porque ele está há espera que atribuas o resultado da função a alguma variável, atendendo a que é uma função e não um procedimento.

vou pesquisar como criar um procedimento aki para ver se resolve. . .

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, resolvido este erro da linha, e Arredonda() ?

O que eu estou a fazer também podes tu ... não entendo como não consegues. Metes um breakpoint onde chamas a função e depois com o F8 vais saltando linha a linha. Ele ao dar-te erro mostra onde é.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

vou pesquisar como criar um procedimento aki para ver se resolve. . .

é só mudar o Function para Sub

@jpaulino

Não pode ser o que eu disse?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, resolvido este erro da linha, e Arredonda() ?

O que eu estou a fazer também podes tu ... não entendo como não consegues. Metes um breakpoint onde chamas a função e depois com o F8 vais saltando linha a linha. Ele ao dar-te erro mostra onde é.

O Arredonda é essa função aki

Public Function Arredonda(ByVal value As Double, ByVal digits As Integer) As Double
Dim shift As Double

    shift = 10 ^ digits
    Arredonda = CInt(value * shift) / shift
End Function

vou tentar fazer o que vc me disse aki tbm...

é só mudar o Function para Sub

Tentei isso e continua dando o mesmo erro. . .

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@jpaulino

Não pode ser o que eu disse?

Não, não pode. O resultado pode não ser utilizado para nada e o VB6 permite usar as funções como procedimentos. É muito permissivo :D

Em .NET já não é a mesma coisa e és obrigado a dizer que retorno terás ... mas poderás na mesma não utilizar esse resultado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma função tem que retornar um valor! Assim como tens com a função "Arredonda" ela retorna um valor no final:

Public Function Arredonda(ByVal value As Double, ByVal digits As Integer) As Double
Dim shift As Double

    shift = 10 ^ digits
    Arredonda = CInt(value * shift) / shift
End Function

^^^^^ assim esta correctissimo, pois "ela" -- a Arredonda toma um valor no final --> Arredonda = CInt(value * shift) / shift

Em relação à duvida inicial, em que o codigo mostrado é:

Public Function plano(x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer)

bla bla

end function

é so mudar para:

Public sub plano(x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer) as string

bla bla

end sub

e na parte da chamada:

bla bla

Call plano(anteriorx, anteriory, valx, valy)     'Chamar a rotina

bla bla

Agora fica aqui uma dica:

Dá uma leitura por este Artigo -> INFO: Microsoft Consulting Services Naming Conventions for Visual Basic

que ficaria muito mais legivel algo do genero:

Public sub subMeuPlano(intXaxis1 As Integer, intYaxis1 As Integer, intXaxis2 As Integer, intYaxis2 As Integer) as string
Dim lngNum1     as Long
Dim lngNum2     as Long
Dim lngNum3     as Long
Dim objMyLine   as Object

intXaxis1 = frmPlano.linPontoZero.intXaxis1 - (intXaxis1 * 100)
intYaxis1 = frmPlano.linPontoZero.intYaxis1 - (intYaxis1 * 100)
intXaxis2 = frmPlano.linPontoZero.intXaxis2 - (intXaxis2 * 100)
intYaxis2 = frmPlano.linPontoZero.intYaxis2 - (intYaxis2 * 100)

lngNum1 = Rnd() * 4000
lngNum2 = Call funArredonda(lngNum, 0)
lngNum3 = "reta" & lngNum2

Set objMyLine = FrmPlano.Controls.Add("VB.Line", lngNum3)

objMyLine.intYaxis1 = intYaxis1
objMyLine.intYaxis2 = intYaxis2
objMyLine.intXaxis1 = intXaxis1
objMyLine.intXaxis2 = intXaxis2
objMyLine.BorderColor = &HFF&
objMyLine.BorderWidth = 2
objMyLine.Visible = True


End Sub

[]'s

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma função tem que retornar um valor! Assim como tens com a função "Arredonda" ela retorna um valor no final:

É verdade e é essa a diferença entre uma função e um procedimento, mas não é obrigatório e pode-se não usar esse valor.

Infelizmente devido ao VB6 permitir usar os dois métodos da mesma forma, muitos programadores utilizam um ou outro sem qualquer distinção.

Public sub plano(x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer) as string

bla bla

end sub

Este ficou mal :) (copy/paste) ... deve ser:

Public sub plano(x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer)

bla bla

end sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Valew pessoal!

Deu certo esse negócio de usar Public Sub, mais vou ter que refazer as funções, num deu certo não, vou tentar fazer de um modo mais simples!

Valew pessoal!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora