Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение скрина окна и HDC. 
:(
    Опции темы
IWTK
Дата 29.4.2010, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.7.2009

Репутация: нет
Всего: нет



Привет всем. Мне нужно сделать скриншот чужого окна. Получить его DC, и потом коечто нарисовать на этом окне.
Получаю скрин при помощи PrintWindow.
Но если писать так PrintWindow(HWND, DC, 0); то не работает. DC я не могу получить.
А если вот так PrintWindow(HWND, image1.canvas.handle, 0); то работает хорошо.
решил воспользоваться для рисования на чужом окне функцией StretchBLt, но еще толком сней не разобрался.

Если можно так. помогите мне получить dc окна. и потом на нем нарисовать картинку. Текс без проблем рисуеться а вот как картинку нарисовать я почти не понял.
GETDC и GETWINDOWDC получает, но если окно перекрыто другим чем нибудь, то это плохо. Вот принтвиндов получает даже если оно и перекрыто.
PM   Вверх
IWTK
Дата 29.4.2010, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.7.2009

Репутация: нет
Всего: нет



Ребята что то я затупил по полной, а мб и нет.
Ведь если окна не видно зачем рисовать тогда? Правильно не надо. 
Так что с DC я справился сам.

Прошу Вас помочь в оставшемся вопросе. Как нарисовать картинку допустим из image1 на чудом окне?
PM   Вверх
Proxin
Дата 29.4.2010, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 21.6.2008

Репутация: нет
Всего: 3



bitblt и stretchblt. ищи в msdn описание этих функций.
PM MAIL   Вверх
IWTK
Дата 29.4.2010, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.7.2009

Репутация: нет
Всего: нет



а разве при помощи bitblt что нибудь на другом окне можно нарисовать? а есть еще какие нибудь функции?
PM   Вверх
IWTK
Дата 29.4.2010, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.7.2009

Репутация: нет
Всего: нет



И если не трудно то помогите еще с этой функцией.
 Так вот она объявлена
Код

Function PrintWindow(h:HWND; DC:HDC; nFlags:DWORD) : Bool; StdCall; External 'user32.dll';

implementation

{$R *.Dfm}

если писать так
var
dc:hdc;
bmp : tbitmap;
begin
printwindow(h, dc, 0);
.........................
создаем bmp....
.........................
bitblt(bmp.canvas.handle, 0,0 200,200 dc, 0,0 srccopy);
image1.picture.assign(bmp);


то по завершению image1 пустой.
почему через printwindow ничего не помещаеться  в dc???

Это сообщение отредактировал(а) Rrader - 30.4.2010, 04:57
PM   Вверх
Amphiluke
Дата 29.4.2010, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: нет
Всего: 112



Какие-то совершенно излишние манипуляции, IMHO.

Почему бы не
Код

PrintWindow(h, Image1.Canvas.Handle, 0);


?
PM   Вверх
IWTK
Дата 30.4.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.7.2009

Репутация: нет
Всего: нет



Цитата(Amphiluke @ 29.4.2010,  20:36)
Какие-то совершенно излишние манипуляции, IMHO.

Почему бы не
Код

PrintWindow(h, Image1.Canvas.Handle, 0);


?

Так мы просто получим скрин окна, которого нам надо.

Может кто нибудь объяснить почему не работает если подставить делать вот так
Код

var
DC : HDC;
H := HWND;
Begin
PrintWindow(H, DC, 0);

DC в чебя ничего не берет. а может и берет да я не могу достать. подскажите.

МБ я туплю сейчас, ведь printwindow предназначена для снятия скриншотов, а не получения DC. Наверное поэтому и не работатет.

Спасибо всем кто хоть чем то помог. Почти Во всем разобрался.

Может ли кто-нибудь выложить описание флагов для printwindow и bitblt? на русском. srccopy, srcpaint и т.д.
PM   Вверх
Maks1509
Дата 2.5.2010, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 22.8.2007
Где: г. Тольятти

Репутация: 3
Всего: 5



IWTK
А ты точно уверен что HWND окна тот, который тебе требуется? Где код получения DC?
Код

var
  hdcIn: HDC;
  hWnd: THandle;
begin
  hWnd := GetDesktopWindow;
  hdcIn := GetDC(hWnd); // получаем контекст окна.
//
BitBlt куда тебе надо из hdcIn в bmp.canvas.handle.
//
  ReleaseDC(hWnd, hdcIn); // освобождаем контекст.
end;


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.