sviat9440 Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 Добрый день,столкнулся с такой задачей: можно ли перемещать элемент по форме, и чтобы за ним тянулась линия от точки старта? т.е. как мы перемещаем окно по рабочему столу, так и например: кнопку, по форме. Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 Смотрите в сторону обработки событий Drag & Drop, OnMouseDown, OnMouseMove, OnMouseUp Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Смотрю, нет такого, мне нужно чтобы он перемещался так как окно на рабочем столе и за ним тянулась линия от точки старта (можно не прямую) Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 Осипов. Delphi. Программирование для Windows, OS X, iOS и Android. стр. 76. Листинг 4.11. Перемещение объектов с помощью мыши. Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Огромное спасибо Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Стоп, а как сделать так, чтобы за элементом тянулась линия от точки старта Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 (изменено) и как сделать так, чтобы кнопку нельзя было вытащить за пределы панели и если честно, то я даже не знаю как вообще реализовать линию) Изменено 4 мая, 2015 пользователем sviat Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 В событии OnMouseMove помимо изменения координат перетаскиваемого элемента можно вызывать событие OnPaint главной формы и передавать координаты, по которым рисовать путь. Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Извините, наверно я неправильно обьяснил: мне не нужно рисовать путь, мне нужно чтобы проходила ПРЯМАЯ линия от точки старта, до текущей позиции. Я делаю программу для тестирования, раздел "установите соответствие", согласитесь: буден не очень красиво если будет отрисован весь путь. Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 Какой путь рисовать - решаете только Вы. Для рисования прямой линии можно вычислить координаты центра объекта в событии OnMouseDown, а затем их же в событии OnMouseUp, и построить линию по этим двум точкам. Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Можно и так, а что нельзя сделать так, чтобы линия "тянулась" за кнопкой во время перемещения? Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 Можно, конечно. Просто определяйте координаты конца в OnMouseMove Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Интересно, даже не задумывался,... ну попробую спасибо! Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Стоп, а как вообще линию то рисовать? Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Пробовал стандартный элемент TLine, крутил, вертел, так и ничего путевого не добился. Там диагональ только в одну сторону Цитата Ссылка на комментарий
0 xenon54 Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 Используйте Canvas.DrawLine в методе OnPaint. Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 хорошо, поищу еще инфу о канве, с ней до этого момента вообще не знаком. А как реализовать функцию, чтобы кнопку можно было перетянуть только в одно из трех мест? Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Используйте Canvas.DrawLine в методе OnPaint. Как перевести начальную позицию из X, Y: Integer; в TPointF Цитата Ссылка на комментарий
0 xenon54 Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 (изменено) Вычислять координаты, перетягиваемого элемента в событии OnMouseUpи там принимать решение что с ним делать оставлять или обратно тащить. point := TPointF.Create(X,Y); Изменено 4 мая, 2015 пользователем xenon54 Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 (изменено) Как перевести начальную позицию из X, Y: Integer; в TPointF SomeObject.Position:=PointF(X,Y); Изменено 4 мая, 2015 пользователем Alex7wrt Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Как перевести начальную позицию из X, Y: Integer; в TPointF SomeObject.Position:=PointF(X,Y); Мне нужно это вставить в канву: Canvas.DrawLine(Apt1, Apt2: TPointF, Opasiti: Single) Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 (изменено) А можно так: var xStart, yStart: Single; procedure TForm3.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin xOffset:=X; //нажатие кнопки мыши yOffset:=Y; //запомнили отступы xOffset и yOffset end; end; procedure TForm3.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); var Start, Finish:TPointF; begin if (ssLeft in Shift) then with (Sender as TControl) do begin Position.Y := Position.Y+Y-yOffset; Position.X := Position.X+X-xOffset; Start.X:=xOffset; Start.Y:=yOffset; Finish.X:=X; Finish.Y:=Y; Canvas.Drawline(Start, Finish, 1); end; end; ??? Изменено 4 мая, 2015 пользователем sviat Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 Мне нужно это вставить в канву: Canvas.DrawLine(Apt1, Apt2: TPointF, Opasiti: Single) Canvas.DrawLine(PointF(X1,Y1), PointF(X2,Y2), Opasiti: Single) Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Ага, только получилось это: Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Мне нужно это вставить в канву: Canvas.DrawLine(Apt1, Apt2: TPointF, Opasiti: Single) Canvas.DrawLine(PointF(X1,Y1), PointF(X2,Y2), Opasiti: Single) О спасибо и так попробую Цитата Ссылка на комментарий
0 sviat9440 Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 Неа, все равно "отпечатки (кнопоК)" Цитата Ссылка на комментарий
Вопрос
sviat9440
Добрый день,столкнулся с такой задачей: можно ли перемещать элемент по форме, и чтобы за ним тянулась линия от точки старта? т.е. как мы перемещаем окно по рабочему столу, так и например: кнопку, по форме.
Ссылка на комментарий
Лучшие авторы в вопросе
7
1
21
35
Популярные дни
4 май
48
5 май
18
Лучшие авторы в вопросе
xenon54 7 постов
VladimirS 1 пост
Alex7wrt 21 постов
sviat9440 35 постов
Популярные дни
4 май 2015
48 постов
5 май 2015
18 постов
Популярные посты
xenon54
"beginscene" в методе Paint, на сколько мне известно, не нужно.
Изображения в теме
65 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.