Drag and Drop entre deux TEdits
Bonjour,
je cherche à réaliser un DnD entre 2 TEdits plus exactement entre la partie sélectionnée du premier vers le second.
J'ai un code à peu près fonctionnel mais je ne suis pas du tout sûr d'utiliser le concept DnD proprement.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
type
{ TForm1 }
TForm1 = class(TForm)
Edit1 : TEdit;
Edit2 : TEdit;
[...]
private
{ private declarations }
public
{ public declarations }
aStmp : String;
aSelStart, aSelLength : integer;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
aStmp := '';
with edit1, edit2 do
DragMode := dmManual;
end;
procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Sender is TCustomEdit) and (aStmp <> '') then begin
TCustomEdit(Sender).BeginDrag(False);
//Recréer la zone sélectionnée qui s'efface au moment du DnD
TCustomEdit(Sender).SelStart := aSelStart;
TCustomEdit(Sender).SelLength := aSelLength;
end;
end;
procedure TForm1.Edit1MouseEnter(Sender: TObject);
begin
aStmp := ''; // "Débrancher" le mode DnD... Il y a probablement une autre méthode
end;
procedure TForm1.Edit1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
with TCustomEdit(Sender) do begin
//Que faut-il copier ?
asTmp := Seltext;
aSelStart := SelStart;
aSelLength := SelLength;
end;
end;
procedure TForm1.Edit2DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
//On copie
TCustomEdit(Sender).Text := aStmp;
end;
procedure TForm1.Edit2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if Source is TCustomEdit then
Accept := True
else
Accept := False
end; |
Comme d'habitude, le soucis d'ergonomie est important, notamment le non effacement visuel de la zone sélectionnée lors du move.
Cela me semble "bricolé". Avant de m'attaquer aux TMemos, j'aimerais savoir s'il y a une méthode plus adaptée.
Cordialement. Gilles