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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2009, 14:59   #1
Jean-Esther
Пользователь
 
Аватар для Jean-Esther
 
Регистрация: 15.01.2009
Сообщений: 69
По умолчанию Delphi: «Сохранение» рисунка

Наверное, каждый сталкивался с такой проблемой: если, допустим, сделать
Код:
Canvas.MoveTo(10,10); Canvas.LineTo(50,50);
в любой процедуре, пусть даже по соботию нажатия кнопки, а затем свернуть-развернуть окно или перекрыть окно другим окном (пусть даже другой программы), то этот рисунок нарисованый пропадает. Что подскажете?
P.S. Другие компоненты не использовать — тут будет проблема у меня связать элементы управления других объектов и этого с формочкой. Подскажите, как можно нарисовать единажды так, чтобы этот узор сохранялся вне зависимости от того, какие манипуляции будет делать пользователь с окном.
Silence is of great value...
Jean-Esther вне форума Ответить с цитированием
Старый 01.03.2009, 15:37   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну, если
Цитата:
P.S. Другие компоненты не использовать
то вариант видится только один - по событию OnShow повторять
Код:
Canvas.MoveTo(10,10); 
Canvas.LineTo(50,50);
mihali4 вне форума Ответить с цитированием
Старый 01.03.2009, 15:50   #3
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
Canvas.MoveTo(10,10); Canvas.LineTo(50,50);
Я так понял, это прямо на форме рисуется...
А TImage совсем не получится использовать? Как оно может помешать-то?)

Если узор большой (сомневаюсь что там только одна эта линия) то можно хранить узор во временном TBitmap...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 01.03.2009, 16:20   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Или TImage, он умеет хранить изображение. Или если рисуешь на любой другой поверхности, по ее событию OnPaint повторяй отрисовку, как уже сказал DomiNick, удобно для этого использовать буфер в виде TBitmap. Т.е. по сути рисовать будешь не на видимой поверхности а в буфере.
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 вне форума Ответить с цитированием
Старый 01.03.2009, 17:05   #5
Jean-Esther
Пользователь
 
Аватар для Jean-Esther
 
Регистрация: 15.01.2009
Сообщений: 69
Сообщение

Цитата:
Сообщение от mutabor Посмотреть сообщение
Или TImage, он умеет хранить изображение. Или если рисуешь на любой другой поверхности, по ее событию OnPaint повторяй отрисовку, как уже сказал DomiNick, удобно для этого использовать буфер в виде TBitmap. Т.е. по сути рисовать будешь не на видимой поверхности а в буфере.
Ответ собраный на все сообщения:

1. Да, не желательно использовать другие компоненты по той причине, что в проекте большое количество различных переходов между модулями и объектами, за основу бралось передача TCanvas в аргументах функций либо другим путем. При этом Полотно может быть как формы, так и Изображения, так и чего-либо другого. Не, по сути, я могу изменить и сделать через добавление TImage, где это надо, но тут просто код будет проще в дальнейшем писать, если продолжать непосредственно писать на Полотне нужного объекта, к тому же...

2. Почему TImage «сохраняет», то есть отрисовывает постоянно изображение, а форма не может??? Признаюсь, во встроеные в делфи модули я вчитывался, но все же интересует, почему единажды нарисовав что-либо на Изображении, перерисовывать не надо, а форма не умеет сохранять. И тут вариант OnShow не катит, так как даже если я нажму Alt+Tab и переключусь на другую программу, «узор» потеряется.

3. Хм... Я нашел различие между TForm.Canvas.LineTo и TImage.Canvas.LineTo. Во втором случае две процедуры, общие для обоих объектов, заключены в процедуры Changing; и Changed.

4. Ух ты, ух ты, спасибо mutabor, так и сделаю. Пока работает
Silence is of great value...
Jean-Esther вне форума Ответить с цитированием
Старый 01.03.2009, 17:21   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

2)потому что форма рисует то что её родное(то есть твои линии не входят)
а Image рисует то что хранится в ней(и туда будут входить линии)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 01.03.2009 в 17:28.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение в Delphi 6 Stases Помощь студентам 8 08.01.2009 23:22
Сохранение данных(DELPHI) Студент222 Помощь студентам 4 14.11.2008 02:38
Сохранение настроек Delphi 7 tarakan1983 Софт 0 05.11.2008 23:55
Delphi, сохранение приложения.. СРОЧНО!! Manitu Помощь студентам 2 11.06.2008 08:47
Сохранение настроек Delphi Air Помощь студентам 3 22.12.2007 23:19