Ver Mensaje Individual
  #7  
Antiguo 15-05-2006
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Reputación: 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 19:07:12.
Responder Con Cita