AJUDA COM VK_SNAPSHOT

AZORSCA 06/05/2013 11:04:24
#422993
Bom dia tudo bem?

Pessoal é o seguinte eu tenho uma rotina no sistema interno da empresa que faz a impressão de um relatorio.

Na tela de relatório eu tenho dois elementos cruciais e que é necessário imprimir.

Nele existe dois WebControl onde é exibido gráficos de Ping e Ping de rádio

a seguinte rotina é a que está atualmente no sistema

volta:
If blnAboveVer4 Then
keybd_event VK_SNAPSHOT, 0, 0, 0
Else
keybd_event VK_SNAPSHOT, 1, 0, 0
End If

Picture5.Picture = Clipboard.GetData [ô]visualiza a imagem na picture

[ô] Caso propriedade picture 0 volta ao print screeen
If Picture5.Picture = 0 Then
GoTo volta
End If

[ô]SavePicture Clipboard.GetData, App.path + [Ô]\GraficoRadio.jpg[Ô] [ô]salva a imagem no arquivo
SavePicture Picture5.Picture, App.path + [Ô]\GraficoRadio.jpg[Ô] [ô]salva a imagem no arquivo
[ô]OBS.: TROQUE O PIPE | POR BARRA INVERTIDA.

Exit Sub

ela faz um Print Screen para imprimir os objetos, porém, ele está fazendo da tela toda e não somente dos objetos (WebControl).


Alguém poderia me ajudar?
PROFESSOR 06/05/2013 12:16:13
#422998
Bem, você está enviando um PrintScreen, então, sim, é a tela toda.

Para obter a área relativa a cada um dos controles WebBrowser, você precisa [Ô]recortar[Ô] a imagem capturada (tela toda), observando o ponto inicial tanto do formulário e dos controles, além das dimensões dos mesmos. Isso você terá de calcular sozinho, em tempo de execução, já que cada usuário pode manter ou usar definições distintas para a tela, para o formulário, para a quantidade de cores, para o posicionamento, dentre outras coisas.

Para a captura de tela, o formulário ou uma área específica: Este artigo é útil.
Para [Ô]recortar[Ô] a imagem capturada (BitBlt), este link é interessante.
é possível utilizar o método PaintPicture do controle PictureBox (e outros contêineres como os Forms), mas esse método, além de um pouco mais lento, deixa um pouco á desejar.

Assim, em ambos os casos (captura e [Ô]recorte[Ô]), utiliza-se sempre APIs do Windows (GDI etc.), uma vez que o VB6 não possui recursos ou capacidades gráficas para essa finalidade.
Tópico encerrado , respostas não são mais permitidas