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

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

Рисование в, к примеру, Paint [D7, WinXP]


alek ©   (2007-10-15 22:57:00) 

Проблемка такая: с помощью моей программы надо вставить изображение в область для рисования, скажем, MS Paint. Все попытки не увенчались успехом, после обновления окна то, что я туда вставлял исчезало. Подскажите, пожалуйста, как это реализовать? Ничего дельного придумать не могу :(


homm   (2007-10-16 14:13:00) [1]

> [8] alek   (16.10.07 13:58)

Должно. Хранится. Либо в памяти, либо в видеопямяти. Нахождения точного месторасположения буфера — задача не сложная, но неустойчивая, т.к. при поиске мы можем опираться на такие понятия, как «первый дискриптор», «предпоследний дискриптор». Любое изменение версии программы влечет к изменению порядков возникновения и количества дискрипторов. Здесь под «дискриптором» я понимаю THandle объекта GDI. Не факт, что вообще возможно получить список этих объектов для другово процесса.


alek   (2007-10-16 13:58:00) [2]

Спасибо за разъяснения )... Тогда еще один вопрос: нарисованное же должно где-то храниться - в памяти, есть ли возможность подменить кусок этой памяти или нет?


homm   (2007-10-16 13:37:00) [3]

> Допустим, что есть окно, в котом можно рисовать мышкой,
> но нет возможности вставить изображение - нет ни меню, ни
> сочетаний клавиш - вот в него и надо "вставить" изображение...

Никак, ибо
> Перерисовка окна происходит из той самой «области рисования»,
> буферного битмапа, но никак не в обратном направлении.


clickmaker   (2007-10-16 13:35:00) [4]


> [5] alek   (16.10.07 13:29)

а уверен, что оно вообще допускает это?


alek   (2007-10-16 13:29:00) [5]

Штука в том, что Paint это только наглядный пример. Допустим, что есть окно, в котом можно рисовать мышкой, но нет возможности вставить изображение - нет ни меню, ни сочетаний клавиш - вот в него и надо "вставить" изображение...


clickmaker   (2007-10-16 12:57:00) [6]


> SendMessage(хендл пейнта, WM_Paste,0,0)? Не получается

не думаю, что пейнт так вот прямо обрабатывает WM_paste
нужно WM_COMMAND посылать, или WM_CHAR/WM_KEYDOWN, чтоб сымитировать Ctrl+V


alek   (2007-10-16 12:45:00) [7]

var
bTmp : TBitmap;
Format_: Word;
Data_: Cardinal;
APalette: HPALETTE;
begin
bTmp := TBitmap.Create;
bTmp.Height := 200;
bTmp.Width := 200;
bTmp.Canvas.Brush.Color := RGB(1,1,1);
bTmp.Canvas.Rectangle(10,10,100,100);
bTmp.SaveToClipboardFormat(Format_,Data_,APalette);
bTmp.Free;
OpenClipboard(Application.Handle);
EmptyClipboard;
SetClipboardData(Format_, Data_);
CloseClipboard;
...

Скопировал в буфер, а как заставить пейнт вставить это из буфера обмена (помимо сочетаний клавиш и Edit-Paste - так вставляет, но это не то)? SendMessage(хендл пейнта, WM_Paste,0,0)? Не получается %)


homm   (2007-10-16 00:04:00) [8]

> [0] alek   (15.10.07 22:57)
> с помощью моей программы надо вставить изображение в область
> для рисования, скажем, MS Paint

Забудь об этом.


> [1] alek   (15.10.07 23:17)
> Хочется, чтобы после перерисовки окна мои изменения на "области
> рисования" сохранились.

Перерисовка окна происходит из той самой «области рисования», буферного битмапа, но никак не в обратном направлении.

Копируй свое изображение в буфер обмена и заставь пэйнт вставить его.


alek   (2007-10-15 23:17:00) [9]

Хочется, чтобы после перерисовки окна мои изменения на "области рисования" сохранились.


Наверх

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