Ich hab bisher wenig mit D&D gearbeitet, deshalb finde ich den Fehler nicht. Hier ein Beispiel mit zwei Panelen, die gegenseitig die Caption wechseln. Es funktioniert. Das Problem ist aber, dass wenn ich eines der Panele doppelklicke, ebenfalls der Drag beginnt. Sollte eigentlich nicht. Danach muss ich den Vorgang erst mit ESC wieder abbrechen.
Natürlich greifen beide Panele auf die gleiche Prozeduren.
Delphi-Quellcode:
procedure TForm1.Panel1DblClick(Sender: TObject);
begin
ShowMessage('Das war ein Doppelklick');
end;
procedure PositionWechseln(Sender, Source: TObject);
var
Temp: String;
begin
if (Sender is TPanel) and (Source is TPanel) then
begin
Temp := TPanel(Sender).Caption;
TPanel(Sender).Caption := TPanel(Source).Caption;
TPanel(Source).Caption := Temp;
end;
end;
procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
TempName: String;
begin
if (Source is TPanel) then
PositionWechseln(Sender, Source);
end;
procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if (Source is TPanel) then
Accept := True;
end;
procedure TForm1.Panel1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
if (Target = nil) then
MessageBeep(0); // Wenn Drag'n'Drop-Operation nicht erfolgreich abeschlossen wurde...
end;
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Sender is TPanel) then
if Button = mbLeft then
TPanel(Sender).BeginDrag(False, 10);
end;