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

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

Как програмно сделать ПринтСкрин?


Zonder2008 ©   (2008-06-16 09:32:00) 

Как програмно сделать ПринтСкрин формы а еще лучше отдельных ее компонентов, скажем Мемо?


korneley   (2008-06-17 12:44:00) [1]


> {RASkov} ©   (17.06.08 11:56) [9]
> [1] - ведь тоже самое :)

Не совсем :) Выделение памяти, конечно, и там и там происходит "внутре", но первое - метод класса, во втором случае имеем функцию ни к какому классу не относящуюся. При "ненаступании" - без разницы, но в первом случае проще (как мне кажется) отнестись к методу, как к Create;)


{RASkov}   (2008-06-17 11:56:00) [2]

> [8] kivadim   (16.06.08 15:58)
> извини если что не так, просто помог человеку.

Подсунул ему грабли :)

> [7] korneley ©   (16.06.08 15:47)

[1] - ведь тоже самое :)

В прочем, это всего лишь грабли и просто не нужно на них наступать...


kivadim   (2008-06-16 15:58:00) [3]

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


korneley   (2008-06-16 15:47:00) [4]


> kivadim   (16.06.08 14:28) [6]
> >> korneley ©   (16.06.08 10:25) [4]не понял в чем причина
> недовольства?

Причина:
 В разделе "Начинающим",  использовать создание объекта внутри функции, возвращающей ссылку на созданный внутри неё объект - воспитание камикадзе (имхо, естественно) Автор топика скопирует код, а потом будет жаловаться: "Куда память утекает?" Скопировать пример с "Мечты вуайериста - чужие окна" не сложно, сложно потом с такими "коллегами" работать.


kivadim   (2008-06-16 14:28:00) [5]

>> korneley ©   (16.06.08 10:25) [4]

не понял в чем причина недовольства?


korneley   (2008-06-16 10:42:00) [6]


> Zonder2008   (16.06.08 10:23) [3]

Можно так, например:
bmp := WindowToBMP(memo1.Handle);
Удачи... Только не забудь потом объект, функцией созданный, удалить. "Каждый умирает той смертью, которую выбрал сам" (с) БГ


korneley   (2008-06-16 10:25:00) [7]


> kivadim   (16.06.08 10:07) [2]
>   Result := TBitmap.Create;

Это сейчас считается хорошим тоном или просто, так сказать, невзирая на текст, скопипастили?


Zonder2008   (2008-06-16 10:23:00) [8]

kivadim   (16.06.08 10:07) [2]

А можете привести пример вызова вашей функции например для Memo1? Ато я не совсем понял - это дексриптор (WD: HWND ) ? Как узнать его?


kivadim   (2008-06-16 10:07:00) [9]


Function WindowToBMP(WD: HWND ): TBitmap;
Var
WinDC: HDC;
ARect   : TRect;
begin
   Result := TBitmap.Create;             // Создаем рисунок, куда будем копировать
   GetWindowRect(WD, ARect);             // Узнаем размер
   with Result, ARect do
   begin
       Width := ARect.Right - ARect.Left;
       Height := ARect.Bottom - ARect.Top;
       If (Width=0) or (Height=0) then
       Begin
           MessageDlg('Размер области формы равен нулю',
           mtWarning,[mbOk],0);  // А вдруг у него нет размера ???
           Exit;       // Тогда выходим
       End;
       WinDC:=GetWindowDC(Wd);                // получаем для окна контекст устройства
       ShowWindow(Wd, SW_SHOW);               // на всякий случай выведем окно
       BringWindowToTop(WD);                  // и поместим поверх окон
       try
       // копируем оттуда прямоугольную область на канву
       // растрового изображения
           BitBlt( Canvas.Handle, 0, 0, Width, Height, WinDC,  0, 0, SRCCOPY);
       finally
       end;
   end;

end;


korneley   (2008-06-16 09:45:00) [10]

Form1.GetFormImageИ делайте с этим битмапом, всё, что угодно. Програмно.


Наверх

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