Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Рисование на форме (оптимальный путь?)

343
26 июля 2006 года
lena_ki
282 / / 14.04.2005
Мне нужно написать программу, которая бы рисовала линии на форме. Щелкаю на кнопку и перехожу в режим рисования. Далее щелкаю мышью по форме – ставиться тока, щелкаю в другом месте - ставиться другая точка и эти точки соединяются линией. После двойного щелчка рисование произвольной ломанной линии прекращается. Рисовать надо именно на форме, а не Image-e или PainBox-e. При перекрывании формы с линиями другой формой рисунок должен сохраняться, а не затираться.
Вопрос, какой оптимальный путь выбрать для решения этой задачи? Использовать стандартные ф-ции LineTo, и т.д. или есть готовый сторонний компонент для облегчения задачи?
Спасибо.
8.7K
26 июля 2006 года
Rubicon
55 / / 28.10.2005
Рисование на форме ничем не отличается от ваяний в Image --- канва она и в африке канва. Зачем сторонние компаненты? Задача не сложная, твари сама!
Чтоб рисунок не затерался записывай все нарисованное (параметры рисунка) в какой-нибудь массив структур (координаты точек линий и ломанных, например), а в обработке события OnPaint считывай данные и перерисовывай.
Код:
// в загалокве формы
class TForm1 : public TForm
{
__published:   
private:   
        void __fastcall Painting(TObject* obj);
public:    
        __fastcall TForm1(TComponent* Owner);
};
//-------------------------------------------------------
// в cpp-шнике
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 this->OnPaint = Painting;
}
//-------------------------------------------------------------------
 void __fastcall TForm1::Painting(TObject* obj)
 {
  // здесь считываешь и прорисовываешь
 }


Можно конечно каждую фигуру (линию, ломаную и т.п.) задавать отдельным объектом, который бы сам себя прорисовывал и помнил бы свои параметры, но это по моему только усложнит задачу --- это же не графический редактор.
Не забудь поставить DoubleBuffered в true у формы --- тогда мигать не будет при перерисовке.
343
27 июля 2006 года
lena_ki
282 / / 14.04.2005
Спасибо!

А как добавить следующее в программу:
нарисовала несколько многоугольников на форме, потом захотела стереть один из них?
При новом старте программы все нарисованные в прошлом сеансе многоугольники должны отображаться на форме. Как проще это реализовать?
343
27 июля 2006 года
lena_ki
282 / / 14.04.2005
Мне наконец сформулировали окончательно задачу и она существенно усложнилась. На форме, на всей ее поверхности будет таки лежать Image. В Image будет загружен рисунок. На рисунке будут разные объекты (квадраты, многоугольники и пр. (см.рисунок). Пользователь должен иметь возможность задавать области вокруг этих объектов на рисунке во время выполнения приложения. Все заданные им области должны уметь подсвечиваться при наведении мыши. Вот рисунок прилагаю. Пользователь задал область вокруг рисунка динамика и плюс эта область умеет подсвечиваться при наведении мыши. Пользователь также может отменять ранее сделанные им области подсветки.
Подскажите по шагам реализацию такой программы.
Спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог