Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.05;
Скачать: CL | DM;

Вниз

Как сделать снимок(скриншот) формы во время исполнения?   Найти похожие ветки 

 
Starkom   (2002-08-26 14:02) [0]

Есть хранилище форм в БД, и надо сделать функцию превью, которая бы просто отображала внешний вид формы.
Как это сделать лучше?
Форма сама сконструированная есть. По идее, взять канвас и как-нибудь этот канвас отобразить в превью-панели. А вот как?


 
Skier ©   (2002-08-26 14:05) [1]

>Starkom
TForm.GetFormImage ?


 
Starkom   (2002-08-26 14:18) [2]

2 Skier:
спасибо, НО результат не совсем ожидаемый. На полученном отображении формы не отрисованы самописные компоненты. Это очень плохо, и непонятно почему так происходит.


 
Skier ©   (2002-08-26 14:49) [3]

>Starkom

Не поможет ?


function GetFormExImage(const AForm : TForm) : TBitmap;
begin
Result := nil;
if AForm = nil then Exit;
Result := TBitmap.Create;
Result.Height := AForm.ClientHeight;
Result.Width := AForm.ClientWidth;
Result.Canvas.Brush := AForm.Brush;
Result.Canvas.FillRect(AForm.ClientRect);
Result.Canvas.Lock;
try
Result.Canvas.CopyRect(Rect(0,
0,
Result.Width,
Result.Height),
AForm.Canvas,
AForm.ClientRect);
finally
Result.Canvas.UnLock;
end; //try
end; //GetFormExImage


//......................



procedure TForm1.Button2Click(Sender: TObject);
var
ABitmap : TBitmap;
begin
//......................
ABitmap := GetFormExImage(Self);
if ABitmap <> nil then begin
ABitmap.SaveToFile("C:\###\FormImage.bmp");
ABitmap.Free;
end; //if
//......................
end;


 
Starkom   (2002-08-27 07:55) [4]

2 skier: :)) спасибо за пример, но дело в том, что формы то самой не видно на экране. Она сконструирована в памяти, но отображать ее не надо, и даже нельзя. Для того то и делается превью.


 
Alx2 ©   (2002-08-27 08:08) [5]

посмотри метод PaintTo


 
Starkom   (2002-08-27 08:18) [6]

2 alx2:
Не совсем разобрался с методом. Делаю так:
bmp:=TBitmap.Create();
tempForm.PaintTo(bmp.Handle,10,10);
DepositPreviewForm.Image1.Picture.Bitmap:=bmp;
DepositPreviewForm.Show;

Ничего не происходит. tempForm как раз нужная невидимая форма, снимок которой надо получить.


 
Starkom   (2002-08-27 08:21) [7]

посмотрел исходники GetFormImage:
PaintTo там и используется. А результат несовсем верен.



 
Alx2 ©   (2002-08-27 08:23) [8]

Form2 еще не видна, но в Image, находящимся, например, на Form1, можно получить ее изображение, повесив на какую-нибудь кнопку из Form1 следущее:
Form2.PaintTo(Image1.Canvas,0,0);


 
Alx2 ©   (2002-08-27 08:26) [9]

>Starkom (27.08.02 08:21)
Действительно :) Кое-что прорисовывается только при наличии видимой формы.


 
Starkom   (2002-08-27 08:53) [10]

в procedure TWinControl.PaintTo(DC: HDC; X, Y: Integer);
есть такой код -
if FWinControls <> nil then
for I := 0 to FWinControls.Count - 1 do
with TWinControl(FWinControls[I]) do
if Visible then PaintTo(DC, Left, Top);

Проблема в том, что в FWinControls не добавляются компоненты, потому то они и не отрисовываются. Почему в FWinControls их нет, непонятно. Как правильно добавлять компоненты?
У меня это делается так:
Grd:=TMyGrid.Create(Form); // TMyGrid-наследник TGrid. Form:TMyForm-наследник TForm.
ну и потом парентом выставляется TabSheet.
При таком коде вызывается TControl.Insert(), а в FWinControls компоненты вставляются при вызове TWinControl.Insert()!




 
Alx2 ©   (2002-08-27 10:13) [11]

>Starkom (27.08.02 08:53)
Нужно обязательно чтобы у формы visible=true. Либо писать наследника формы.
Так получается, потому-что wincontrolы дохнут для Windows при visible=false и возрождаются при visible=true.

PS Детально не въезжал. Но истина где-то рядом :)


 
Starkom   (2002-08-27 11:18) [12]

:))
сделал
tempForm.Left:=-10000;
tempForm.Show;
bmp:=tempForm.GetFormImage;
и все заработало!
2 skier & Alx2: спасибо огромное.



Страницы: 1 вся ветка

Текущий архив: 2002.09.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
1-14162
Lamer86
2002-08-25 15:42
2002.09.05
Procedure


14-14218
Basic
2002-08-08 10:20
2002.09.05
Кто знает как работать с UUCP


3-13876
Natalie
2002-08-14 20:27
2002.09.05
проблема с отчетами


1-14161
Lamer86
2002-08-25 15:34
2002.09.05
UpperCase


3-13967
Andrew!
2002-08-16 12:42
2002.09.05
Страшная история! Вопрос про таблицы Paradox 4