Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Создание перемещаемой кнопки с функцией drag-and-drop в Delphi

Delphi , Синтаксис , Drag and Drop

В вопросе пользователя рассматривается задача создания кнопки, которую можно перемещать по форме с помощью функции drag-and-drop. Для реализации такой возможности необходимо обработать события мыши, связанные с перемещением объекта.

Подготовка кнопки к перемещению

Сначала создадим кнопку, которая будет перемещаться. Для этого добавим обработчики событий OnMouseDown, OnMouseMove и OnMouseUp к кнопке. Эти события позволят пользователю захватывать кнопку и перемещать её по форме.

unit Unit1;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure TableButtonMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure TableButtonMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure TableButtonMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    FTableButton: TButton;
    FTableButtonDragging: boolean;
    FMouseDownLocation: TPoint;
    FButtonStartingLocation: TPoint;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not Assigned(FTableButton) then
  begin
    FTableButton := TButton.Create(nil);
    FTableButton.Parent := Self;
    FTableButton.Caption := 'Перетащи меня';
    with FTableButton do
    begin
      Left := Random(Self.Width - Width);
      Top := Random(Self.Height - Height);
      OnMouseDown := @TableButtonMouseDown;
      OnMouseMove := @TableButtonMouseMove;
      OnMouseUp := @TableButtonMouseUp;
    end;
  end;
end;

procedure TForm1.TableButtonMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FTableButtonDragging := True;
  FMouseDownLocation.X := X;
  FMouseDownLocation.Y := Y;
  FButtonStartingLocation.X := FTableButton.Left;
  FButtonStartingLocation.Y := FTableButton.Top;
end;

procedure TForm1.TableButtonMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if FTableButtonDragging then
  begin
    FTableButton.Left := FButtonStartingLocation.X + (X - FMouseDownLocation.X);
    FTableButton.Top := FButtonStartingLocation.Y + (Y - FMouseDownLocation.Y);
    FTableButton.Repaint;
  end;
end;

procedure TForm1.TableButtonMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FTableButtonDragging := False;
end;

end.

Обработка событий мыши

При нажатии на кнопку мыши (OnMouseDown) устанавливаем флаг FTableButtonDragging в True и запоминаем начальное положение мыши и кнопки. В обработчике OnMouseMove проверяем, идет ли в данный момент перетаскивание, и если да, то перемещаем кнопку на соответствующее расстояние. При отпускании кнопки мыши (OnMouseUp) сбрасываем флаг FTableButtonDragging.

Заключение

Таким образом, мы реализовали функцию перемещения кнопки по форме с помощью drag-and-drop. Это базовый пример, который можно расширить и улучшить, добавив дополнительные функции, такие как сохранение положения кнопки, ограничение области перемещения и т.д.

Создано по материалам из источника по ссылке.

Создание кнопки в среде разработки Delphi, которая может быть перемещена по форме с использованием функции drag-and-drop.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Drag and Drop ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 11:35:26/0.0033578872680664/0