IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Builder 6.0, Графический редактор
сообщение
Сообщение #1


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Требуеться создать примитивный расширяемый графический редактор.
Основные функции:
размещение двух типов обьектов- прямоугольник и треугольник.
обьекты можно создавать и двигать по окну при помощи мыши.
групповое создание обектов.
сохранение и загрузка.

Не знаю с чего начать.
Как создать окно где будут прорисовываться обьекты?
Для описания,например,прямоугольников, лучше всего, создать тип, который хранит в себе 4 координаты по Ох и Оу?
Как реализовать прорисовку линий между этими координатами?
Почему ColorDialog не растягиваеться?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


1. Как создать окно где будут прорисовываться обьекты?
PaintBox кинуть на форму?
2. Для описания,например,прямоугольников, лучше всего, создать тип, который хранит в себе 4 координаты по Ох и Оу?
А зачем 4? Двух, имхо, более чем достаточно (по диагонали).
Но отрисовка прямоугольников, если мне память не изменяет, уже реализована.
Хочется изобрести велосипед?
3. Как реализовать прорисовку линий между этими координатами?
См. п.2
4.Почему ColorDialog не растягиваеться?
Так реализован... А зачем это нужно???
При желании, можно свой компонент сваять


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Цитата(мисс_граффити @ 3.09.2007 21:34) *

1. Как создать окно где будут прорисовываться обьекты?
PaintBox кинуть на форму?
2. Для описания,например,прямоугольников, лучше всего, создать тип, который хранит в себе 4 координаты по Ох и Оу?
А зачем 4? Двух, имхо, более чем достаточно (по диагонали).
Но отрисовка прямоугольников, если мне память не изменяет, уже реализована.
Хочется изобрести велосипед?
3. Как реализовать прорисовку линий между этими координатами?
См. п.2
4.Почему ColorDialog не растягиваеться?
Так реализован... А зачем это нужно???
При желании, можно свой компонент сваять


1)Кинул Image...Это подойдёт думаю...?
2)Насчёт 4х это я погорячился. А можно ли будет подвинуть стандартно прорисованный обьект? И как?
3)Ок
4)Для красоты... smile.gif

Сложность в следуюшем: если мышь находиться на Image и клик мышкой, то создать прямоугольник. То есть создать по какому либо правилу например мышь находиться в левом нижнем углу.

"Сохранение и загрузка",мне кажеться имееться ввиду не изображение а какой либо другой способ хранения объектов, иначе как в загружённом файлу распознать обьект и подфинуть?..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


1. Ну, дело твоё. Я высказала свое мнение. Прислушиваться к нему или нет - сам решай.
2. Закрасил цветом фона, нарисовал на новом месте
Цитата
То есть создать по какому либо правилу например мышь находиться в левом нижнем углу.

ну например. и размеры сторон заданы.
или надо ловить 2 щелчка. или нажатие и отпускание кнопки (то есть тянуть).
Цитата
"Сохранение и загрузка",мне кажеться имееться ввиду не изображение а какой либо другой способ хранения объектов, иначе как в загружённом файлу распознать обьект и подфинуть?..

да, пожалуй
файл (или типизированный - как вариант, отдельно для прямоугольников и треугольников, или текстовый) с описанием объектов... тип, координаты, цвет...

Добавлено через 3 мин.
я делала подобную вещь в рамках другого задания...
там надо было размещать на форме прямоугольнички и кружочки (все одного размера), а потом соединять их линиями (это я сеть Петри строила smile.gif)


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Не могла бы ты подсказать каук тогда узнать осуществлен клик на Image и где находиться курсор?..
Закрасить фоном и нарисовать новый ето хорошо, но если нарисовано сразу несколько обьектов то ето не сработает или будет слишком долго по времени...как быть в таком случае?
И как для передвижения "взяься"за обьект?..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата
Не могла бы ты подсказать каук тогда узнать осуществлен клик на Image и где находиться курсор?..

у меня только делфи под рукой, но, вроде, отличий нет: обрабатывай событие OnMouseDown
кстати, собственно рисовать лучше в OnPaint
только у Image его нет
Цитата
Закрасить фоном и нарисовать новый ето хорошо, но если нарисовано сразу несколько обьектов то ето не сработает или будет слишком долго по времени...как быть в таком случае?

можно подойти к этому вопросу так: при попытке перемещения вызывать OnPaint
а в нем: закрашиваем все и рисуем все имеющиеся фигуры (их хранить в списке или массиве).
это не очень долго, если у тебя не тысячи фигур.
если не пойдет - я подумаю над вопросом оптимизации. ведь, по сути, надо перерисовывать небольшой кусочек (и, возможно, попавшие в него другие фигуры). но проверять на пересечения будет не намного быстрее - все равно полный перебор.
Цитата
И как для передвижения "взяься"за обьект?..

щелкнуть по нему... проанализировать, в какой из объектов попали...
проблема вот в чем: если мы щелкнули в пересечение двух фигур, какая потащится?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
проблема вот в чем: если мы щелкнули в пересечение двух фигур, какая потащится?
Та, которая в списке ближе к "вершине" (то есть, глубина которой в Z-буфере была бы меньше), то есть проверяем от "верхней" фигуры, и тянем первую найденную фигуру, которая содержит "в себе" координаты мыши во время щелчка... Можно, соответственно, переместить перетягиваемую фигуру на "вершину".
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


ну это как вариант...
а можно, например, ту, центр которой ближе (то есть как будто это не картонные прямоугольнички, накиданные на стол... а нечто абстрактное, для чего понятие выше-ниже не определено. все лежит на одном уровне)


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Спасибо за помошь, думаю всё примерно ясно. Осталось пару вопросов
Какая функция вернёт координаты курсора?
И на чем все-таки лучше рисовать? PaintBox не нашёл. Что такое OnPaint?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата
Какая функция вернёт координаты курсора?

обработчик события OnMouseDown получает эти координаты
посмотри внимательнее
Цитата
И на чем все-таки лучше рисовать?

ты хочешь, чтобы я повторила? или устроим голосование?
Цитата
PaintBox не нашёл.

ищи лучше
закладка System
Цитата
Что такое OnPaint?

событие... грубо говоря, перерисовка (например, если ты свернул окно, а потом развернул... или перекрыл другим окном, а потом его убрал)


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


А как проверить нажата ли кнопка1 или кнопка2? Мне надо, например, если нажата кнопка1 рисовать прямоугольник и если 2ая то треугольник.

Сделал, что по клику мышки появляеться прямоугольник,нижний левый угол которого находиться на месте курсора,информация о прямоугольниках храниться в векторе. Далее перебирая элементы вектора можно найти последний созданнй прямоугольник в который попал курсор, если требуеться передвинуть. Но, как получать координаты курсора при его передвижении,чтобы синхронно с этим прорисовывать заново прямоугольник?

Сообщение отредактировано: Fanat -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


пользуйся компонентами, для этого предназначенными.
RadioButton, например


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Сделал, что по клику мышки появляеться прямоугольник,нижний левый угол которого находиться на месте курсора,информация о прямоугольниках храниться в векторе. Далее перебирая элементы вектора можно найти последний созданный прямоугольник, в который попал курсор, если требуеться передвинуть. Но, как получать координаты курсора при его передвижении,чтобы синхронно с этим прорисовывать заново прямоугольник?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


OnMouseMove


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Цитата(klem4 @ 4.09.2007 19:58) *

OnMouseMove


То есть обрабатывать событие OnMouseMove. Но откуда к нему обращаться?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






Что значит "откуда"? Обработчик события будет вызываться, когда ты будешь двигать мышь... Не надо ниоткуда ничего вызывать самому...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Цитата(volvo @ 4.09.2007 20:37) *

Что значит "откуда"? Обработчик события будет вызываться, когда ты будешь двигать мышь... Не надо ниоткуда ничего вызывать самому...


Это событие будет срабатывать когда мышь передвигаеться по окну PaintBox. Но мышь я буду передввигать и в том случае если хочу создать новый прямоугольник. Как быть?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






Сорри, но в том случае, если ты захочешь создать новый прямоугольник, ты должен будешь отпустить кнопку мыши, и потом снова ее нажать, так? Вот именно на OnMouseUp/OnMouseDown и должна быть возложена функция определения, рисуешь ты тот прямоугольник, что когда-то начал, или это уже новая фигура...

Кстати, я бы еще очень внимательно посмотрел на метод MouseCapture, чтобы при случайном (или не очень) выходе мыши из PaintBox-а не произошло неожиданностей yes2.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Цитата(volvo @ 4.09.2007 20:57) *

Сорри, но в том случае, если ты захочешь создать новый прямоугольник, ты должен будешь отпустить кнопку мыши, и потом снова ее нажать, так? Вот именно на OnMouseUp/OnMouseDown и должна быть возложена функция определения, рисуешь ты тот прямоугольник, что когда-то начал, или это уже новая фигура...


У меня немного не так. Есть окно. В котором если нажать на мышь, то будет нарисован автоматически прямоугольник. Который уже потом можно будет двигать,а в дальнейшем надеюсь и изменять размеры.
Так что думаю, чтобы двигать прямоугольники можно создать RadoiButton и если она активна то тогда уже не думать о создании. Но в этом случае незнаю как узнать координаты перемещения.

Цитата

Кстати, я бы еще очень внимательно посмотрел на метод MouseCapture, чтобы при случайном (или не очень) выходе мыши из PaintBox-а не произошло неожиданностей


Не знаю что такое MouseCapture blink.gif .
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


И MouseMove, и MouseUp, и MouseDown получают координаты курсора
Может, не самый красивый вариант, но я бы сделала так: ввела глобальную логическую переменную и в OnMouseMove смотерела, что мы делаем: перемещаем фигуру (тогда надо рисовать) или просто так двигаем мышкой.

Сообщение отредактировано: мисс_граффити -


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.09.2020 5:58
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name