View Full Version : Mudar Caption da Label em VB


Zero_Cool_PT
04-03-2008, 18:38
Boas pessoal, como é que mudo a caption duma label entre várias frases?, p ex: lbl_lista
De referir que pode ser um loop^^

Dim rodar as integer
Loop while rodar > 1

lbl_lista.Caption = "Program is Running"
lbl_lista.Caption = "Program is Running2"
lbl_lista.Caption = "Program is Running3"

?????

Ш¡zard·σf·Шαr
04-03-2008, 18:57
Caso não saibas, existe o operador & que serve para juntar duas strings para formar uma só. Podes usar isso para juntar uma string com a variável que está a ser incrementada.
For i As Integer = 1 to 10
lbl_lista.Caption = "Program is Running" & i
Next
Não sei se era isto que querias...

Zero_Cool_PT
04-03-2008, 19:00
Caso não saibas, existe o operador & que serve para juntar duas strings para formar uma só. Podes usar isso para juntar uma string com a variável que está a ser incrementada.
For i As Integer = 1 to 10
lbl_lista.Caption = "Program is Running" & i
NextNão sei se era isto que querias...

mas eu não quero que incremente, aquilo foi só 1 exemplo. Tipo Passar de "Carro" para "Casa" ou "Crédito" e afins ^^

Ш¡zard·σf·Шαr
04-03-2008, 19:08
Dá um exemplo...
Qual é a caption da label, e como é que queres que fique?

Zero_Cool_PT
04-03-2008, 19:37
tipo

lbl_lista.caption= "Carro"
lbl_lista.caption= "Casa"
lbl_lista.caption="Crédito"


e que depois vá fazendo um loop entre essas ^^

Ш¡zard·σf·Шαr
04-03-2008, 20:18
Queres que o texto da label vá alternando de x em x tempo entre "carro", "casa" e "crédito"? Ou percebi mal outra vez? :D
While [alguma condição]
lbl_lista.caption = "Carro"
EsperarUmBocado 1000
lbl_lista.caption = "Casa"
EsperarUmBocado 1000
lbl_lista.caption = "Crédito"
EsperarUmBocado 1000
Wend

----------

Sub EsperarUmBocado(ByVal duraçao As Integer)
DoEvents
Sleep duraçao 'em milissegundos
EndSubTambém podes fazer com um timer. E as strings podem ficar num array, por exemplo.

Zero_Cool_PT
04-03-2008, 22:29
Queres que o texto da label vá alternando de x em x tempo entre "carro", "casa" e "crédito"? Ou percebi mal outra vez? :D
While [alguma condição]
lbl_lista.caption = "Carro"
EsperarUmBocado 1000
lbl_lista.caption = "Casa"
EsperarUmBocado 1000
lbl_lista.caption = "Crédito"
EsperarUmBocado 1000
Wend

----------

Sub EsperarUmBocado(ByVal duraçao As Integer)
DoEvents
Sleep duraçao 'em milissegundos
EndSubTambém podes fazer com um timer. E as strings podem ficar num array, por exemplo.

é isso mas ele dá erro no sleep =/

The_True_Eue
05-03-2008, 11:53
O melhor é usares um timer, um array de strings e uma variável de índice. A cada ocorrência do timer incrementas o índice e mudas a caption para a string nesse novo índice.
O incrementar do índice tem de ser circular, isto é, ao chegar ao fim voltar a 0. Podes usar o operador de resto da divisão inteira para isso. Algo do género (em C#, não sei qual é o operador em VB, substitui o % pelo correcto):
i = (i+1) % strings.Length;

Ш¡zard·σf·Шαr
05-03-2008, 12:05
é isso mas ele dá erro no sleep =/
Tens que adicionar isto no sítio das variáveis globais:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Mesmo assim, acho que é preferível usar um Timer, pois com Sleep não te permite fazer mais nada enquanto a alternância está a decorrer. A não ser que a corras o sub num thread em separado (e as alterações à label têm que ser thread-safe), mas em VB6 é complicado fazer isso.

Zero_Cool_PT
05-03-2008, 14:46
Tens que adicionar isto no sítio das variáveis globais:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Mesmo assim, acho que é preferível usar um Timer, pois com Sleep não te permite fazer mais nada enquanto a alternância está a decorrer. A não ser que a corras o sub num thread em separado (e as alterações à label têm que ser thread-safe), mas em VB6 é complicado fazer isso.

Então com timer como ficaria?

The_True_Eue
05-03-2008, 15:49
O melhor é usares um timer, um array de strings e uma variável de índice. A cada ocorrência do timer incrementas o índice e mudas a caption para a string nesse novo índice.
O incrementar do índice tem de ser circular, isto é, ao chegar ao fim voltar a 0. Podes usar o operador de resto da divisão inteira para isso. Algo do género (em C#, não sei qual é o operador em VB, substitui o % pelo correcto):
i = (i+1) % strings.Length;

Que mais queres?

Zero_Cool_PT
05-03-2008, 18:58
Que mais queres?

Nao sei fazer arrays :004: só coisas mais simples :D

Ш¡zard·σf·Шαr
05-03-2008, 19:26
lol então andas mesmo à nora com o VB...

Dim ArrayDeStrings() As String 'nota os parênteses a seguir ao nome da variável, que indicam que se trata de um array

...

ArrayDeStrings = New String() {"string 1", "string 2", "string 3", .....}Depois, para chamar cada elemento do array, fazes assim:
'nota que a posição dos elementos começa na posição 0
ArrayDeStrings(0) 'devolve "string 1"
ArrayDeStrings(1) 'devolve "string 2"
ArrayDeStrings(2) 'devolve "string 3"
...

Zero_Cool_PT
05-03-2008, 19:37
lol então andas mesmo à nora com o VB...



ArrayDeStrings = New String() {"string 1", "string 2", "string 3", .....}Depois, para chamar cada

Quando ponho isso na label da-me logo erro sem correr o programa em relaçao ao "New String ()" diz identifier expected =/

Armadillo
05-03-2008, 19:55
faz assim

dim ArrayDeStrings(5) as string 'imagina que inicialmente so precisas de 5 posicoes disponiveis
'se precisares de redimensionar o vector:
redim preserve ArrayDeStrings(x) ' em que x é o n.º de elementos a introduzir

Kayvlim
05-03-2008, 20:46
Vai para aqui cada confusão... Ш¡zard·σf·Шαr (http://www.techzonept.com/member.php?u=32079), isso não é VB.NET? Eu assumo que o OP esteja a trabalhar com VB6, pelo New String() dar "Identifier Expected".

Usar um timer parece-me ser a maneira ideal. Para teres uma noção, faz um projecto novo só com um label e um timer (sem mudares os nomes) e cola este código:

Option Explicit

Private x(2) As String '0-1-2, portanto.

Private Sub Form_Load()

x(0) = "Carro"
x(1) = "Casa"
x(2) = "Crédito"

Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()
Static num As Integer
num = num + 1
If num > 2 Then num = 0
'em alternativa às duas linhas anteriores,
' If num = 2 Then num = 0 Else num = num + 1
'depende do gosto de cada um...

Label1.Caption = x(num)
End Sub


Feito à pressa, mas dá para o gasto :P

Ш¡zard·σf·Шαr
05-03-2008, 22:15
Vai para aqui cada confusão... Ш¡zard·σf·Шαr (http://www.techzonept.com/member.php?u=32079), isso não é VB.NET? Eu assumo que o OP esteja a trabalhar com VB6, pelo New String() dar "Identifier Expected".
Sim, sabia que o OP está a trabalhar com VB6, mas pensei que no VB6 isso se fizesse da mesma forma que em .NET. :P

Kayvlim
05-03-2008, 22:16
Sim, sabia que o OP está a trabalhar com VB6, mas pensei que no VB6 isso se fizesse da mesma forma que em .NET. :P
Isso já estava muito mais orientado para objectos do que o VB6 :D
(gozo, mas uso :x )

Zero_Cool_PT
05-03-2008, 23:25
Vai para aqui cada confusão... Ш¡zard·σf·Шαr (http://www.techzonept.com/member.php?u=32079), isso não é VB.NET? Eu assumo que o OP esteja a trabalhar com VB6, pelo New String() dar "Identifier Expected".

Usar um timer parece-me ser a maneira ideal. Para teres uma noção, faz um projecto novo só com um label e um timer (sem mudares os nomes) e cola este código:

Option Explicit

Private x(2) As String '0-1-2, portanto.

Private Sub Form_Load()

x(0) = "Carro"
x(1) = "Casa"
x(2) = "Crédito"

Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()
Static num As Integer
num = num + 1
If num > 2 Then num = 0
'em alternativa às duas linhas anteriores,
' If num = 2 Then num = 0 Else num = num + 1
'depende do gosto de cada um...

Label1.Caption = x(num)
End Sub
Feito à pressa, mas dá para o gasto :P

Funcionou na perfeição :x2:
Obrigado a todos pela ajuda!

Kayvlim
06-03-2008, 19:47
Funcionou na perfeição :x2:
Obrigado a todos pela ajuda!
Interessa bem mais perceberes cada linha do código do que modificares o que fiz e reutilizares ;)
A sério, é fundamental conheceres arrays, e trabalhar com timers é relativamente simples e útil.

Já agora, pegando na ideia do The_True_Eue, podes em vez de fazer

num = num + 1
If num > 2 Then num = 0
'em alternativa às duas linhas anteriores,
' If num = 2 Then num = 0 Else num = num + 1
'depende do gosto de cada um...

Label1.Caption = x(num)

fazer algo como

num = num + 1
Label1.Caption = x(num Mod UBound(x))
mas isto já é código ligeiramente mais complexo que podes vir a ter dificuldades em compreender.