아래의 코드는 컨트롤 (예 : 레이블)을 드래그 이미지가 드래그 작업을하는 동안 표시 할 수 있습니다.델파이 드래그 이미지 챌린지
내 문제는 내가 마우스가 컨트롤의 특정 경계에있을 때 이미지가 를 표시하려면, 하지는 드래그가 시작 instanly 때 드래그 이미지를 표시 할 할 것입니다 - 예. 라벨 오른쪽에
지금까지는이 솔루션을 찾을 수 없었습니다. VCL 소스를 수정하지 않으면 이미지가 즉시 표시됩니다. 이 시점에서 VCL 드래그 & 드롭 유틸리티를 abondoning하기 전에 원하는 동작을 얻으려면 모든 트릭을 주셔서 감사 드리며 마우스를 캡처 사용자 정의 하나를 굴려. 여기
은 레이블 드래그 이미지를 가능하게하기위한 예제 의사 ..입니다{ turn on dragging }
Label1.DragMode := dmManual;
Label1.ControlStyle := Label1.ControlStyle + [csDisplayDragImage];
type
// VCL needs this for getting drag images..
TMyDragObject = class(TDragControlObject)
protected
function GetDragImages: TDragImageList; override;
end;
function TMyDragObject.GetDragImages: TDragImageList;
begin
Result := Form1.ImageList1;
end;
procedure TForm1.Label1MouseDown(...);
begin
{ start the dragging manually }
Label1.BeginDrag(False, 4); // the problem area! image is shown instantly at here!
end;
procedure TForm1.Label1StartDrag(Sender: TObject; var DragObject: TDragObject);
var b : TBitmap;
begin
ImageList1.Clear;
DragObject := TMyDragObject.Create(self);
b := TBitmap.Create;
try
b.Width := ImageList1.Width;
b.Height := ImageList1.Height;
b.LoadFromFile('/path/to/image');
ImageList1.Add(b, nil);
finally
b.Free;
end;
end;
procedure TForm1.Label1MouseMove(...);
begin
if X > Label1.Width div 2 then // right half
// ??? - do show the drag image
else
// ??? - no drage image should be shown
end;
이것은 어떻게 든 잘못된 것 같습니다. while 루프를 시작하면 캡처가 이미 해제되었으므로 마지막에 ReleaseCapture()를 호출하면 안됩니다. – mghie
typo : 물론 exit를 입력해야합니다 ... – mghie
@mghie : 루프에서 호출 된 "break"또는 "exit"의 경우입니다. –