ROTINA PARA OBJETO IMAGE

IRENKO 05/12/2013 16:23:53
#431820
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,
MARCELO.TREZE 05/12/2013 18:50:02
#431826
Resposta escolhida
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


IRENKO 05/12/2013 20:30:48
#431828
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.
MARCELO.TREZE 05/12/2013 22:42:50
#431832
Irenko se o numero de images for fixo então troca o ImgLegenda(p).UBound por (4)
IRENKO 06/12/2013 07:56:20
#431838
Troquei mas de erro:

Objeto não aceita esta propriedade ou metodo

nesta linha:

For I = 1 To ImgLegenda(4).UBound
MARCELO.TREZE 06/12/2013 09:17:22
#431841
não foi isso que eu quis dizer foi isso aqui.

For I = 1 To 4
IRENKO 06/12/2013 09:32:26
#431843
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.
IRENKO 06/12/2013 09:38:03
#431844
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.

MARCELO.TREZE 06/12/2013 09:38:55
#431845
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

  If ImgLegenda(I).Tag = Cores(F) Then


faz ai os testes

IRENKO 06/12/2013 10:00:23
#431847
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
MARCELO.TREZE 06/12/2013 10:19:20
#431853
é irenko no vba tudo é dificil, 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

Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas