RAD Studio VCL Reference
|
Occurs when the user drags an object over a control.
property OnDragOver: TDragOverEvent;
__property TDragOverEvent OnDragOver;
Use an OnDragOver event to signal that the control can accept a dragged object so the user can drop or dock it.
Within the OnDragOver event handler, change the Accept parameter to false to reject the dragged object. Leave Accept as true to allow the user to drop or dock the dragged object on the control.
To change the shape of the cursor, indicating that the control can accept the dragged object, change the value of the DragCursor property for the control before the OnDragOver event occurs.
The Source is the object being dragged, the Sender is the potential drop or dock site, and X and Y are screen coordinates in pixels. The State parameter specifies how the dragged object is moving over the control.
C++ Examples:
/* This code is an OnDragOver event handler that won't allow a label control to be dropped on a panel control and stops the dragging of the label as soon as the user drags the label onto the panel: Note: Set the label's DragMode property to dmAutomatic. */ void __fastcall TForm1::FormDragDrop(TObject *Sender, TObject *Source, int X, int Y) { reinterpret_cast<TForm1 *>(Source)->Left = X; reinterpret_cast<TForm1 *>(Source)->Top = Y; } void __fastcall TForm1::FormDragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept) { Accept = Source->ClassNameIs("TLabel"); } void __fastcall TForm1::Panel1DragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept) { Accept = false; if ((Source->ClassNameIs("TLabel")) && (State == dsDragEnter)) dynamic_cast<TLabel *>(Source)->EndDrag(false); }
/* This code comes from an application that contains a list box and three labels, each with a different font and color. The DragMode property for each of the labels is dmAutomatic. The user can select a label and drag it to a list box and drop it. When the label is dropped, the items in the list box assume the color and font of the dropped label. */ // This OnDragOver event handler permits the list box to // accept a dropped label: void __fastcall TForm1::ListBox1DragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept) { Accept = Source->ClassNameIs("TLabel"); } /* This OnDragDrop event handler implements the drop behavior. */ void __fastcall TForm1::ListBox1DragDrop(TObject *Sender, TObject *Source, int X, int Y) { if (Sender->ClassNameIs("TListBox") && Source->ClassNameIs("TLabel")) { TListBox *DestList = dynamic_cast<TListBox *>(Sender); DestList->Font = (dynamic_cast<TLabel *>(Source))->Font; DestList->Color = (dynamic_cast<TLabel *>(Source))->Color; DestList->DoubleBuffered = true; DestList->Color = clWindow; } } void __fastcall TForm1::FormCreate(TObject *Sender) { ListBox1->Items->Add("Not"); ListBox1->Items->Add("In"); ListBox1->Items->Add("Alphabetical"); ListBox1->Items->Add("Order"); }
Delphi Examples:
{ This code is an OnDragOver event handler that won't allow a label control to be dropped on a panel control and stops the dragging of the label as soon as the user drags the label onto the panel: Note: Set the label's DragMode property to dmAutomatic. } type TForm1 = class(TForm) Panel1: TPanel; Label1: TLabel; procedure Panel1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); 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 Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer); begin TForm1(Source).Left := X; TForm1(Source).Top := Y; end; procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := Source is TLabel; end; procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := False; if (Source is TLabel) and (State = dsDragEnter) then (Source as TLabel).EndDrag(False); end;
{ This code requires a list box and three labels, each with a different font and color. The DragMode property for each of the labels is dmAutomatic. The user can select a label and drag it to a list box and drop it. When the label is dropped, the items in the list box assume the color and font of the dropped label. } procedure TForm1.FormCreate(Sender: TObject); begin ListBox1.Items.Add('Not'); ListBox1.Items.Add('In'); ListBox1.Items.Add('Alphabetical'); ListBox1.Items.Add('Order'); end; // This OnDragOver event handler permits the list box to // accept a dropped label: procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := Source is TLabel; end; // This OnDragDrop event handler implements the drop behavior. procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer); begin if (Sender is TListBox) and (Source is TLabel) then begin with Sender as TListBox do begin Font := (Source as TLabel).Font; Color := (Source as TLabel).Color; DoubleBuffered := true; Color := clWindow; end; end; end;
Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
|
What do you think about this topic? Send feedback!
|