PDA

Ver la Versión Completa : Imagen de una zona de un formulario.


rocio84
22-08-2006, 13:55:50
Hola, me gustaria saber si existe alguna forma en delphi de generar una imagen de una zona en concreto de un formulario, como por ejemplo un panel, o un frame que esta incluido en el. Gracias, un saludo.

Bicho
22-08-2006, 14:06:17
Hola Rocio, puedes usar el component TImage que es para esos menesteres, y si lo que quieres es crear un TImage en otro componente como un panel como indicas, lo que debes hacer es algo así:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
imagen : TImage;

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
imagen := TImage.Create(Panel1);
imagen.Parent := Panel1;
imagen.Picture.LoadFromFile('X:\Imagenes\2espgi2.bmp');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
imagen.Free;
end;

end.

Es un pequeño esbozo, pero sirve para empezar, creas una variable del tipo TImage, la creas y lo importante es asignarle el parent, con la imagen aparecerá sobre el panel, luego ya puedes jugar con las propiedades left y top para colocarlo donde quieras.

Espero te sirva.

Saludos

rocio84
22-08-2006, 15:16:00
Bueno, creo q no me he explicado bien, lo que quiero es crear una imagen del panel y guardarla en un fichero, no cargar una imagen desde el fichero en un panel. Se hacerlo para un formulario completo, pero lo que quiero es hacerlo de una zona de este. Pero muchas gracias de todas formas bicho.

seoane
22-08-2006, 15:23:39
Prueba con esto:


uses jpeg;

procedure Capturar(Filename: string; Panel: TPanel);
var
SrcWindow: THandle;
SrcDC: HDC;
Bitmap: TBitmap;
Jpg: TJPEGImage;
begin
SrcWindow:= Panel.Handle;
if SrcWindow <> 0 then
begin
SrcDC:= GetDC(SrcWindow);
if SrcDC <> 0 then
begin
Bitmap:= TBitmap.Create;
Jpg:= TJPEGImage.Create;
try
Bitmap.Width:= Panel.Width;
Bitmap.Height:= Panel.Height;
BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height,SrcDC,0,0,SRCCOPY);
Jpg.CompressionQuality:= 60;
Jpg.Assign(Bitmap);
Jpg.SaveToFile(Filename);
finally
Bitmap.Free;
Jpg.Free;
ReleaseDC(SrcWindow,SrcDC);
end;
end;
end;
end;


// Ejemplo de como usar la funcion
Capturar('c:\1.jpg',Panel1);


¿Acerté con lo que querías?

seoane
22-08-2006, 15:39:25
Aunque puede que esta otra forma de hacerlo te resulte mejor:


procedure Capturar(Filename: string; Panel: TPanel);
var
FormImage: TBitmap;
Bitmap: TBitmap;
Jpg: TJPEGImage;
begin
if Panel.Owner is TForm then
begin
FormImage := TForm(Panel.Owner).GetFormImage;
Bitmap:= TBitmap.Create;
Jpg:= TJPEGImage.Create;
try
Bitmap.Width:= Panel.Width;
Bitmap.Height:= Panel.Height;
BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height,
FormImage.Canvas.Handle,Panel.Left,Panel.Top,SRCCOPY);
Jpg.CompressionQuality:= 60;
Jpg.Assign(Bitmap);
Jpg.SaveToFile(Filename);
finally
FormImage.Free;
Bitmap.Free;
Jpg.Free;
end;
end;
end;

rocio84
22-08-2006, 17:14:23
si, eso es, muchas gracias me ha sido de gran ayuda.