Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-04-2006
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Question Zoom de pantalla

Hola a tod@s, necesito hacer un programa que haga un zoom de la pantalla (parecido a lo que hace la accesibilidad de Windows)y me lo saque por la segunda salida VGA de la tarjeta gráfica, para poder ver el zoom que hago a la pantalla en otro monitor.Nunca he programado algo parecido y no se por donde empezar.

Os pregunto las dudas que tengo haber si me podeis hechar un cable .

En primer lugar no tengo ni idea de como hacer que me salga una aplicación en la segunda pantalla.Y en la principal ver el escritorio normal de windows sin estirar.

Pero el problema que tengo es que quiero que en la segunda pantalla (la insatalaré en otra habitación diferente a donde esta la principal)me muestre en grande un reloj digital(quiero que se vea en grande por eso quiero hacer un zoom) que tiene la aplicación que se estará viendo en la primera pantalla.Por que asi el trabajador que esta en la segunda habitación vera el tiempo que tiene para realizar una determinada tarea.

No se si existe alguna aplicación que te haga esto, o en su defecto algún componente para que yo la pueda programar.

Espero haberme explicado bien y podais ayudarme.

Un saludo y gracias.
__________________
Y ahora puedes aprender truquillos de windows en http://nbull.clubdelphi.com.
Responder Con Cita
  #2  
Antiguo 19-04-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Para lo primero me atrevo a recomendarte el artículo Zoom firmado por Zarko Gajic, a ver si sacas algo en claro. Para lo segundo... lo siento, pero, creo que tendré que dejar paso a algún otro compañero.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 19-04-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Lo de mandar un formulario al monitor secundario ya lo tratamos aqui.

En cuanto a lo del zoom, me gustaria saber un par de cosas mas: ¿El reloj que quieres ampliar esta en una aplicacion tuya? ¿podrias modificar su codigo?, de no ser asi, ¿como quieres determinar el area a ampliar? ¿usando el raton como en el ampliador de windows?
Responder Con Cita
  #4  
Antiguo 19-04-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
al "ampliar" se pierde calidad en el reloj, con un simple Timer y un label con fuente a 48 puntos, ya tienes un "peaso" reloj digital.

Al hacer tú mismo el reloj puedes mostrar más información relevante, además la ventana no le pones bordes ni botones de Maximizar y que ella sola se maximice para ocupar todo el área del segundo monitor. (no tienes nada que hacer sobre esto, simplemente lo mandas al segundo monitor y le pones el WindowsState = wsmaximized).

Con esta configuración de monitores, es posible que haya problemas, es decir, si el segundo monitor es una ampliación de escritorio, el usuario del primer monitor pasa el ratón por el lado derecho de su pantalla y el ratón aparece en la otra sala . Creo recordar que las tarjetas NVidia daban más posiblidades que las ATI, al menos por el Software que traían.

Si le quitas la opción de "extender escritorio" el monitor se apaga (al menos en una ATI RADEON x550/600.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 19-04-2006
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Hola, gracias por responderme, en primer lugar contestaros las preguntas:

La aplicación no la he echo yo por lo tanto lo de modificar el código, lo descartó.

Lo que quiero hacer no es un simple reloj y mostrarlo en el segundo monitor, sino el reloj que tiene esta aplicación (es una cuenta atras), mostrarlo en el segundo monitor, para que los trabajadores de la otra sala sepan cuanto tiempo les queda para hacer sus tareas.

Lo de como quiero determinar el área a ampliar, me gustaria poder seleccionar el area de pantalla a ampliaR y que el área seleccionada (reloj) se viera en el otro monitor.Lo del ratón lo descarto por que los usuarios del monitor principal lo estaran moviendo constantemente.

Lepe no me importa que pierda calidad, con que puedan ver el reloj me sobra, de todas formas gracias por la idea.

Un saludo a todos mirare los hilos que me habéis recomendado a ver si saco algo en claro.
__________________
Y ahora puedes aprender truquillos de windows en http://nbull.clubdelphi.com.
Responder Con Cita
  #6  
Antiguo 19-04-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Bueno, si no queda mas remedio que usar el zoom, usemoslo

Una primera aproximacion podria ser esta:
Código:
var
  SrcWindow: THandle;
  SrcDC: HDC;
begin
  // Borramos toda la superficie de dibujo
  Canvas.FillRect(Canvas.ClipRect);
  SrcWindow:= GetDesktopWindow;  
  if SrcWindow <> 0 then
  begin
    SrcDC:= GetDC(SrcWindow);
    if SrcDC <> 0 then
    try
      // Copiaria el area de la pantalla comprendida entre 0,0 y 100,100
      StretchBlt(Canvas.Handle,0,0,Width,Height,SrcDC,0,0,100,100,SRCCOPY);
    finally
      ReleaseDC(SrcWindow,SrcDC);
    end;
  end;
end;
Esto colocado dentro de un Timer nos copiaria el area que deseamos, ajustada al tamaño del form.

Pero seria mas adecuado definir las coordenadas con respecto a la esquina superior izquierda de la aplicacion a vigilar y no con respecto a la esquina de la pantalla, asi que podriamos usar algo como esto:

Código:
  // Cambiamos esta linea
  SrcWindow:= GetDesktopWindow;
  // Por esta otra
  SrcWindow:= FindWindow(nil,'Titulo');
  // Donde titulo es el titulo de la ventana a controlar
Y si le queremos dar otra vuelta de tuerca, habras notado que el codigo anterior muestra un desgradable parpadeo. Pues podemos solucionando usando un bitmap en un paso intermedio

Algo asi:
Código:
var
  SrcWindow: THandle;
  SrcDC: HDC;
  Bmp: TBitmap;
begin
  Bmp:= TBitmap.Create;
  try
    Bmp.Width:= Width;
    Bmp.Height:= Height;
    Bmp.Canvas.Brush.Color:= clBlack;
    Bmp.Canvas.FillRect(Bmp.Canvas.ClipRect);
    //SrcWindow:= GetDesktopWindow;
    SrcWindow:= FindWindow(nil,'Titulo');
    if SrcWindow <> 0 then
    begin
      SrcDC:= GetDC(SrcWindow);
      if SrcDC <> 0 then
      try
        StretchBlt(Bmp.Canvas.Handle,0,0,Width,Height,SrcDC,0,0,100,100,SRCCOPY);
      finally
        ReleaseDC(SrcWindow,SrcDC);
      end;
    end;
    Canvas.Draw(0,0,Bmp);
  finally
    Bmp.Free;
  end;
Ahora solo te queda poner el codigo que mas te guste en el evento de un timer, con un intervalo de 200 milisegundos por ejemplo, y acertar con las coordenadas correctas y ya esta.

Espero que te sirva
Responder Con Cita
  #7  
Antiguo 15-05-2006
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Hola de nuevo, perdonar que reabra el hilo despues de tres semanas, pero, es que me ha surjido un problema.

He hecho el programa de la siguiente manera:

1º) Me sale un formulario con una captura de pantalla en la cual puedo seleccionar la parte de la pantalla que quiera hacerle zoom.(Gracias Seoane)

2º) Tengo un TtrackBar para saber que tamaño de zoom quiero hacer, 2x 4x etc...

3º) Un Botón para hacer el zoom.Cuando yo pulso el botón me abre un formulario en el cual hay un timer con el siguiente código:

Código Delphi [-]
   procedure TFzoom.Timer1Timer(Sender: TObject);
var
  Srect,Drect:TRect;
  iWidth,iHeight:Integer;
  iTmpX,iTmpY:Real;
  C:TCanvas;
  hDesktop: Hwnd;
begin
 If not IsIconic(Application.Handle) then begin
  hDesktop:= GetDesktopWindow;
   iWidth:=Image1.Width;
   iHeight:=Image1.Height;
   Drect:=Rect(0,0,iWidth,iHeight);
    iTmpX:=iWidth / (Fprincipal.Slider.Position * 4);
    iTmpY:=iHeight / (Fprincipal.Slider.Position * 4);
    Srect:=Rect(Fprincipal.Left,Fprincipal.Top,Fprincipal.Right,Fprincipal.Bottom);
    InflateRect(Srect,Round(iTmpX),Round(iTmpY));
   
    If Srect.Left<0 then OffsetRect(Srect,-Srect.Left,0);
    If Srect.Top<0 then OffsetRect(Srect,0,-Srect.Top);
    If Srect.Right>Screen.Width then OffsetRect(Srect,-(Srect.Right-Screen.Width),0);
    If Srect.Bottom>Screen.Height then OffsetRect(Srect,0,-(Srect.Bottom-Screen.Height));
   C:=TCanvas.Create;
   try
     C.Handle:=GetDC(GetDesktopWindow);
     Image1.Canvas.CopyRect(Drect,C,Srect);
    finally
      ReleaseDC(hDesktop, C.Handle);
      C.Free;
    end;
   Application.ProcessMessages;
 end;

El problema es que cada segundo me amplia más la pantalla y al final no se ve nada mas que la pantalla negra.

Y yo lo que quiero es que me la amplie una vez y que cada segundo me refresque la imagen seleccionada en el form anterior para poder ver el reloj.

Otra cosa que me pasa es que no me amplia el programa que hay detras del mio, sino que me amplia el mio, y yo lo que necesito es que me amplie el programa donde esta el reloj de cuenta atrás.

Por cierto he provado con el código de arriba de seoane y no consigo que no me parpadee.

Tampoco entiendo esta sentencia del código de seoane:
Código Delphi [-]
StretchBlt(Bmp.Canvas.Handle,0,0,Width,Height,SrcDC,0,0,100,100,SRCCOPY);

¿Para que sirve StretchBlt?
Tengo las coordenadas Top,Left,Bottom y Right del reloj que quiero capturar¿Donde meto mis coordenadas en esa sentencia?

Gracias por vuestra ayuda.
Un Saludo.
__________________
Y ahora puedes aprender truquillos de windows en http://nbull.clubdelphi.com.

Última edición por Nbull fecha: 15-05-2006 a las 20:07:12.
Responder Con Cita
  #8  
Antiguo 15-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Vamos por partes, como dijo Jack el destripador

Primero, para que veas los diferentes metodos que se pueden usar para hacer un zoom aqui te dejo un ejemplo. En el encontraras 3 formas de hacer lo mismo, el primero copia un zona de la pantalla directamente, el segundo borra primero antes de copiar (produciendo el parpadeo) y el tercero utiliza un buffer para evitar el parpadeo.

Segundo, no se porque en tu ejemplo la imagen se va agrandando (yo lo probe y me funciona bien) pero puede que estes intentando hacer zoom sobre la propia imagen del zoom, lo que provocaria ese efecto.

Tercero, StretchBlt es una funcion de la API de windows, mira la ayuda para saber como funciona, pero basicamente hace algo muy parecido a copyRect (de echo internamente creo que CopyRect llama a la funcion StretchBlt).

Y por ultimo, no se puede ampliar el contenido de un formulario que esta tapado por otro, lo que se ve es lo que hay, si no lo puedes ver no lo puedes copiar, ni ampliar, etc ... Echale un vistazo al ejemplo haber si te sirve para algo.
Archivos Adjuntos
Tipo de Archivo: zip Ejemplo19.zip (3,9 KB, 184 visitas)
Responder Con Cita
  #9  
Antiguo 18-05-2006
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Muchas gracias Seoane, por fin lo consegui, me ha costado pero lo he conseguido y todo gracias a ti.

Lo que me pasaba es lo que tu me dijiste hacia zoom sobre mi propio formulario, por eso me pasaba ese efecto.

Ya me funciona.Gracias de nuevo.

Un saludo.
__________________
Y ahora puedes aprender truquillos de windows en http://nbull.clubdelphi.com.
Responder Con Cita
  #10  
Antiguo 15-01-2023
esublim esublim is offline
Miembro
 
Registrado: dic 2022
Posts: 40
Poder: 0
esublim Va por buen camino
Cita:
Empezado por seoane Ver Mensaje
Vamos por partes, como dijo Jack el destripador

Primero, para que veas los diferentes metodos que se pueden usar para hacer un zoom aqui te dejo un ejemplo. En el encontraras 3 formas de hacer lo mismo, el primero copia un zona de la pantalla directamente, el segundo borra primero antes de copiar (produciendo el parpadeo) y el tercero utiliza un buffer para evitar el parpadeo.

Segundo, no se porque en tu ejemplo la imagen se va agrandando (yo lo probe y me funciona bien) pero puede que estes intentando hacer zoom sobre la propia imagen del zoom, lo que provocaria ese efecto.

Tercero, StretchBlt es una funcion de la API de windows, mira la ayuda para saber como funciona, pero basicamente hace algo muy parecido a copyRect (de echo internamente creo que CopyRect llama a la funcion StretchBlt).

Y por ultimo, no se puede ampliar el contenido de un formulario que esta tapado por otro, lo que se ve es lo que hay, si no lo puedes ver no lo puedes copiar, ni ampliar, etc ... Echale un vistazo al ejemplo haber si te sirve para algo.

y alguien tiene idea de como hacerlo en firemonhkey?
Responder Con Cita
  #11  
Antiguo 15-01-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.020
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, deja de repetir lo mismo en distintos hilos, lee nuestra guía de estilo, gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pantalla Buena servicomp Varios 5 20-07-2004 19:27:46
Imágenes con zoom mutant09 Gráficos 2 28-05-2004 20:11:34
Zoom a los componentes que se encuentran dentro de una form Majo Gráficos 1 16-03-2004 22:00:27
Zoom de Imágenes Mariana Varios 2 14-09-2003 07:33:19
Zoom con Delphi6 en XP de un TRichEdit Beckham Varios 3 08-08-2003 22:02:13


La franja horaria es GMT +2. Ahora son las 10:50:17.


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