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

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

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

> "протягивание" линии от выбранной точки
сообщение
Сообщение #1


Бывалый
***

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

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


Задача такова: Написать программу построения чертежей планиметрии "протягиванием" от выбранной точки с изображением ее промежуточного положения с возможностью обозначения точек и проведения стандартных линий в треугольнике.
Как это сделать я впринципе знаю но есть 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 отвечают за нажатые кнопки мыши?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
blackhard   "протягивание" линии от выбранной точки   21.04.2008 19:31
volvo   Используй вот это событие: procedure TForm1.Image1…   21.04.2008 19:46
blackhard   блин чето не получается сделать протягивание с изо…   21.04.2008 21:14
volvo   Тебе надо отрисовывать не по OnClick, а по OnMouse…   21.04.2008 21:44
blackhard   Тебе надо отрисовывать не по OnClick, а по OnMous…   21.04.2008 23:32
blackhard   Надеюсь последний вопрос :) Как очистить изображе…   22.04.2008 0:35
volvo   Image1.Canvas.Brush.Color := clRed; // Здесь зад…   22.04.2008 0:39
blackhard   А как можно сделать чтоб при 1ом нажатии накнопку …   22.04.2008 20:30
blackhard   И еще 1 вопрос как можно сделать чтобы новая линия…   23.04.2008 3:01
andriano   1. Ввести состояние (см.конечные автоматы) и отсле…   23.04.2008 12:09
blackhard   Рисовать ручками, проверяя, что та точка, котору…   23.04.2008 19:02
andriano   Чтото не совсем понимаю как это реализовать можно…   23.04.2008 23:26
blackhard   Рисуешь линию по точкам (например, алгоритмом Бре…   24.04.2008 4:00
andriano   Ты по-русски напиши, чего хочешь добиться, что для…   24.04.2008 11:22
blackhard   Ты по-русски напиши, чего хочешь добиться, что дл…   24.04.2008 12:58
andriano   Сэр знаком с таким знаком препинания как запятая? …   24.04.2008 23:01
blackhard   Сэр знаком с таким знаком препинания как запятая?…   24.04.2008 23:27
blackhard   Вот процедура для рисования линии по пикселям. pro…   25.04.2008 15:28
andriano   Надо не узнавать цвет пикселя на фоне, а заливать …   25.04.2008 20:30
blackhard   Надо не узнавать цвет пикселя на фоне, а заливать…   25.04.2008 23:18
andriano   Зачем еще раз что-то УЗНАВАТЬ, что и так ЗНАЕШЬ?   26.04.2008 0:03
blackhard   Ну вот основную часть я сделал теперь все рисуетс…   28.04.2008 2:27
andriano   Наверное, надо анализировать не потом, а сразу. Со…   28.04.2008 10:41
blackhard   Вопрос конечно не совсем по Delphi, но по задаче.М…   29.04.2008 0:31
andriano   Честно говоря, не совсем понятно, что в денном кон…   29.04.2008 1:08
blackhard   И всетаки может ктонибудь поможет вывести формулу …   30.04.2008 3:16
andriano   Очевидно, точка, до которой идет высота, должна ле…   30.04.2008 10:13
#$# PaVeL #$#   Хотел бы посоветовать использовать TPaintBox, a HE…   2.05.2008 13:21


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

 





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