Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Como puedo mostrar lo que estoy haciendo en una segunda pantalla (https://www.clubdelphi.com/foros/showthread.php?t=38355)

rmenor 12-12-2006 13:23:27

Como puedo mostrar lo que estoy haciendo en una segunda pantalla
 
No se si es exactamente el foro apropiado pero estoy buscando información para hacer lo siguiente. Quiero abrir un navegador por ejemplo firefox y que en el segundo monitor se pueda ver lo que yo estoy haciendo pero solo de las aplicaciones que yo le diga no de todo el escritorio. Osea que no quiero clonar el escritorio porque algunas cosas no quiero que las vean mis clientes. Lo he puesto en este foro porque estaba pensando en hacer capturas de pantalla pero no creo que sea lo más apropiado porque llevaría mucho trabajo al procesador no? Ya se como enviar un formulario a el segundo monitor me falta saber como mostrar la aplicación que yo estoy usando en el.

Gracias de antemano.

Lepe 13-12-2006 12:33:27

Yo tengo 2 monitores, pero la verdad, si paso una ventana al segundo monitor, se pierde del primero (usando la extensión del escritorio).

Quizás con teclas rápidas (hotkeys) que pueda tener tu tarjeta de vídeo, puedas activar o desactivar la clonación del monitor en el momento que necesites.

Quizás uno de estos componentes te sirvan para ir capturando la pantalla e ir mostrandolo en un PaintBox o similar en el segundo monitor.

Ya ves que no es una respuesta inmediata, pero de momento es lo que se me ocurre.

Saludos y suerte.

seoane 13-12-2006 13:48:14

En este otro hilo hablamos de algo parecido, y usamos la misma solución que te propone Lepe, copiar la pantalla a intervalos regulares. Aunque veo por tu pregunta que no te parece una buena solución.

http://www.clubdelphi.com/foros/showthread.php?t=30776

rmenor 15-12-2006 11:35:19

No me convence porque
 
lo que yo quiero que haga es que la persona vea lo que yo le estoy señalando o marcando con el ratón con lo cual debería ser un reflejo segundo a segundo y evitando el parpadeo de la pantalla. ¿No habría alguna manera de ver lo que se ve en la pantalla como si fuera una capturadora de video?. Hay un programa que se llama UltraMonitor que hace mirror de la pantalla que quieras pero este es de pago y quisiera hacer algo parecido y màs adaptado a lo que necesito, que este no lo hace. En fin muchas gracias por las respuestas seguiré buscando, si alguien encuentra algo agradecería que me siguierais respondiendo.

Lepe 15-12-2006 13:46:26

Acabo de probarlo y tanto una NVIDIA como una ATI, permite la clonación del monitor con teclas rápidas (lo he probado con F7 para un solo monitor y F8 para activar la clonación) deshabilitando la extensión del escritorio.

Lo que tu quieres se puede conseguir con los drivers de la tarjeta, maximizando el Mozilla y ocultando la barra de tareas, después activas la clonación.

Es cierto que hay componentes en torry, como ya te indiqué que puedan servirte, el hecho, es que el soporte de varios monitores en delphi, unidad Multimon.pas es muy escueta y no permite que hagas mucho más alla de lo ya comentado (delphi 6).

En cuanto ayuda de varios monitores, yo no he sabido encontrar ninguna (puede que tú tengas más suerte).

Saludos

rmenor 15-12-2006 14:50:02

No se si me entienden
 
yo no quiero clonar la pantalla entera solo la aplicación que yo le diga, la que yo este ejecutando en ese momento o le diga al programa que esta permitida su clonación en el otro monitor.

rmenor 15-12-2006 18:10:43

El ejemplo 19 que me habeis mostrado
 
esto si podría ser una aproximación de lo que quiero hacer pero que no coja lo que ve del raton sinó que quede estático y se vea solo el programa que yo estoy usando.

seoane 15-12-2006 18:38:28

Usando como base el ejemplo19, cambiamos el codigo por este otro:
Código Delphi [-]
procedure Copiar(DestDc: HDC; Zoom: Integer);
var
  SrcWindow: THandle;
  SrcDC: HDC;
  SrcRect: TRect;
  Ancho, Alto: Integer;
begin
  // Obtenemos las coordenadas de la ventana activa
  GetWindowRect(GetForegroundWindow,SrcRect); 
  // Lo intersecamos con el area de trabajo
  IntersectRect(SrcRect,SrcRect,Screen.WorkAreaRect);
  SrcWindow:= GetDesktopWindow;
  if SrcWindow <> 0 then
  begin
    SrcDC:= GetDC(SrcWindow);
    if SrcDC <> 0 then
    try
      Ancho:= SrcRect.Right - SrcRect.Left;
      Alto:= SrcRect.Bottom - SrcRect.Top;
      StretchBlt( DestDC, 0, 0, Ancho * Zoom, Alto * Zoom, SrcDC, SrcRect.Left,
        SrcRect.Top, Ancho, Alto, SRCCOPY);
    finally
      ReleaseDC(SrcWindow,SrcDC);
    end;
  end;
end;

procedure TfrmMain.tbZoomChange(Sender: TObject);
begin
  pbZoom.Canvas.FillRect(pbZoom.Canvas.ClipRect);
end;

// Esto es lo mismo de antes solo que ahora no pasamos las coordenadas a la funcion Copiar
procedure TfrmMain.RelojTimer(Sender: TObject);
var
  Bitmap: TBitmap;
begin
  if btnCopiar.Checked then
  begin
    Copiar(pbZoom.Canvas.Handle,tbZoom.Position);
  end;

  if btnBorrar.Checked then
  begin
    pbZoom.Canvas.FillRect(pbZoom.Canvas.ClipRect);
    Copiar(pbZoom.Canvas.Handle,tbZoom.Position);
  end;

  if btnBuffer.Checked then
  begin
    Bitmap:= TBitmap.Create;
    try
      Bitmap.Canvas.Brush.Color:= pbZoom.Canvas.Brush.Color;
      Bitmap.Width:= pbZoom.Width;
      Bitmap.Height:= pbZoom.Height;
      Bitmap.Canvas.FillRect(pbZoom.Canvas.ClipRect);
      Copiar(Bitmap.Canvas.Handle,tbZoom.Position);
      pbZoom.Canvas.Draw(0,0,Bitmap);
    finally
      Bitmap.Free;
    end;
  end;
end;

Puede que esto se aproxime un poco mas a lo que buscas.

rmenor 16-12-2006 12:43:23

Ahí las dao
 
Esto es lo que quiero, gracias, solo me faltará hacer alguna rutina que le indique si la venta activa tiene permisos de visualización o no y si no los tiene que mantenga la anterior que si que los tenía.
Te estaré eternamente agradecido. Un saludo.

rmenor 16-12-2006 14:21:47

Aquí os dejo como ha quedado
 
1 Archivos Adjunto(s)
todavía no esta terminado pero aquí os dejo como ha quedado lo que me habeis ayudado a hacer, en próximas versiones desecharé lo del zoom porque no lo necesito y solo necesito que copie usando el buffer. Deciros que para que funcione bien necesitais tener 2 monitores. Muchas gracias.


La franja horaria es GMT +2. Ahora son las 17:00:19.

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