Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранить скриншот неактивной формы


denkop ©   (2011-09-08 18:30:00) 

Есть некоторая форма, которая ещё ни разу не открывалась после запуска программы. Возможно ли сохранить скриншот этой формы чтобы не показывать её пользователю?


denkop   (2011-09-22 14:39:00) [1]

проблема решена, как обычно оказалось всё гораздо проще чем на самом деле

Draws the windowed control to a device context.

Delphi syntax:

procedure PaintTo(DC: HDC; X, Y: Integer);

C++ syntax:

void __fastcall PaintTo(HDC DC, int X, int Y);

Description

Call PaintTo to draw the control on a device context. Specify the device context as the value of the DC parameter and specify the X and Y coordinates on the device context where the top-left corner of the windowed control is to be drawn. PaintTo first erases the background of the device context and then paints the control.

PaintTo is useful for drawing an image of the control into a bitmap DC.

Warning: When using PaintTo to draw on a canvas, you must lock the canvas first (and unlock it after the call to PaintTo. If you do not lock the canvas, Windows calls that occur while the control is painting can cause the canvas to lose its handle.


всем спасибо!


brother   (2011-09-19 06:02:00) [2]

> может получится

а зачем гадать на кофейной гуще?


Sam Bellamy   (2011-09-16 15:13:00) [3]

попробуйте  Forms.Screen.CustomForms[FormIndex].GetFormImage; может получится


brother   (2011-09-16 03:39:00) [4]

кстати да, 7 меняет ситуацию


DVM   (2011-09-16 00:12:00) [5]


> brother ©   (14.09.11 04:17) [5]


> что не актиное окно не обязано быть отрисовано полностью
> или вообще быть отрисовано? что-то изменилось?

в Win7 по всей видимости изменилось, иначе бы на панели задач не было бы превьюшек окон в подсказках всплывающих.


brother   (2011-09-14 04:17:00) [6]

> WM_PRINT - но не факт что целиком получишьизображение...

так вроде уже обсуждали, что не актиное окно не обязано быть отрисовано полностью или вообще быть отрисовано? что-то изменилось?


han_malign   (2011-09-09 15:33:00) [7]

тогда WM_PRINTCLIENT можно попробовать
procedure TWinControl.WMPrintClient(var Message: TWMPrintClient);
begin
 with Message do
   if Result <> 1 then
     if ((Flags and PRF_CHECKVISIBLE) = 0) or Visible then
       PaintHandler(TWMPaint(Message))
     else
       inherited
   else
     inherited;
end;

procedure TWinControl.PaintHandler(var Message: TWMPaint);
...
begin
 DC := Message.DC;
 if DC = 0 then DC := BeginPaint(Handle, PS);
 .......

- а можно тупо - через трюк доступа к protected методу - PaintHandler вызвать...


Cobalt   (2011-09-09 15:21:00) [8]

Есть подозрение, что вы пытаетесь сделать что-то необычное.
с TPageControl скорее всего придется его переключить.


denkop   (2011-09-09 13:21:00) [9]

В реальной задаче это одна из вкладок TPageControl, с этим как быть, подскажите.


Rouse_   (2011-09-08 19:11:00) [10]

WM_PRINT - но не факт что целиком получишь изображение...
Обычно двигают ее по отрицательным координатам и там уже BitBlt()


Наверх

Титульная страница Поиск, карта сайта Написать письмо