2 つのコンポーネント間でテキストをドラッグ アンド ドロップする場合、ドラッグしているテキストをドラッグ カーソルとして表示する簡単な方法はありますか?
質問する
1772 次
1 に答える
7
リストボックスから項目をドラッグし、そのテキスト表現をドラッグ カーソルとともに表示するには:
type
TTextDragObject = class(TDragControlObjectEx)
private
FDragImages: TDragImageList;
FText: String;
protected
function GetDragImages: TDragImageList; override;
end;
{ TTextDragObject }
function TTextDragObject.GetDragImages: TDragImageList;
var
Bmp: TBitmap;
begin
if FDragImages = nil then
begin
FDragImages := TDragImageList.Create(Control);
Bmp := TBitmap.Create;
try
Bmp.Width := Bmp.Canvas.TextWidth(FText);
Bmp.Height := Bmp.Canvas.TextHeight(FText);
Bmp.Canvas.TextOut(0, 0, FText);
FDragImages.Width := Bmp.Width;
FDragImages.Height := Bmp.Height;
FDragImages.SetDragImage(FDragImages.Add(Bmp, nil), 0, 0);
finally
Bmp.Free;
end;
end;
Result := FDragImages;
end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
ControlStyle := ControlStyle + [csDisplayDragImage];
ListBox1.ControlStyle := ListBox1.ControlStyle + [csDisplayDragImage];
end;
procedure TForm1.ListBox1StartDrag(Sender: TObject;
var DragObject: TDragObject);
var
List: TListbox absolute Sender;
begin
DragObject := TTextDragObject.Create(List);
if List.ItemIndex > -1 then
TTextDragObject(DragObject).FText := List.Items[List.ItemIndex];
end;
于 2012-10-24T07:45:53.017 に答える