Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1212567065
silvestr
2008-06-04 12:11
2008.07.20
Выложите функцию DirectoryExists


2-1213696082
checkmate-maker
2008-06-17 13:48
2008.07.20
Мерцание tImage


15-1212700281
progredi
2008-06-06 01:11
2008.07.20
Wi-Fi


2-1213894982
DJ_UZer
2008-06-19 21:03
2008.07.20
Ускорение запуска программы


3-1202809800
wild_arg
2008-02-12 12:50
2008.07.20
восстановление БД





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский