Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
| blackhard |
21.04.2008 15:31
Сообщение
#1
|
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
Задача такова: Написать программу построения чертежей планиметрии "протягиванием" от выбранной точки с изображением ее промежуточного положения с возможностью обозначения точек и проведения стандартных линий в треугольнике.
Как это сделать я впринципе знаю но есть 1 проблема это работа с указателем мыши.Для начала я попытался сделать так чтобы при нажатии на изображение рисовалась линия из текущего положения курсора в положение указателя мыши procedure TForm1.Image1Click(Sender: TObject);получается чето не то линия проводится явно не к указателю мыши.Может это связано с масштабом Image1 (833x533)?подскажите.И еще какие свойства в Tmouse отвечают за нажатые кнопки мыши? |
![]() ![]() |
| andriano |
24.04.2008 19:01
Сообщение
#2
|
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Сэр знаком с таким знаком препинания как запятая?
Очень тяжело читать. Если ты и программы так же пишешь, не удивляюсь, почему они не работают. Значит, вводим состояния: 0. Неопределенное состояние - на всякий случай: если вдруг переменная примет это значение, будем знать, что где-то эта переменная портится. 1. "свободная мышь" - нигде ничего не рисуем. 2. нажата кнопка мыши. 3. мышь "тянет линию". 4. таймаут после двойного щелчка (кто знает, сколько сообщений о нажатии/отпускании мыши мы получим во время двойного щелчка - чтобы они нам не мешали) Мышь находится в одном из приведенных состояний, в начале - "1". Мы отслеживаем сообщения: A - перемещение мыши, B - нажатие мыши, C - отпускание мыши, D - двойной щелчок. В зависимости от того, в каком состоянии мы находились, получая то или иное сообщение, мы выполняем определенное действие (в частном случае - ничего не делаем) и переходим в другое состояние. Осталось расписать таблицу переходов и записать ее на любимом ЯВУ. Например, для 1: 1A - ничего не делаем, 1B - переходим в режим 2, 1C - невозможная комбинация - сообщаем об ошибке, 1D - ничего не делаем. для 2: 2A - стираем старую линию и рисуем новую, 2B - невозможная комбинация - сообщаем об ошибке, 2C - переходим в режим 3, 2D - переходим в режим 4. для 3: 3A - стираем старую линию и рисуем новую, 3B - отрисованную линию оставляем и запоминаем точку нажаия новой линии, 3C - переходим в режим 2, 3D - переходим в режим 4. для 4: 4A - ничего не делаем, проверяем, не вышел ли таймаут, если вышел, переходим в состояние 1, 4B - ничего не делаем, проверяем, не вышел ли таймаут, если вышел, переходим в состояние 1, 4C - ничего не делаем, проверяем, не вышел ли таймаут, если вышел, переходим в состояние 1, 4D - возобновляем таймаут. PS. Писал особенно не продумывая, просто для иллюстрации. Сообщение отредактировано: andriano - 24.04.2008 19:03 |
| blackhard |
24.04.2008 19:27
Сообщение
#3
|
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: 0 |
Сэр знаком с таким знаком препинания как запятая? Очень тяжело читать. Если ты и программы так же пишешь, не удивляюсь, почему они не работают. Значит, вводим состояния: 0. Неопределенное состояние - на всякий случай: если вдруг переменная примет это значение, будем знать, что где-то эта переменная портится. 1. "свободная мышь" - нигде ничего не рисуем. 2. нажата кнопка мыши. 3. мышь "тянет линию". 4. таймаут после двойного щелчка (кто знает, сколько сообщений о нажатии/отпускании мыши мы получим во время двойного щелчка - чтобы они нам не мешали) Мышь находится в одном из приведенных состояний, в начале - "1". Мы отслеживаем сообщения: A - перемещение мыши, B - нажатие мыши, C - отпускание мыши, D - двойной щелчок. В зависимости от того, в каком состоянии мы находились, получая то или иное сообщение, мы выполняем определенное действие (в частном случае - ничего не делаем) и переходим в другое состояние. Осталось расписать таблицу переходов и записать ее на любимом ЯВУ. Например, для 1: 1A - ничего не делаем, 1B - переходим в режим 2, 1C - невозможная комбинация - сообщаем об ошибке, 1D - ничего не делаем. для 2: 2A - стираем старую линию и рисуем новую, 2B - невозможная комбинация - сообщаем об ошибке, 2C - переходим в режим 3, 2D - переходим в режим 4. для 3: 3A - стираем старую линию и рисуем новую, 3B - отрисованную линию оставляем и запоминаем точку нажаия новой линии, 3C - переходим в режим 2, 3D - переходим в режим 4. для 4: 4A - ничего не делаем, проверяем, не вышел ли таймаут, если вышел, переходим в состояние 1, 4B - ничего не делаем, проверяем, не вышел ли таймаут, если вышел, переходим в состояние 1, 4C - ничего не делаем, проверяем, не вышел ли таймаут, если вышел, переходим в состояние 1, 4D - возобновляем таймаут. PS. Писал особенно не продумывая, просто для иллюстрации. Спасибо огромное Так? Специальной ф.и я найти не могу. |
blackhard "протягивание" линии от выбранной точки 21.04.2008 15:31
volvo Используй вот это событие:
procedure TForm1.Image1... 21.04.2008 15:46
blackhard блин чето не получается сделать протягивание с изо... 21.04.2008 17:14
volvo Тебе надо отрисовывать не по OnClick, а по OnMouse... 21.04.2008 17:44
blackhard
Тебе надо отрисовывать не по OnClick, а по OnMous... 21.04.2008 19:32
blackhard Надеюсь последний вопрос :) Как очистить изображе... 21.04.2008 20:35
volvo Image1.Canvas.Brush.Color := clRed; // Здесь зад... 21.04.2008 20:39
blackhard А как можно сделать чтоб при 1ом нажатии накнопку ... 22.04.2008 16:30
blackhard И еще 1 вопрос как можно сделать чтобы новая линия... 22.04.2008 23:01
andriano 1. Ввести состояние (см.конечные автоматы) и отсле... 23.04.2008 8:09
blackhard
Рисовать ручками, проверяя, что та точка, котору... 23.04.2008 15:02
andriano
Чтото не совсем понимаю как это реализовать можно... 23.04.2008 19:26
blackhard
Рисуешь линию по точкам (например, алгоритмом Бре... 24.04.2008 0:00
andriano Ты по-русски напиши, чего хочешь добиться, что для... 24.04.2008 7:22
blackhard
Ты по-русски напиши, чего хочешь добиться, что дл... 24.04.2008 8:58
blackhard Вот процедура для рисования линии по пикселям.
pro... 25.04.2008 11:28
andriano Надо не узнавать цвет пикселя на фоне, а заливать ... 25.04.2008 16:30
blackhard
Надо не узнавать цвет пикселя на фоне, а заливать... 25.04.2008 19:18
andriano Зачем еще раз что-то УЗНАВАТЬ, что и так ЗНАЕШЬ? 25.04.2008 20:03
blackhard Ну вот основную часть я сделал теперь все рисуетс... 27.04.2008 22:27
andriano Наверное, надо анализировать не потом, а сразу.
Со... 28.04.2008 6:41
blackhard Вопрос конечно не совсем по Delphi, но по задаче.М... 28.04.2008 20:31
andriano Честно говоря, не совсем понятно, что в денном кон... 28.04.2008 21:08
blackhard И всетаки может ктонибудь поможет вывести формулу ... 29.04.2008 23:16
andriano Очевидно, точка, до которой идет высота, должна ле... 30.04.2008 6:13
#$# PaVeL #$# Хотел бы посоветовать использовать TPaintBox, a HE... 2.05.2008 9:21![]() ![]() |
|
Текстовая версия | 10.12.2025 21:00 |