SoloCodigo

Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: pacegar en Martes 23 de Septiembre de 2003, 11:43

Título: Re: API de windows...
Publicado por: pacegar en Martes 23 de Septiembre de 2003, 11:43
Hola, dos cosas relacionadas con las API
Primero quería proponer un foro solo para API ya que veo que no está disponible y se pueden tratar cosas importantes...

Segundo. Mi pregunta va relacionada con API y es que necesito caputurar un área definida por mi de un formulario... necesito capturar ese area para luego imprimirlo en un report.:good:
Título: Re: API de windows...
Publicado por: Brroz en Martes 23 de Septiembre de 2003, 11:59
Hola pacegar

Sobre la primera cuestión échale un vistazo al foro Sugerir un nuevo foro.

Sobre lo segundo, mira éste enlace a otro tema del foro http://foros.solocodigo.com/viewthread.php?tid=4635 (http://foros.solocodigo.com/viewthread.php?tid=4635) y a ver que tal.

Ánimo y suerte.
Título: Re: API de windows...
Publicado por: pacegar en Martes 23 de Septiembre de 2003, 12:39
Primeramente, muchas gracias por la pronta respuesta!

Si que funciona, pero el problema se encuentra que el picture2 (destino) lo debo de tener en otro formulario... y mencionandolo así en la función no me pega la imagen....
Se te ocurre algo?

lngRc = BitBlt(Picture1.hDC, 1, 1, 7185, 4275, form2.Picture1.hDC, 1, 1, &HCC0020)
Título: Re: API de windows...
Publicado por: Brroz en Martes 23 de Septiembre de 2003, 12:55
¿Puede ser que la propiedad Autoredraw del segundo PictureBox sea False? Si esto es así, no dudes en ponerla a True.

Si el problema no se arregla, más tarde hago unas pruebas y a ver si te digo algo.

Chao.
Título: Re: API de windows...
Publicado por: Brroz en Martes 23 de Septiembre de 2003, 14:49
Hola pacegar.

Asegúrate de lo que te comentaba antes: que en el PictureBox destino la propiedad Autoredraw = True. Esto es necesario para que la imagen que resulta de un método gráfico sea persistente.

Aparte de esto, observo lo siguiente: Si la llamada a la api se realiza a continuación del método show del formulario que abres y no da tiempo a que el formulario se haya visualizado, no se pinta la imagen copiada. Para solucionar esto incluye un DoEvents a continuación del 'Show' y listo.

Y una última cosa (por si acaso): Verifica que en la llamada a la api, el orden de los parámetros es el correcto. Fíjate que en primer lugar va el hDC del PictureBox destino, en lugar del origen como intuitivamente podría parecer.


Abur.
Título: Re: API de windows...
Publicado por: pacegar en Martes 23 de Septiembre de 2003, 18:27
perfecto... poniendo el autoredraw a true y haciendo una pausa entre el copiado el show del nuevo form, todo va bien!

Gracias por todo! :good:
Título: Re: API de windows...
Publicado por: pacegar en Miércoles 24 de Septiembre de 2003, 14:19
Me ha surgido otro problema...
A la hora de imprimir ese formulario donde tengo los pictures con las copias... no me los imprime.... salen en blanco...
He hecho el autroredraw del form y un refresh pero nada...
Alguna idea?
Título: Re: API de windows...
Publicado por: Brroz en Miércoles 24 de Septiembre de 2003, 14:36
Hola pacegar

Si estás utilizando la propiedad 'Picture' del PictureBox no te imprimirá nada (a no ser que hubieras cargado desde un fichero una imagen en el control). Utiliza la propiedad Image y a ver que tal.

Abur.

Ep! Disculpas. Acabo de ver que lo que intentas imprimir es el formulario, no el PictureBox... lo tendría que ver.
Título: Re: API de windows...
Publicado por: pacegar en Miércoles 24 de Septiembre de 2003, 14:41
el objeto image no tiene la propiedad hDc... aun así no consigo copiar un picture a un image con el BitBlt...
Título: Re: API de windows...
Publicado por: Brroz en Miércoles 24 de Septiembre de 2003, 14:58
Acabo de probar el caso y a mi me funciona perfectamente. Para imprimir el formulario utilicé el método PrintForm del mismo.

Lo que te decía de la propiedad Image no era para hacer la copia sobre un hDC que tuviera la propiedad, sino para imprimir el contenido del PictureBox (con Printer.PaintPicture Picture1.Image, x , y cosa que también funciona perfectamente), aunque luego me fijé que lo que querías imprimir era el formulario (de todas formas y como curiosidad, supongo que se podrían copiar los bits creando un hDC compatible y todas esas movidas...). Disculpa que me hubiese explicado mal.

Chao.
Título: API de windows...
Publicado por: pacegar en Jueves 25 de Septiembre de 2003, 14:04
Por si a alguien le sirve...
al final lo arreglé, sobreescribiendo el contenido del picture asi, y por lo tanto se puede imprimir el formulario

lngRc = BitBlt(Picture2.hDC, 1, 1, 7185, 4275, form2.Picture1.hDC, 1, 1, &HCC0020)

clipboard.seldata = picture2.image
picture2=clipboard.getdata