ROTINA PARA OBJETO IMAGE
Pessoal, estou precisando fazer uma rotina para carregar objetos image, mas pra mim esta sendo um pouco dificil, conto com a colaboração de alguem para uma ideia. é o seguinte:
no exemplo anexo tenho 01 Variavel String, 04 objetos Image e 04 Label e um ImageList, no ImageList coloquei 04 imagems totas elas com o TAG referenciando a cor. Os TAGs dos objetos Image e Label tambem com o nome da cor. O proposito é, ao apertar o botão somente carregue as imagems comparando os nomes das cores que tenho na Variavel Cor, ou seja, todos os objetos estão como Visible=False, somente ficara visivel aqueles que o Tag bata com as cores contidas na variavel. Não sei se isso é possivel.
Preciso que seja pelo TAG não pelo o index.
Fico grato,
no exemplo anexo tenho 01 Variavel String, 04 objetos Image e 04 Label e um ImageList, no ImageList coloquei 04 imagems totas elas com o TAG referenciando a cor. Os TAGs dos objetos Image e Label tambem com o nome da cor. O proposito é, ao apertar o botão somente carregue as imagems comparando os nomes das cores que tenho na Variavel Cor, ou seja, todos os objetos estão como Visible=False, somente ficara visivel aqueles que o Tag bata com as cores contidas na variavel. Não sei se isso é possivel.
Preciso que seja pelo TAG não pelo o index.
Fico grato,
assim
Dim Cores() As String
Private Sub Form_Load()
Image1(0).Picture = ImageList1.ListImages(1).ExtractIcon
Image1(1).Picture = ImageList1.ListImages(2).ExtractIcon
Image1(2).Picture = ImageList1.ListImages(3).ExtractIcon
Image1(3).Picture = ImageList1.ListImages(4).ExtractIcon
End Sub
Private Sub Command1_Click()
Cores = Split([Ô]amarelo,Verde[Ô], [Ô],[Ô])
For I = 0 To Image1.UBound
For f = 0 To UBound(Cores)
If UCase(Image1(I).Tag) = UCase(Cores(f)) Then
Image1(I).Visible = True
Label1(I).Visible = True
End If
Next f
Next I
End Sub
Marcelo, o objetivo era esse mesmo, porem eu fiz esse exemplo em VB para adaptar em VBA conforme novo anexo:
A rotina abaixo esta comentada no projeto, pois esta dando erro na primira linha.
For I = 1 To ImgLegenda(p).UBound
For F = 1 To UBound(Cores)
If UCase(ImgLegenda(I).Tag) = UCase(Cores(F)) Then
ImgLegenda(I).Visible = True
LbLegenda(I).Visible = True
End If
Next F
Next I
End Sub
neste meu código eu crio todos objetos em RunTime, funciona perfeitamente até chegar na linha em negrito. Talvez eu não esteja sabendo adaptar neste laço FOR.
No caso acima os objetos são:
Image = ImgLegenda
label = LbLegenda
ImageList = List_Bullet
Não sei se vc trabalha com VBA, mas........ não custa tentar.
Eu colquei a propriedade Visible = True para visualização, ele tam que iniciar como False
Fico grato se vc ou outro colega puder ajudar.
A rotina abaixo esta comentada no projeto, pois esta dando erro na primira linha.
For I = 1 To ImgLegenda(p).UBound
For F = 1 To UBound(Cores)
If UCase(ImgLegenda(I).Tag) = UCase(Cores(F)) Then
ImgLegenda(I).Visible = True
LbLegenda(I).Visible = True
End If
Next F
Next I
End Sub
neste meu código eu crio todos objetos em RunTime, funciona perfeitamente até chegar na linha em negrito. Talvez eu não esteja sabendo adaptar neste laço FOR.
No caso acima os objetos são:
Image = ImgLegenda
label = LbLegenda
ImageList = List_Bullet
Não sei se vc trabalha com VBA, mas........ não custa tentar.
Eu colquei a propriedade Visible = True para visualização, ele tam que iniciar como False
Fico grato se vc ou outro colega puder ajudar.
Irenko se o numero de images for fixo então troca o ImgLegenda(p).UBound por (4)
Troquei mas de erro:
Objeto não aceita esta propriedade ou metodo
nesta linha:
For I = 1 To ImgLegenda(4).UBound
Objeto não aceita esta propriedade ou metodo
nesta linha:
For I = 1 To ImgLegenda(4).UBound
não foi isso que eu quis dizer foi isso aqui.
For I = 1 To 4
Ralmente Marcelo, entendi mal. Bom mudei e não deu erro porem ha um Bug, so esta carregando o Laranja, na variavel eu coloquei Azul e Laranja.
Fiz outro teste com a variavel:
se eu coloco assim:
Cores = Split([Ô]Vermelho,Verde,Azul[Ô], [Ô],[Ô])
carrega somente o Azul
se assim:
Cores = Split([Ô]Vermelho,Verde[Ô], [Ô],[Ô])
carrega somente o Verde
ou seja, a rotina esta pegando somente a ultima cor da variavel.
se eu coloco assim:
Cores = Split([Ô]Vermelho,Verde,Azul[Ô], [Ô],[Ô])
carrega somente o Azul
se assim:
Cores = Split([Ô]Vermelho,Verde[Ô], [Ô],[Ô])
carrega somente o Verde
ou seja, a rotina esta pegando somente a ultima cor da variavel.
tá vamos ver
mude o segundo for pra 4 também
se não funciona, como é vba não tenho certeza qual das funções pode não estar funcionando direito
outra coisa é retirar os UCase para teste, eu os coloquei para evitar o erro de digitação minuscula e maiuscula, mas pode retira-los, e tenha certeza que os nomes das cores estejam escritos da mesma forma
faz ai os testes
mude o segundo for pra 4 também
se não funciona, como é vba não tenho certeza qual das funções pode não estar funcionando direito
outra coisa é retirar os UCase para teste, eu os coloquei para evitar o erro de digitação minuscula e maiuscula, mas pode retira-los, e tenha certeza que os nomes das cores estejam escritos da mesma forma
If ImgLegenda(I).Tag = Cores(F) Then
faz ai os testes
Mudei para :
For I = 1 To 4
For F = 1 To 4
If ImgLegenda(I).Tag = Cores(F) Then
ImgLegenda(I).Visible = True
LbLegenda(I).Visible = True
End If
Next F
Next I
deu erro na linha em negrito
subscrito fora do intervalo
For I = 1 To 4
For F = 1 To 4
If ImgLegenda(I).Tag = Cores(F) Then
ImgLegenda(I).Visible = True
LbLegenda(I).Visible = True
End If
Next F
Next I
deu erro na linha em negrito
subscrito fora do intervalo
é irenko no vba tudo é dificil, rs
tente desta forma
faz ai e ve o que vai dar, rs
tente desta forma
Dim Cores(2) As String
Private Sub Form_Load()
Image1(0).Picture = ImageList1.ListImages(1).ExtractIcon
Image1(1).Picture = ImageList1.ListImages(2).ExtractIcon
Image1(2).Picture = ImageList1.ListImages(3).ExtractIcon
Image1(3).Picture = ImageList1.ListImages(4).ExtractIcon
End Sub
Private Sub Command1_Click()
Cores(1) = [Ô]Amarelo[Ô]
Cores(2) = [Ô]Vermelho[Ô]
For I = 1 To 4
For f = 1 To 2
If UCase(Image1(I).Tag) = UCase(Cores(f)) Then
Image1(I).Visible = True
Label1(I).Visible = True
End If
Next f
Next I
End Sub
faz ai e ve o que vai dar, rs
Tópico encerrado , respostas não são mais permitidas