Главная страница
    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.46 MB
Время: 0.059 c
15-1210925629
Vlad Oshin
2008-05-16 12:13
2008.06.29
Очень поздние откаты в базе. SQL 2000, D7,


10-1146918480
Dmitrij_K
2006-05-06 16:28
2008.06.29
IHTMLDocument2 получение всех ссылок


15-1210962666
Layner
2008-05-16 22:31
2008.06.29
Покупка объектива для зеркалки в Москве, где


10-1147638556
evvcom
2006-05-15 00:29
2008.06.29
TWebBrowser спотыкается на <SCRIPT>, если не задан ParentWindow


2-1212251656
assassin8899
2008-05-31 20:34
2008.06.29
deletefile





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский