Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2007, 16:14   #1
Zven
 
Регистрация: 03.12.2007
Сообщений: 4
Вопрос Canvas

У меня такая проблема, нужно в paintboxе ,после того как в нем нарисовали что-либо, закрепить нарисованное, а то если открыть поверх paintboxа еще какое-нибудь окно, то все из paintboxа стирается (тоже самое получается если применить refresh), остается только то что я рисую программно в процедуре OnPaint.
Может быть есть какое-нибудь свойство,подскажите плиз
Zven вне форума Ответить с цитированием
Старый 05.12.2007, 16:28   #2
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Нарисуйте ваш рисунок в буфере и по событию OnPaint выведите содержимое буфера в paintbox.
За буфер я подразумеваю buf:Tbitmap.
Kostia вне форума Ответить с цитированием
Старый 05.12.2007, 16:51   #3
Zven
 
Регистрация: 03.12.2007
Сообщений: 4
По умолчанию

Я не знаю как так сделать, я в делфе новичок,с Bitmap никогда не сталкивался, делаю японские кроссворды, расчерчиваю поле в OnPaint а рисую по нажатию левой кнопки мыши, если видел вообще японские кроссворды ты меня поймешь
Zven вне форума Ответить с цитированием
Старый 05.12.2007, 17:03   #4
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

var
buf: tbitmap;
по событию tform1.oncreate
buf:=tbitmap.create;
buf.width:=(ширина в пикселях)
buf.height:=(высота в пикселях);
теперь там где у тебя написано
paintbox1.canvas...
вместо paintbox1
пиши buf
и по событию onpaint в конце пиши
paintbox1.canvas.draw(0,0,buf);
Kostia вне форума Ответить с цитированием
Старый 05.12.2007, 17:12   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Zven Посмотреть сообщение
Я не знаю как так сделать, я в делфе новичок,с Bitmap никогда не сталкивался, делаю японские кроссворды, расчерчиваю поле в OnPaint а рисую по нажатию левой кнопки мыши, если видел вообще японские кроссворды ты меня поймешь
На форуме проходил конкурс по этой теме, вроде бы там и исходники есть. Поищите по этим ключевым словам...
mihali4 вне форума Ответить с цитированием
Старый 05.12.2007, 17:22   #6
Zven
 
Регистрация: 03.12.2007
Сообщений: 4
По умолчанию

Почти помогло, есть кое какие недочеты, объясни пожалуйста че такое Bitmap и вот эту строчку - paintbox1.canvas.draw(0,0,buf)
Zven вне форума Ответить с цитированием
Старый 05.12.2007, 17:26   #7
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Bitmap - это Битовый образ.
При работе с графикой удобно использовать объекты типа TBitMap (битовый образ). Битовый образ представляет собой находящуюся в памяти компьютера, и, следовательно, невидимую графическую поверхность, на которой программа может сформировать изображение. Содержимое битового образа (картинка) легко и, что особенно важно, быстро может быть выведено на поверхность формы или области вывода иллюстрации (image, paintbox).
Kostia вне форума Ответить с цитированием
Старый 05.12.2007, 17:28   #8
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Вывести содержимое битового образа (картинку) на поверхность формы или области вывода иллюстрации можно путем применения метода Draw к соответствующему свойству поверхности (canvas). Например, инструкция

paintbox1.Canvas.Draw(x,у, buf);

выводит картинку битового образа buf на поверхность компонента paintbox1 (параметры х и у определяют положение левого верхнего угла картинки на поверхности компонента).
Kostia вне форума Ответить с цитированием
Старый 05.12.2007, 18:34   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

2 Zven
Костя правильно советует, я лишь дополню.
Для вывода такого рода графики удобно чтобы еще был фон кроме буфера.
Такой же битмап как и буфер с теми же размерами. В самом начале нарисуй в нем сетку и что там тебе еще на фоне надо. И больше в нем не рисуй.
А все остальное что может меняться рисуй уже в буфере, перед этим скопировав туда фон. Буфер выводи на экран.
Наример, нужно что-то новое нарисовать
Код:
buf.Canvas.Draw(0,0,fon);
buf.Canvas... //тут рисуешь что надо
paintbox1.Canvas.Draw(x,у, buf);
Совет: Вместо Repaint и прочих заменяющих его функций, лучше просто делай вывод буфера на экран. Так не будет мерцать при перерисовке.
Другими словами лучше нарисовать чем перерисовать. Перед перерисовкой канва очищается, что вызывает мерцание.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 06.12.2007, 10:40   #10
Zven
 
Регистрация: 03.12.2007
Сообщений: 4
Радость

Огромное спасибо вы мне очень помогли, но я решил свой вопрос по другому, просто вывел картинку не через paintbox а через image и все получилось
Zven вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос с canvas Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 7 09.03.2009 23:09
Как очистить Canvas? beegl Общие вопросы Delphi 4 30.05.2008 02:51
Подключение Canvas Zeraim Общие вопросы Delphi 4 13.05.2008 20:51
Как очистить Canvas? Pro_BerSerK Общие вопросы Delphi 9 30.01.2008 16:03
Canvas (Канва) - заливка фигуры произвольной формы Albenous Общие вопросы Delphi 13 24.02.2007 13:21