Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-01-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Error al capturar la pantalla!!

Hola de nuevo, estoy haciendo una aplicación para iniciarme en el uso de Streams y los componentes Indy. La aplicación trata de que el servidor hace una captura de la pantalla y se la envía al cliente. Tengo un TImage en el servidor para ver cómo sale la imagen que captura, la captura es de una pequeña porción de la pantalla, la cual la amplía en el Image, el cual tiene sus propieades Stretch en True y AutoSize en False;

El código del Timer que hace la captura de la pantalla (imgEnviar es el nombre del TImage):

Código:
procedure TExplorer.Timer1Timer(Sender: TObject);
var
  DeskTop : TCanvas ;
begin
  DeskTop := TCanvas.Create ;
  try
    with DeskTop do
      Handle := GetWindowDC (GetDesktopWindow) ;
    with imgEnviar.Canvas do
    CopyRect (Rect (0, 0, screen.Width, screen.Height),DeskTop,Rect (0, 0, screen.Width, screen.Height));
  finally
    DeskTop.Free
  end

end;
Este código lo he encontrado en trucomanía y lo he modificado cómo venía en un hilo de ClubDelphi llamado "Optimizar el envío de una imagen (JPG)" o algo así.

Mi pregunta es: ¿Cómo puedo hacer que me haga una captura completa de la pantalla?
__________________
:)
Responder Con Cita
  #2  
Antiguo 02-02-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Cita:
Empezado por DarkByte
¿Cómo puedo hacer que me haga una captura completa de la pantalla?
A simple vista, es lo que estas haciendo con este código!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 04-02-2004
cone220 cone220 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 53
Poder: 21
cone220 Va por buen camino
Para que te tome toda la pantalla, deberías hacer:

imgEnviar.Height := screen.Width;
imgEnviar.Width := screen.Height;

De esa manera, vas a tener la imágen de toda la pantalla.

Saludos

Federico
Responder Con Cita
  #4  
Antiguo 05-02-2004
Amilius Amilius is offline
No confirmado
 
Registrado: ene 2004
Posts: 138
Poder: 0
Amilius Va por buen camino
Te sugiero que la amplies la imagen DESPUES de mandarla por red.

Tambien es mejor si usas directamente el "Bitblt" (Usando el handle que obtienes) para no crear ese Tcanvas por que no estás usando las funciones para graficar lineas, texto, etc. que son enormemente facilitadas por el Tcanvas.
Responder Con Cita
  #5  
Antiguo 06-02-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
¿Tiene algo que ver el tamaño del TImage del servidor?
__________________
:)
Responder Con Cita
  #6  
Antiguo 06-02-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Cita:
Empezado por cone220
Para que te tome toda la pantalla, deberías hacer:

imgEnviar.Height := screen.Width;
imgEnviar.Width := screen.Height;

De esa manera, vas a tener la imágen de toda la pantalla.

Saludos

Federico
Me da error al poner el TImage que ocupe toda la pantalla
Código:
... raised exception class EWriteError with message 'Stream write error".Process stopped ...
¿Sabéis cual es el error u os hace falta el código del stream del servidor y cliente?
__________________
:)
Responder Con Cita
  #7  
Antiguo 12-02-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Nadie sabe lo que pasa?
__________________
:)
Responder Con Cita
  #8  
Antiguo 28-07-2005
opardor opardor is offline
Miembro
 
Registrado: jul 2005
Posts: 16
Poder: 0
opardor Va por buen camino
Lightbulb

En lugar de usar el TImage te recomiendo uses TBitmap y luego se lo asignes al imgEnviar..

Código:
procedure TExplorer.Timer1Timer(Sender: TObject);
var
  DeskTop : TBitmap ;
begin
  DeskTop := TBitmap.Create ;
  try
	with DeskTop do begin
	  Handle := GetWindowDC (GetDesktopWindow) ;
	  Width :=  GetDeviceCaps( handle, HORZRES );
	  Height := GetDeviceCaps( handle, VERTRES );
	  BitBlt(Canvas.Handle,0,0,Width, Height,handle,0,0,SRCCOPY);
	  imgEnviar.Picture.Bitmap := Desktop;
   end;
 finally
   DeskTop.Free;
 end
end;
Espero te sirva!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:10:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi