![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Fanat |
![]()
Сообщение
#1
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Требуеться создать примитивный расширяемый графический редактор.
Основные функции: размещение двух типов обьектов- прямоугольник и треугольник. обьекты можно создавать и двигать по окну при помощи мыши. групповое создание обектов. сохранение и загрузка. Не знаю с чего начать. Как создать окно где будут прорисовываться обьекты? Для описания,например,прямоугольников, лучше всего, создать тип, который хранит в себе 4 координаты по Ох и Оу? Как реализовать прорисовку линий между этими координатами? Почему ColorDialog не растягиваеться? |
мисс_граффити |
![]()
Сообщение
#2
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
1. Как создать окно где будут прорисовываться обьекты?
PaintBox кинуть на форму? 2. Для описания,например,прямоугольников, лучше всего, создать тип, который хранит в себе 4 координаты по Ох и Оу? А зачем 4? Двух, имхо, более чем достаточно (по диагонали). Но отрисовка прямоугольников, если мне память не изменяет, уже реализована. Хочется изобрести велосипед? 3. Как реализовать прорисовку линий между этими координатами? См. п.2 4.Почему ColorDialog не растягиваеться? Так реализован... А зачем это нужно??? При желании, можно свой компонент сваять -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Fanat |
![]()
Сообщение
#3
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
1. Как создать окно где будут прорисовываться обьекты? PaintBox кинуть на форму? 2. Для описания,например,прямоугольников, лучше всего, создать тип, который хранит в себе 4 координаты по Ох и Оу? А зачем 4? Двух, имхо, более чем достаточно (по диагонали). Но отрисовка прямоугольников, если мне память не изменяет, уже реализована. Хочется изобрести велосипед? 3. Как реализовать прорисовку линий между этими координатами? См. п.2 4.Почему ColorDialog не растягиваеться? Так реализован... А зачем это нужно??? При желании, можно свой компонент сваять 1)Кинул Image...Это подойдёт думаю...? 2)Насчёт 4х это я погорячился. А можно ли будет подвинуть стандартно прорисованный обьект? И как? 3)Ок 4)Для красоты... ![]() Сложность в следуюшем: если мышь находиться на Image и клик мышкой, то создать прямоугольник. То есть создать по какому либо правилу например мышь находиться в левом нижнем углу. "Сохранение и загрузка",мне кажеться имееться ввиду не изображение а какой либо другой способ хранения объектов, иначе как в загружённом файлу распознать обьект и подфинуть?.. |
мисс_граффити |
![]()
Сообщение
#4
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
1. Ну, дело твоё. Я высказала свое мнение. Прислушиваться к нему или нет - сам решай.
2. Закрасил цветом фона, нарисовал на новом месте Цитата То есть создать по какому либо правилу например мышь находиться в левом нижнем углу. ну например. и размеры сторон заданы. или надо ловить 2 щелчка. или нажатие и отпускание кнопки (то есть тянуть). Цитата "Сохранение и загрузка",мне кажеться имееться ввиду не изображение а какой либо другой способ хранения объектов, иначе как в загружённом файлу распознать обьект и подфинуть?.. да, пожалуй файл (или типизированный - как вариант, отдельно для прямоугольников и треугольников, или текстовый) с описанием объектов... тип, координаты, цвет... Добавлено через 3 мин. я делала подобную вещь в рамках другого задания... там надо было размещать на форме прямоугольнички и кружочки (все одного размера), а потом соединять их линиями (это я сеть Петри строила ![]() -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Fanat |
![]()
Сообщение
#5
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Не могла бы ты подсказать каук тогда узнать осуществлен клик на Image и где находиться курсор?..
Закрасить фоном и нарисовать новый ето хорошо, но если нарисовано сразу несколько обьектов то ето не сработает или будет слишком долго по времени...как быть в таком случае? И как для передвижения "взяься"за обьект?.. |
мисс_граффити |
![]()
Сообщение
#6
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Цитата Не могла бы ты подсказать каук тогда узнать осуществлен клик на Image и где находиться курсор?.. у меня только делфи под рукой, но, вроде, отличий нет: обрабатывай событие OnMouseDown кстати, собственно рисовать лучше в OnPaint только у Image его нет Цитата Закрасить фоном и нарисовать новый ето хорошо, но если нарисовано сразу несколько обьектов то ето не сработает или будет слишком долго по времени...как быть в таком случае? можно подойти к этому вопросу так: при попытке перемещения вызывать OnPaint а в нем: закрашиваем все и рисуем все имеющиеся фигуры (их хранить в списке или массиве). это не очень долго, если у тебя не тысячи фигур. если не пойдет - я подумаю над вопросом оптимизации. ведь, по сути, надо перерисовывать небольшой кусочек (и, возможно, попавшие в него другие фигуры). но проверять на пересечения будет не намного быстрее - все равно полный перебор. Цитата И как для передвижения "взяься"за обьект?.. щелкнуть по нему... проанализировать, в какой из объектов попали... проблема вот в чем: если мы щелкнули в пересечение двух фигур, какая потащится? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата проблема вот в чем: если мы щелкнули в пересечение двух фигур, какая потащится? Та, которая в списке ближе к "вершине" (то есть, глубина которой в Z-буфере была бы меньше), то есть проверяем от "верхней" фигуры, и тянем первую найденную фигуру, которая содержит "в себе" координаты мыши во время щелчка... Можно, соответственно, переместить перетягиваемую фигуру на "вершину". |
мисс_граффити |
![]()
Сообщение
#8
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
ну это как вариант...
а можно, например, ту, центр которой ближе (то есть как будто это не картонные прямоугольнички, накиданные на стол... а нечто абстрактное, для чего понятие выше-ниже не определено. все лежит на одном уровне) -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Fanat |
![]()
Сообщение
#9
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Спасибо за помошь, думаю всё примерно ясно. Осталось пару вопросов
Какая функция вернёт координаты курсора? И на чем все-таки лучше рисовать? PaintBox не нашёл. Что такое OnPaint? |
мисс_граффити |
![]()
Сообщение
#10
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Цитата Какая функция вернёт координаты курсора? обработчик события OnMouseDown получает эти координаты посмотри внимательнее Цитата И на чем все-таки лучше рисовать? ты хочешь, чтобы я повторила? или устроим голосование? Цитата PaintBox не нашёл. ищи лучше закладка System Цитата Что такое OnPaint? событие... грубо говоря, перерисовка (например, если ты свернул окно, а потом развернул... или перекрыл другим окном, а потом его убрал) -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Fanat |
![]()
Сообщение
#11
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
А как проверить нажата ли кнопка1 или кнопка2? Мне надо, например, если нажата кнопка1 рисовать прямоугольник и если 2ая то треугольник.
Сделал, что по клику мышки появляеться прямоугольник,нижний левый угол которого находиться на месте курсора,информация о прямоугольниках храниться в векторе. Далее перебирая элементы вектора можно найти последний созданнй прямоугольник в который попал курсор, если требуеться передвинуть. Но, как получать координаты курсора при его передвижении,чтобы синхронно с этим прорисовывать заново прямоугольник? Сообщение отредактировано: Fanat - 4.09.2007 18:18 |
мисс_граффити |
![]()
Сообщение
#12
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
пользуйся компонентами, для этого предназначенными.
RadioButton, например -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Fanat |
![]()
Сообщение
#13
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Сделал, что по клику мышки появляеться прямоугольник,нижний левый угол которого находиться на месте курсора,информация о прямоугольниках храниться в векторе. Далее перебирая элементы вектора можно найти последний созданный прямоугольник, в который попал курсор, если требуеться передвинуть. Но, как получать координаты курсора при его передвижении,чтобы синхронно с этим прорисовывать заново прямоугольник?
|
klem4 |
![]()
Сообщение
#14
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
OnMouseMove
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Fanat |
![]()
Сообщение
#15
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Что значит "откуда"? Обработчик события будет вызываться, когда ты будешь двигать мышь... Не надо ниоткуда ничего вызывать самому...
|
Fanat |
![]()
Сообщение
#17
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Что значит "откуда"? Обработчик события будет вызываться, когда ты будешь двигать мышь... Не надо ниоткуда ничего вызывать самому... Это событие будет срабатывать когда мышь передвигаеться по окну PaintBox. Но мышь я буду передввигать и в том случае если хочу создать новый прямоугольник. Как быть? |
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
Сорри, но в том случае, если ты захочешь создать новый прямоугольник, ты должен будешь отпустить кнопку мыши, и потом снова ее нажать, так? Вот именно на OnMouseUp/OnMouseDown и должна быть возложена функция определения, рисуешь ты тот прямоугольник, что когда-то начал, или это уже новая фигура...
Кстати, я бы еще очень внимательно посмотрел на метод MouseCapture, чтобы при случайном (или не очень) выходе мыши из PaintBox-а не произошло неожиданностей ![]() |
Fanat |
![]()
Сообщение
#19
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Сорри, но в том случае, если ты захочешь создать новый прямоугольник, ты должен будешь отпустить кнопку мыши, и потом снова ее нажать, так? Вот именно на OnMouseUp/OnMouseDown и должна быть возложена функция определения, рисуешь ты тот прямоугольник, что когда-то начал, или это уже новая фигура... У меня немного не так. Есть окно. В котором если нажать на мышь, то будет нарисован автоматически прямоугольник. Который уже потом можно будет двигать,а в дальнейшем надеюсь и изменять размеры. Так что думаю, чтобы двигать прямоугольники можно создать RadoiButton и если она активна то тогда уже не думать о создании. Но в этом случае незнаю как узнать координаты перемещения. Цитата Кстати, я бы еще очень внимательно посмотрел на метод MouseCapture, чтобы при случайном (или не очень) выходе мыши из PaintBox-а не произошло неожиданностей Не знаю что такое MouseCapture ![]() |
мисс_граффити |
![]()
Сообщение
#20
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
И MouseMove, и MouseUp, и MouseDown получают координаты курсора
Может, не самый красивый вариант, но я бы сделала так: ввела глобальную логическую переменную и в OnMouseMove смотерела, что мы делаем: перемещаем фигуру (тогда надо рисовать) или просто так двигаем мышкой. Сообщение отредактировано: мисс_граффити - 4.09.2007 21:14 -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 8:31 |