Задача такова: Написать программу построения чертежей планиметрии "протягиванием" от выбранной точки с изображением ее промежуточного положения с возможностью обозначения точек и проведения стандартных линий в треугольнике. Как это сделать я впринципе знаю но есть 1 проблема это работа с указателем мыши.Для начала я попытался сделать так чтобы при нажатии на изображение рисовалась линия из текущего положения курсора в положение указателя мыши
procedure TForm1.Image1Click(Sender: TObject); var Mo: TMouse; MX, MY: integer; begin MX := Mo.CursorPos.X; MY := Mo.CursorPos.Y; image1.canvas.LineTo(mx,my); end;
получается чето не то линия проводится явно не к указателю мыши.Может это связано с масштабом Image1 (833x533)?подскажите.И еще какие свойства в Tmouse отвечают за нажатые кнопки мыши?
Сэр знаком с таким знаком препинания как запятая? Очень тяжело читать. Если ты и программы так же пишешь, не удивляюсь, почему они не работают.
Значит, вводим состояния: 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. Писал особенно не продумывая, просто для иллюстрации.
Сэр знаком с таким знаком препинания как запятая? Очень тяжело читать. Если ты и программы так же пишешь, не удивляюсь, почему они не работают.
Значит, вводим состояния: 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. Писал особенно не продумывая, просто для иллюстрации.
Спасибо огромное Теперь вроде все наладил.Остался последний глупый вопрос как узнать какого цвета пиксель