Zet maar een Listbox op een Form en dan:
Code:
procedure TfrmValueTest.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Listbox1.BeginDrag(False);
end;
procedure TfrmValueTest.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
{ Komt hier direct na BeginDrag }
Sleep(0);
end;
{Delphi}
procedure TControl.BeginDrag(Immediate: Boolean; Threshold: Integer);
var
P: TPoint;
begin
if Mouse.IsPanning then
Mouse.PanningWindow := nil;
if (Self is TCustomForm) and (FDragKind <> dkDock) then
raise EInvalidOperation.CreateRes({$IFNDEF CLR}@{$ENDIF}SCannotDragForm);
CalcDockSizes;
if (DragControl = nil) or (DragControl = FlagControl) then
begin
DragControl := nil;
if csLButtonDown in ControlState then
begin
GetCursorPos(P);
Perform(WM_LBUTTONUP, 0, PointToLParam(ScreenToClient(P)));
end;
{ Use default value when Threshold < 0 }
if Threshold < 0 then
Threshold := Mouse.DragThreshold;
// prevent calling EndDrag within BeginDrag
if (DragControl <> FlagControl) then
DragInitControl(Self, Immediate, Threshold);
end;
end;
Laatste is natuurlijk van Delphi zelf waar je kan zien dat er een WM_LBUTTONUP wordt verzorgd.
Voor BeginDrag ControlState := ControlState - [csLButtonDown] werkt niet.
En die MouseUp willen we niet direct.
Bookmarks