Форум: "Начинающим";
Текущий архив: 2008.07.20;
Скачать: [xml.tar.bz2];
ВнизКак програмно сделать ПринтСкрин? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c