Bei mir geschieht das gleiche (Drag wird nicht abgebrochen).
Ich hab mir mal die Controls.pas angeguckt:
EndDrag bewirkt nur etwas, wenn Dragging = True ist.
Listbox1.Dragging ist aber in Listbox1DblClick noch nicht True.
Aber folgendes beispiel beendet das Dragging:
Delphi-Quellcode:
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
// FormDetail.ShowModal;
tlistbox(Sender).EndDrag(false);
Color:= not Color; // um zu sehen, ob was passiert
end;
Es liegt also daran, dass FormDetail.ShowModal in ListBox1DblClick aufgerufen wird. Die Lösung ist, dass du FormDetail.ShowModal erst in Listbox1.OnEndDrag aufrufst:
Delphi-Quellcode:
class TForm1: TForm
{...}
private
showFormDetailInEndDrag: boolean
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
showFormDetailInEndDrag:= false;
end;
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
showFormDetailInEndDrag:= true;
TListbox(Sender).EndDrag(false);
end;
procedure TForm1.ListBox1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
if showFormDetailInEndDrag then begin
showFormDetailInEndDrag:= false;
FormDetail.ShowModal;
end;
end;
{ übrige Funktionen zum Dragging... }