Notifications
Clear all

Atualizar Imagem no Form

15 Posts
2 Usuários
0 Reactions
2,340 Visualizações
 guma
(@guma)
Posts: 135
Estimable Member
Topic starter
 

Bom Dia

Como atualizar uma imagem no form se eu clicar Nela???

Vou explicar tenho um botão que gera imagens num controle. toda vez que clico no botão ele gera uma nova imagem.
O problema é que tenho que clicar nas imagens e se fizer isso e clicar no botão ele vai gerar uma nova imagem, mas não vai ser possível visualizar a mudança a menos que eu clique novamente na imagem, caso contrário ele continua exibindo a imagem anterior. Eu queria incluir um código no botão para ele fazer a atualização.

Outra coisa tem como inserir uma imagem deitada??? ou seja orientação -90º

Obrigado.

 
Postado : 24/05/2013 4:27 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Naõ tem como ver seu exemplo agora, mas pelo que entendi se continua mostrando a imagem anterior, na instrução que carrega a nova imagem, você tem de limpar o controle image antes, adicione a instrução:

Image1.Picture = Nothing antes de carregar a nova, ajuste o nome do controle.

Não entendi quanto a imagem deitada, se está falando em Girar, acho mais fácil você tere uma imagem já na posição que quer.

[]s

 
Postado : 24/05/2013 5:24 am
 guma
(@guma)
Posts: 135
Estimable Member
Topic starter
 

Mauro deu certo não :?

é o seguinte ele faz a substituição, mas eu só vou conseguir visualizar clicando na imagem.então eu queria atualizar a imagem mostrada na tela sem ter que clicar nela.
adicionando para isso uma rotina no botão.

E como relação a imagem deitada é isso mesmo não tem mesmo como girar????

att.

 
Postado : 24/05/2013 5:49 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente no evento click adicionar a instrução repaint (reconstroi o formulario em tempo de execução)

Private Sub ListBox1_Click()
UserForm1.Repaint
Image1.Picture = Nothing
'Select imagem da lista para exibir no controle de imagem
......

Porem na primeira vez que for mudar da imagem deve selecionar 2 vezes, depois "parece" que vai.
Creio que o mais, digamos seguro, e não permitir o clique na imagem (image1.enable=false)
Quanto a rotação, veja o help do excel.vba sobre o controle

Coisas que você pode fazer com uma figura em um controle Image
Consulte também Informações específicas

Um controle Image não é uma figura propriamente, mas contém um figura que se encontra armazenada em um arquivo separado. Você não pode editar a figura com as propriedades de Image, mas pode utilizá-las para especificar o modo como a figura aparece no Image.

Uma aplicação interessante de Image é que você pode utilizá-la como uma figura de segundo plano para o seu aplicativo. Para fazê-lo, torne o Image do mesmo tamanho do formulário. Em seguida, você pode colocar outros controles por cima do segundo plano.

Então esse controle não permite a rotação.

 
Postado : 24/05/2013 6:37 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Segue uma possibilidade, para rotacionar a imagem.
adaptação de código ( https://groups.google.com/forum/?hl=en& ... zbmAkegxY0) de Michael Pierron

 
Postado : 24/05/2013 7:34 am
 guma
(@guma)
Posts: 135
Estimable Member
Topic starter
 

Reinaldo o modelo que postei é um exemplo simplificado, o meu arquivo trabalha com imagens sobrepostas e ao clicar na imagem que está por baixo ela altera sua posição. então não permitir o clique está fora de cogitação.

Alias você foi um dos que me ajudaram com o código, obrigado.

viewtopic.php?f=10&t=8188

Voltando ao assunto usei dois UserForm1.Repaint isto resolveu meu problema inicial e o de ter que selecionar duas vezes.

O problema agora é a tela piscando, tentei usar a propriedade Repaint somente nos controle image mas parece que eles não aceitam está propriedade ou não escrevi corretamente.

No caso tenho 20 Controles 10 sobre 10

iControlImages = 1
       
    For LIN = 1 To 20
                        
        Me.Controls("Image" & iControlImages).Picture = Nothing
        Me.Controls("Image" & iControlImages).Repaint
        iControlImages = iControlImages + 1
    
     Next

Têm como amenizar o problema???

att.

 
Postado : 24/05/2013 7:50 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O método Repaint, não atua sobre os controles diretamente, mas sim sobre objetos -> Userform ou Page e também controle Frame.
Não entendi o que quiz dizer "..Tela piscando..."

 
Postado : 24/05/2013 7:58 am
 guma
(@guma)
Posts: 135
Estimable Member
Topic starter
 

Adicionei meu arquivo original.
talvez seja o fato de ele estar maximizado.

Att

 
Postado : 24/05/2013 8:37 am
 guma
(@guma)
Posts: 135
Estimable Member
Topic starter
 

Como faço para descobrir o caminho de uma imagem adicionada a um controle???

exemplo eu tenho um controle imagem com uma imagem inserida eu gostaria de obter endereço:

"F:Wise TarotTarotPicsThe Deck of the Old Path1.jpg"

ou somente o nome 1.jpg.

 
Postado : 24/05/2013 5:47 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Como faço para descobrir o caminho de uma imagem adicionada a um controle???
exemplo eu tenho um controle imagem com uma imagem inserida eu gostaria de obter endereço:
"F:Wise TarotTarotPicsThe Deck of the Old Path1.jpg"
ou somente o nome 1.jpg.

Ficou um pouco confuso, a principio para inserir a Imagem você já deve ter determinado onde a mesma está ou seja o caminho para busca-la com a instrução:
"....Picture = LoadPicture("F:Wise Tarot........", depois de inserida não tem como saber de onde a mesma veio, a não ser que armazene o caminho de cada uma em algum Label, isto se vierem de locais diferentes, se não o caminho você já tem como dito acima.

Agora não entendi :
obter endereço:
"F:Wise TarotTarotPicsThe Deck of the Old Path1.jpg"
ou somente o nome 1.jpg

O que dizer ? O Nome da figura você tambem já tem na linha acima.

[]s

 
Postado : 24/05/2013 6:11 pm
 guma
(@guma)
Posts: 135
Estimable Member
Topic starter
 

Mauro, foi só um exemplo do que quero obter, lembra que minha rotina gera imagens aleatórias ???
então não sei que imagem está em cada controle.
e é isso que preciso descobrir.

obrigado pela atenção.

 
Postado : 24/05/2013 7:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

guma, todas estas informações você tem, se elas não existissem, não teria como inserir as imagens nem saber para qual controle elas iriam, e tudo isto está resumido nesta linha :

Me.Controls("Image" & iControlImages).Picture = LoadPicture("F:Wise TarotTarotPicsRider-Waite" & V(I) & ".jpg")

Ou seja :
Me.Controls("Image" & iControlImages) - o Controle Image e o Numero
LoadPicture("F:Wise TarotTarotPicsRider-Waite" - O Caminho da Figura
V(I) & ".jpg") - Nome(Numero) da figura

Então, adicione a instrução abaixo e terá as informações que quer:

For LIN = 1 To QUANT_SORT
I = I + 1
Me.Controls("Image" & iControlImages).Picture = LoadPicture("F:Wise TarotTarotPicsRider-Waite" & V(I) & ".jpg")

MsgBox "O Controle:- Image" & iControlImages _
& Chr(13) & "Recebeu a Figura Nome e N° : - " & V(I) & ".jpg" _
& Chr(13) & "Que se encontra no Caminho :-" _
& Chr(13) & "F:Wise TarotTarotPicsRider-Waite"

iControlImages = iControlImages + 1
Next

[]s

 
Postado : 24/05/2013 8:38 pm
 guma
(@guma)
Posts: 135
Estimable Member
Topic starter
 

E teria como eu gravar a informação nome da imagem e numero do controle num vetor como o V(I).
tentei fazer isto, mas não consegui.

Obrigado.

 
Postado : 25/05/2013 12:25 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

guma, pode-se guardar tudo que tiver em mente, da mesma forma que são armazenados os numeros gerados aleatório para serem utilizados posteriormente, como conforme mostrei acima com a dica do msgbox, é só criar uma nova rotina para ir armazenando estas informações, o ideal seria criar uma para cada coisa.
Eu não captei o porque você quer isto, se puder explicar quem sabe podemos achar um meio intermediário, como a utilização de alguns label para onde enviaria as informações, seriabem mais simples.

Editei, só para colocar uma outra OBS, temos de tomar cuidado ao ficarmos guardando muitos dados em Variáveis, devido a estas informações ficarem em Memória e consequentemente deixando o aplicativo mais lento e podendo ocasionar os erros de Memoria Cheia, muito comum em app excel.

[]s

 
Postado : 26/05/2013 2:12 pm
 guma
(@guma)
Posts: 135
Estimable Member
Topic starter
 

Mauro

Seguinte, como você já deve ter percebido se trata de um programa de Tarot. estou desenvolvendo para treinar VBA.
Achei que ia ser uma coisa simples, mas ainda tenho muito que aprender. :oops:

Então ele tem que gerar 20 cartas aleatórias entre as 78 existentes. ok, isso ele já está fazendo. :mrgreen:

Agora o próximo passo é associar cada carta ao seu significado. Vou explicar melhor, da mesma forma que tenho uma pasta com as imagens das 78 cartas, eu tenho outra com 78 txts contendo o significado de cada uma. o que pretendo fazer é que ao clicar na imagem ele mostre o conteúdo do txt como um comentário (estou chamando de comentário pois não sei o nome exato vou dar um exemplo quando passo o mouse num dos Smilies ali do lado, aparece uma especie de comentário com o nome do mesmo) .

As imagens estão nomeadas com números de 0 a 77 da mesma forma que os txts. os números são correspondentes. por isso preciso do nome/numero das imagem para amarrar o txt na próxima rotina.

Att.

 
Postado : 27/05/2013 9:11 am