Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-05-2007
Pernorak Pernorak is offline
Miembro
 
Registrado: may 2007
Posts: 13
Poder: 0
Pernorak Va por buen camino
Convertir un form junto con sus controles en una imagen

Hola me preguntaba si es posible convertir una form junto con los controles que en ella se encuentran: TLabel, TEdit, ... etc.. en una imagen, de manera que en esa imagen tengamos la "foto" de la Form.

¿Se puede generalizar para cualquier control? Es decir, se puede tener la imagen (Bitmap ó similar) de un control cualquiera.

1 Saludo.
Responder Con Cita
  #2  
Antiguo 28-05-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Que tal algo así:

Código Delphi [-]
procedure SaveControlImage(Control: TWinControl; FileName: TFileName);
var
  DC: HDC;
  Bitmap: TBitmap;

begin
  Bitmap := TBitmap.Create;

  try
    Bitmap.Width := Control.Width;
    Bitmap.Height := Control.Height;

    DC := GetWindowDC(Control.Handle);
    BitBlt(Bitmap.Canvas.Handle, 0, 0, Control.Width, Control.Height, DC, 0, 0, SRCCOPY);
    ReleaseDC(Control.Handle, DC);

    Bitmap.SaveToFile(FileName);
  finally
    Bitmap.Free;
  end;
end;

// Saludos
Responder Con Cita
  #3  
Antiguo 29-05-2007
Pernorak Pernorak is offline
Miembro
 
Registrado: may 2007
Posts: 13
Poder: 0
Pernorak Va por buen camino
Hola roman, ante todo gracias por la idea que me has proporcionado, me ha abierto un camino nuevo sobre el que trabajar, por desgracia al estar en Delphi y yo usar Builder C++, hay cosas que no sirven. Voy a abrir otro hilo, mostrando una adaptación que he hecho de tu código para la creación de una aplicación que lo que hace es copiar la imagen de una form en un bitmap y pegarla como imagen en un nueva form.

Si tb le das al Builder C++ y me puedes ayudar sería genial.
1 Saludo.
Responder Con Cita
  #4  
Antiguo 29-05-2007
Pernorak Pernorak is offline
Miembro
 
Registrado: may 2007
Posts: 13
Poder: 0
Pernorak Va por buen camino
Ya lo he conseguido. Aqui dejo el código que permite obtener una imagen de una form y pegarla en otra form dentro de un control TImage:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
//Obtenemos la imagen de la Form1
Graphics::TBitmap *BitmpPrueba = Form1->GetFormImage();

//Pegamos el Bitmap en una nueva form a través del Clipboard
Clipboard()->Assign(BitmpPrueba);
Form2->ImgForm1->Picture->Assign(Clipboard());
//La mostramos
Form2->Show();

delete BitmpPrueba;
}

Todo esto lo hace al pulsar un botón que hay en la Form1, en la Form2 he colocado un TImage que ocupa todo el área de la Form, cuando pulsas el botón en la Form1, aparece la Form2 igual, en apariencia que la Form1, pero sus controles no se pueden usar, ya que son una foto.

De todas maneras sigue sin servirme para imprimir mi Expediente, porque misteriosamente, el texto d los RichEdit no aparece, si el del resto de controles... a pesar de que se supone que es una captura de la imagen de la form.
Responder Con Cita
  #5  
Antiguo 29-05-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Pernorak
De todas maneras sigue sin servirme para imprimir mi Expediente, porque misteriosamente, el texto d los RichEdit no aparece, si el del resto de controles... a pesar de que se supone que es una captura de la imagen de la form.
Pues yo lo he probado en Delphi y funciona bien, ya sea capturando todo el formulario o sólo el RichEdit

// Saludos
Responder Con Cita
  #6  
Antiguo 29-05-2007
Pernorak Pernorak is offline
Miembro
 
Registrado: may 2007
Posts: 13
Poder: 0
Pernorak Va por buen camino
Hola roman, debe de ser porque yo estoy usando el Clipboard, y tu usas el Handle de Windows... ¡Tiene que ser eso! .. uff, el problema es que yo no sé usar el Handle.. y no encuentro la método equivalente a BitBlt(...) para Builder. Asi como el método equivalente a GetWindowDC

¿Algún buen samaritano que sepa que método en Builder realiza la misma operación que la función BitBlt() y que GetWindowDC en Delphi?

BiBlt() al parecer copia en el Canvas.Handle del Bitmap el contenido del control cuyo DC se le pasa com parámetro, ¿Que obtiene exactamente GetWindowDC?, es decir que significa DC. No entiendo muy bien la filosofia del Handle con las imágenes..


mmm..se que estoy cerca, a ver si me pueden ayudar a despegar
Responder Con Cita
  #7  
Antiguo 29-05-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
BitBly y GetWindowDC no son funciones de Delphi, sino de la AI de Windows, de manera que deben servir igual en BC. GetWindowDC obtiene un Dispositivo de Contexto, que es donde las funciones de Windows pueden dibujar. A diferencia de GetDC, GetWindowDC obtiene un dispositivo de contexto para toda la ventana incluyendo las barras de título y de desplazamiento. GetDC sólo sirve para el área cliente.

// Saludos
Responder Con Cita
  #8  
Antiguo 30-05-2007
Pernorak Pernorak is offline
Miembro
 
Registrado: may 2007
Posts: 13
Poder: 0
Pernorak Va por buen camino
Hola roman, ¡Por fin lo he conseguido! Efectivamente, el código no distaba mucho de lo que tu me comentabas, las funciones
BitBlt(...), GetWindowDC(...) y ReleaseDC(...) funcionan igual para el Builder. Así que por fin he podido obtener la imagen del Expediente completa incluyendo el dichoso texto de los controles RichEdit. La he imprimido y sale todo, todito, todo

Me falta hacer una serie de ajustes y poco más..uff por fin puedo seguir trabajando con el proyecto.
¡¡Muchiiiisiiiimas Gracias roman!! Si aqui se pudiera votar las respuestas te pondría un 10
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
Borrar controles de mi form. Bill Varios 1 04-11-2006 01:25:35
convertir un form en un frame ercrizeporta Varios 6 04-07-2005 21:52:58
Convertir archivos de imagen. alfredosg19 Varios 4 15-06-2005 10:26:44
convertir una imagen CMYK a RGB User_baja1 Gráficos 0 23-03-2005 17:03:03
Contar controles en un form worf_argentino Varios 2 24-01-2005 05:56:36


La franja horaria es GMT +2. Ahora son las 10:13:54.


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