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

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


sviat9440

Вопрос

Опубликовано

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

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

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

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

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

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

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

  • 0
Опубликовано

Смотрю, нет такого, мне нужно чтобы он перемещался так как окно на рабочем столе и за ним тянулась линия от точки старта (можно не прямую)

  • 0
Опубликовано (изменено)

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

Изменено пользователем sviat
  • 0
Опубликовано

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

  • 0
Опубликовано

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

  • 0
Опубликовано

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

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

  • 0
Опубликовано

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

 

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

  • 0
Опубликовано (изменено)

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

point := TPointF.Create(X,Y);
Изменено пользователем xenon54
  • 0
Опубликовано

 

Как перевести начальную позицию из X, Y: Integer; в TPointF

SomeObject.Position:=PointF(X,Y);

 

Мне нужно это вставить в канву: Canvas.DrawLine(Apt1, Apt2: TPointF, Opasiti: Single)

  • 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
  • 0
Опубликовано

 

Мне нужно это вставить в канву: Canvas.DrawLine(Apt1, Apt2: TPointF, Opasiti: Single)

 

Canvas.DrawLine(PointF(X1,Y1), PointF(X2,Y2), Opasiti: Single)

 

О спасибо и так попробую

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

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

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

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

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

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

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

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

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