Перейти к содержанию
Fire Monkey от А до Я
  • 0

Можно ли перемещать элементы по форме


sviat9440

Вопрос

Добрый день,столкнулся с такой задачей: можно ли перемещать элемент по форме, и чтобы за ним тянулась линия от точки старта? т.е. как мы перемещаем окно по рабочему столу, так и например: кнопку, по форме.

Ссылка на комментарий
  • Ответы 65
  • Создана
  • Последний ответ

Лучшие авторы в вопросе

Популярные дни

Лучшие авторы в вопросе

Изображения в теме

Рекомендуемые сообщения

  • 0

и как сделать так, чтобы кнопку нельзя было вытащить за пределы панели и если честно, то я даже не знаю как вообще реализовать линию)

Изменено пользователем sviat
Ссылка на комментарий
  • 0

В событии OnMouseMove помимо изменения координат перетаскиваемого элемента можно вызывать событие OnPaint главной формы и передавать координаты, по которым рисовать путь.

Ссылка на комментарий
  • 0

Извините, наверно я неправильно обьяснил: мне не нужно рисовать путь, мне нужно чтобы проходила ПРЯМАЯ линия от точки старта, до текущей позиции. Я делаю программу для тестирования, раздел "установите соответствие", согласитесь: буден не очень красиво если будет отрисован весь путь.

Ссылка на комментарий
  • 0

Какой путь рисовать - решаете только Вы.

Для рисования прямой линии можно вычислить координаты центра объекта в событии OnMouseDown, а затем их же в событии OnMouseUp, и построить линию по этим двум точкам.

Ссылка на комментарий
  • 0

хорошо, поищу еще инфу о канве, с ней до этого момента вообще не знаком.

 

А как реализовать функцию, чтобы кнопку можно было перетянуть только в одно из трех мест?

Ссылка на комментарий
  • 0

Вычислять координаты, перетягиваемого элемента в событии OnMouseUpи там принимать решение что с ним делать оставлять или обратно тащить.

point := TPointF.Create(X,Y);
Изменено пользователем xenon54
Ссылка на комментарий
  • 0

А можно так:

 

 

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;
 
???
Изменено пользователем sviat
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...