Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Error al capturar la pantalla!! (https://www.clubdelphi.com/foros/showthread.php?t=7044)

DarkByte 31-01-2004 19:24:10

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?

delphi.com.ar 02-02-2004 17:31:57

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!

cone220 04-02-2004 22:46:51

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

Amilius 05-02-2004 01:09:21

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.

DarkByte 06-02-2004 17:43:17

¿Tiene algo que ver el tamaño del TImage del servidor?

DarkByte 06-02-2004 18:45:44

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?

DarkByte 12-02-2004 18:20:37

Nadie sabe lo que pasa?

opardor 28-07-2005 03:16:33

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!! :D


La franja horaria es GMT +2. Ahora son las 12:08:39.

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