Пример реализации Drag-and-Drop

Материал из DRKB

Пример реализации Drag-and-Drop[править | править код]

Пример реализации Drag-and-Drop

unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TMainForm = class(TForm)
    Panel1: TPanel;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Panel2: TPanel;
    procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Edit2DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure Edit2DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure Edit1EndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure FormDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure FormDragDrop(Sender, Source: TObject; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
    TEdit(Sender).BeginDrag(True);
end;

procedure TMainForm.Edit2DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := (Source is TEdit);
end;

procedure TMainForm.Edit2DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  TEdit(Sender).Text := TEdit(Source).Text;
  TEdit(Sender).SetFocus;
  TEdit(Sender).SelectAll;
end;

procedure TMainForm.Edit1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
  if Assigned(Target) then
    TEdit(Sender).Text := 'Текст перенесен в ' + TEdit(Target).Name;
end;

procedure TMainForm.FormDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := (Source.ClassName = 'TPanel');
end;

procedure TMainForm.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  TPanel(Source).Left := X;
  TPanel(Source).Top := Y;
end;

end.


Author: Akella
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 00375