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

Вниз

Как програмно сделать ПринтСкрин?   Найти похожие ветки 

 
Zonder2008   (2008-06-16 09:32) [0]

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


 
korneley ©   (2008-06-16 09:45) [1]

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


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


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;


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

kivadim   (16.06.08 10:07) [2]

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


 
korneley ©   (2008-06-16 10:25) [4]


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

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


 
korneley ©   (2008-06-16 10:42) [5]


> Zonder2008   (16.06.08 10:23) [3]

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


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

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

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


 
korneley ©   (2008-06-16 15:47) [7]


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

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


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

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


 
{RASkov} ©   (2008-06-17 11:56) [9]

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

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

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

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

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


 
korneley ©   (2008-06-17 12:44) [10]


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

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



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

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

Наверх




Память: 0.49 MB
Время: 0.021 c
15-1212613751
oldman (RO)
2008-06-05 01:09
2008.07.20
Что-то связь действительно никуда...


6-1190627383
BOBik
2007-09-24 13:49
2008.07.20
WinSock и Disconnect


15-1212376681
Slider007
2008-06-02 07:18
2008.07.20
С днем рождения ! 2 июня 2008 понедельник


2-1213887146
Res
2008-06-19 18:52
2008.07.20
файл и потоки


15-1212562601
БарЛог
2008-06-04 10:56
2008.07.20
И еще раз о корзине в магазине...