Club Delphi  
    Paypal   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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #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: 26
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
 


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 18:27:46
Imágenes con zoom mutant09 Gráficos 2 28-05-2004 19:11:34
Zoom a los componentes que se encuentran dentro de una form Majo Gráficos 1 16-03-2004 21:00:27
Zoom de Imágenes Mariana Varios 2 14-09-2003 06:33:19
Zoom con Delphi6 en XP de un TRichEdit Beckham Varios 3 08-08-2003 21:02:13


La franja horaria es GMT +2. Ahora son las 05:14:23.


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