PDA

View Full Version : فرم



شفیعی
چهارشنبه 25 شهریور 1383, 05:19 صبح
سلام
چگونه می توان یک فرم را تبدیل به تصویر نمود ویا از روی یک فرم یک فایل BITMAP ساخت

hr110
چهارشنبه 25 شهریور 1383, 09:30 صبح
با سلام
توی یکی از پروژه ها مجبور شدم که این کار را انجام بدهم، برای این منظور یک فرم ایجاد کردم که در آن تنها یک TTabControl بود. تمامی کنترلهای صفحه را در آن TabControl مجدداً درج (insert) کردم و بعد از آن از canvas آن استفاده نموده و در canvas یک TImage کپی کردم، البته فرمهای من خیلی بزرگ بود و برای همین بعد از کپی فرم آنرا اسکرول کرده و در ادامه TImage کپی مینمودم.

ممکن است راه بهتری هم باشد ولی از این بهتر نمیشه :flower:

کدی که از تب کنترل به یک ایمیج کپی میکند:


procedure TFormSaver.SaveToFile(FileName:string);
var
I : Integer;
R2 : TRect;
begin
Image1.Width:=TabControl1.Width;
Image1.Height:=TabControl1.Height;
R2:=Rect(0,0,TabControl1.Width,Height);
TabControl1.Top:=0;
I:=0;
while True do
begin
TabControl1.Top:=-I;
Sleep(100);
Application.ProcessMessages;
Image1.Canvas.CopyRect(R2,TabControl1.Canvas,R2);
I:=I+Height;
R2:=Rect(0,I,TabControl1.Width,I+Height);
if I>TabControl1.Height then Break;
end;
Image1.Picture.SaveToFile(FileName);
end;

و کدی که برای درج کنترلها در تب کنترل استفاده شده است:


var
FileName : string;
I,MaxH : Integer;
Cntr : TControl;
FS : TFormSaver;
begin
SaveDialog2.Filter:='bitmap files|*.bmp';
SaveDialog2.DefaultExt:='bmp';
if not SaveDialog2.Execute then Exit;
FileName:=SaveDialog2.FileName;

Application.CreateForm(TFormSaver,FS);
// DtEn -> TForm
FS.Width:=DtEn.Width;
FS.Height:=DtEn.Height;
MaxH:=0;
for I:=0 to DtEn.ControlCount-1 do
begin
Cntr:=DtEn.Controls[I];
Cntr.Top:=Cntr.Top+20;

FS.TabControl1.InsertControl(Cntr);

if MaxH<Cntr.Top+Cntr.Height then
MaxH:=Cntr.Top+Cntr.Height;
end;
FS.TabControl1.Height:=MaxH+10;
FS.Show;
FS.SaveToFile(FileName);
FS.Free;
ShellExecute(GetDesktopWindow(), 'open',PChar(FileName), nil, nil,SW_SHOWNORMAL);
end;