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

Вниз

Рисование в, к примеру, Paint   Найти похожие ветки 

 
alek   (2007-10-15 22:57) [0]

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


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

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


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

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

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


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

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

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


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

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)? Не получается %)


 
clickmaker ©   (2007-10-16 12:57) [4]


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

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


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

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


 
clickmaker ©   (2007-10-16 13:35) [6]


> [5] alek   (16.10.07 13:29)

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


 
homm ©   (2007-10-16 13:37) [7]

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

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


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

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


 
homm ©   (2007-10-16 14:13) [9]

> [8] alek   (16.10.07 13:58)

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



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

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

Наверх




Память: 0.49 MB
Время: 0.023 c
2-1212484394
D@nger
2008-06-03 13:13
2008.06.29
MDI окно и хэндл


2-1212412416
Ceil
2008-06-02 17:13
2008.06.29
Переименование


15-1210773374
homm
2008-05-14 17:56
2008.06.29
Вопрос по overlapped - файлам


2-1212160292
programmer90
2008-05-30 19:11
2008.06.29
Количество оперативной памяти в системе.


15-1210709600
DillerXX
2008-05-14 00:13
2008.06.29
Есть ли нормальные Setup еры