Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-04-2015
deliriun deliriun is offline
Miembro
 
Registrado: ago 2014
Posts: 51
Poder: 10
deliriun Va por buen camino
Question Ver resolución y Capturar pantalla

Hola qué tal ? ... me presento mi nombre es Francisco.

Tengo la siguiente duda.

Estoy trabajando en un Form que tiene la propiedad TransparentColor = clGreen activa y de Color de Form = clGreen ya se daran cuenta como se ve el Form ( Totalmente transparente ) y bien ¿Por qué?... Simple lo que quiero lograr con este Form es que el espacio transparente capture ( Tome una foto ) . Me puse a investigar y encontre un codigo que funciona casi bien.
Código Delphi [-]
Unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm2 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}
       
procedure CapturarPantalla( x, y, iAncho, iAlto: Integer; Imagen: TBitmap );
var
  DC: HDC;
  lpPal : PLOGPALETTE;
begin
  if ( iAncho = 0 ) OR ( iAlto = 0 ) then
    Exit;

  Imagen.Width := iAncho;
  Imagen.Height := iAlto;
  DC := GetDc( 0 );

  if ( DC = 0 ) then
    Exit;

  if ( GetDeviceCaps( dc, RASTERCAPS) and  RC_PALETTE = RC_PALETTE ) then
  begin
    GetMem( lpPal, SizeOf( TLOGPALETTE ) + ( 255 * SizeOf( TPALETTEENTRY ) ) );
    FillChar( lpPal^, SizeOf( TLOGPALETTE ) + ( 255 * SizeOf( TPALETTEENTRY ) ), #0 );
    lpPal^.palVersion := $300;
    lpPal^.palNumEntries := GetSystemPaletteEntries( DC, 0, 256, lpPal^.palPalEntry );

    if (lpPal^.PalNumEntries <> 0) then
      Imagen.Palette := CreatePalette( lpPal^ );

    FreeMem( lpPal, SizeOf( TLOGPALETTE ) + ( 255 * SizeOf( TPALETTEENTRY ) ) );
  end;

  BitBlt( Imagen.Canvas.Handle, (1360 - Form2.Width + 17 ), (768 - Form2.Height + 40),  iAncho, iAlto, DC, x, y, SRCCOPY );
  ReleaseDc( 0, DC );
end;

procedure TForm2.Timer1Timer(Sender: TObject);
var Imagen: TBitmap;
begin
  Imagen := TBitmap.Create;
  CapturarPantalla((form2.Left + 8) , (form2.Top + 31) ,  Screen.Width, Screen.Height, Imagen );
  Imagen.SaveToFile( ExtractFilePath( Application.ExeName ) + 'captura.bmp' );
  Imagen.Free;
end;
end.
Les envito a los que no saben qué pasa con el codigo que lo prueben ( Se los agradesco un monton)

Mis problemas son 2 (Si alguien encuentra uno más por favor que me lo diga)

1° : Subraye una parte del codigo en que hay un problema , Para que el codigo funcione correctamente se debe saber la resolución exacta que esta usando el usuario por ejemplo la mia = 1360 x 768.
-Quisiera saber como obtner la resolución del usuario para usarlas en una variable y ponerla en el codigo.

2° : El otro problema es que captura el area indicada pero la imagen se guarda con un tamaño muy inmenso ( Se ve la parte que se deseaba capturar y el resto se completa con color blanco ) -Quisiera saber como hacer que solo se vea la parte deseada y no el relleno blanco.

Si alguien me puede ayudar se lo agradecería mucho ... De antemano gracias a todos

Última edición por nlsgarcia fecha: 23-04-2015 a las 04:43:38. Razón: Sintaxis Delphi
Responder Con Cita
  #2  
Antiguo 23-04-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Francisco,

Te sugiero revisar las opciones 3, 9 y 12 de la Guía de Estilo Estándar

¡Gracias por tu cooperación!

Saludos,

Nelson.
Responder Con Cita
  #3  
Antiguo 23-04-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola deliriun.

Aunque innecesario en este caso, la resolución definida se puede obtener de las propiedades DesktopWidth y DesktopHeight de la clase TScreen.
Código Delphi [-]
 with Screen do
    ShowMessage(Format('%d x %d',[DesktopWidth, DesktopHeight]));

Podes reescribir el procedimiento de este modo:
Código Delphi [-]
procedure CapturarPantalla(aForm: TForm; Imagen: TBitmap);
var
  DC: HDC;
  lpPal : PLOGPALETTE;
  R: TRect;
  p: TPoint;
begin
  R:= aForm.ClientRect;
  p:= aForm.ClientToScreen(Point(R.Left, R.Top));

  Imagen.Width  := R.Right - R.Left;
  Imagen.Height := R.Bottom - R.Top;

  DC := GetDc( 0 );
  if ( DC = 0 ) then  Exit;

  if ( GetDeviceCaps( dc, RASTERCAPS) and  RC_PALETTE = RC_PALETTE ) then
  begin
    GetMem( lpPal, SizeOf( TLOGPALETTE ) + ( 255 * SizeOf( TPALETTEENTRY ) ) );
    FillChar( lpPal^, SizeOf( TLOGPALETTE ) + ( 255 * SizeOf( TPALETTEENTRY ) ), #0 );
    lpPal^.palVersion := $300;
    lpPal^.palNumEntries := GetSystemPaletteEntries( DC, 0, 256, lpPal^.palPalEntry );

    if (lpPal^.PalNumEntries <> 0) then
      Imagen.Palette := CreatePalette( lpPal^ );

    FreeMem( lpPal, SizeOf( TLOGPALETTE ) + ( 255 * SizeOf( TPALETTEENTRY ) ) );
  end;

  BitBlt( Imagen.Canvas.Handle,
          0,
          0,
          Imagen.Width,
          Imagen.Height,
          DC,
          p.x,
          p.y,
          SRCCOPY );

  ReleaseDc( 0, DC );
end;

Ejemplo de llamada:
Código Delphi [-]
...
var
  Imagen: TBitmap;
begin
  Imagen := TBitmap.Create;
  try
    CapturarPantalla( Form2, Imagen );
    Imagen.SaveToFile( ExtractFilePath( Application.ExeName ) + 'captura.bmp' );
  finally
    Imagen.Free;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



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
Resolucion de pantalla hermes_32 Varios 5 13-06-2015 23:18:00
Resolución de Pantalla Neeruu Desarrollo en Delphi para Android 2 22-04-2014 10:35:26
Resolución de la pantalla washiloo C++ Builder 3 23-09-2011 18:20:40
Resolucion de pantalla oregon Windows 1 22-03-2007 15:09:43
Resolución de pantalla kalimero Varios 8 05-11-2003 21:41:47


La franja horaria es GMT +2. Ahora son las 08:25:44.


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