オーバードラッグ:ドラッグイメージチェンジながら、私はstartDragを上の私のカスタムDragObject型のインスタンスを作成していたグリッド
procedure TForm1.SecondGridDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := False;
if Source is TMyDragControlObject then
with TMyDragControlObject(Source) do
// using TcxGrid
if (Control is TcxGridSite) or (Control is TcxGrid) then begin
Accept := True
// checking the record value on grid
// the label of drag cursor will be different
// getting the record value works fine!
if RecordOnGrid.Value > 5 then
DragOverPaint(FImageList, 'You can drop here!');
else begin
Accept := false;
DragOverPaint(FImageList, 'You can''t drop here!');
end
end;
end;
マイDragOverPaint手順:
DragOver DragOverは上の別のグリッド上の最近procedure TForm1.GridStartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
DragObject := TMyDragControlObject.Create(Sender as TcxGridSite);
end;
procedure TForm1.DragOverPaint(ImageList: TImageList; AValue: string);
var ABmp: TBitmap;
begin
if not Assigned(ImageList) then Exit;
ABmp := TBitmap.Create();
try
with ABmp.Canvas do begin
ABmp.Width := TextWidth(AValue);
ABmp.Height := TextHeight(AValue);
TextOut(0, 0, AValue);
end;
ImageList.BeginUpdate;
ImageList.Clear;
ImageList.Width := ABmp.Width;
ImageList.Height := ABmp.Height;
ImageList.AddMasked(ABmp, clNone);
ImageList.EndUpdate;
finally
ABmp.Free();
end;
Repaint;
end;
私はそれがグリッドのレコード値に応じてDragImageListを再描画したいのですが、イメージリストrefはありませんそれが既に塗られているときにresh。イメージリストのドラッグを開始したら、Windowsが特別にドラッグするために、別の一時的ブレンドイメージリストを作成するため
良いドラッグ&ドロップチュートリアルはのことである[ブライアン・ロングさん](http://www.blong.com/Conferences/BorCon2001/DragAndDrop/4114.htm)、それはドラッグ中に、ドラッグイメージを変えていないのに扱います。 – NGLN