Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何从JvtThumbview拖动缩略图?_Delphi_Drag And Drop_Jvcl - Fatal编程技术网

Delphi 如何从JvtThumbview拖动缩略图?

Delphi 如何从JvtThumbview拖动缩略图?,delphi,drag-and-drop,jvcl,Delphi,Drag And Drop,Jvcl,我正在编写一个WYSIWYG类型的编辑器程序,在该程序中,用户可以将图像缩略图拖动到编辑器表面(TPanel),然后通过将编辑器表面渲染到PDF上来创建PDF 在我的TPanel上,我有一个用户可以调整大小和移动的页面。我正在使用TSizeCtrl进行此操作 我有一个TJvThumbview,它正在加载磁盘文件夹中的图像 我想完成从JvThumbview到TImage的拖放操作,但做不到 请有人详细说明我将如何做到这一点 非常感谢 我无法抗拒 我的演示项目包括: 一个tjvtumbview和

我正在编写一个WYSIWYG类型的编辑器程序,在该程序中,用户可以将图像缩略图拖动到编辑器表面(TPanel),然后通过将编辑器表面渲染到PDF上来创建PDF

在我的TPanel上,我有一个用户可以调整大小和移动的页面。我正在使用TSizeCtrl进行此操作

我有一个TJvThumbview,它正在加载磁盘文件夹中的图像

我想完成从JvThumbview到TImage的拖放操作,但做不到

请有人详细说明我将如何做到这一点

非常感谢

我无法抗拒

我的演示项目包括:

  • 一个
    tjvtumbview
  • 一个
    TImage
通过以下方式实现拖动:

  • 当用户鼠标在thumb视图上按下时开始拖动操作
  • 通过
    TDragObject
    衍生工具管理拖动的图像
  • 当拖动对象显示拖动操作在
    TImage
    上结束时,绘制拖动的图像
这就是它的样子:

unit Unit1;

interface

uses
  Classes, Graphics, Controls, Forms, JvExForms, JvBaseThumbnail, JvThumbViews,
  ExtCtrls;

type
  TMyDragObject = class(TDragControlObjectEx)
  private
    FDragImages: TDragImageList;
    FPictureToDrag: TPicture;
  protected
    function GetDragImages: TDragImageList; override;
    procedure Finished(Target: TObject; X, Y: Integer;
      Accepted: Boolean); override;
  public
    constructor CreateFromThumbView(ThumbView: TJvThumbView);
    destructor Destroy; override;
  end;

  TForm1 = class(TForm)
    JvThumbView1: TJvThumbView;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure JvThumbView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure JvThumbView1StartDrag(Sender: TObject;
      var DragObject: TDragObject);
    procedure Image1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Fill our image list with arbitrary images
  if JvThumbView1.Directory = '' then
    JvThumbView1.Directory := 'C:\Users\Public\Pictures\Sample Pictures';
  // Style all controls for showing the drag image if Delphi version is D7 or
  // lower. See also comment in TMyDragObject.CreateFromThumbView
  JvThumbView1.ControlStyle := JvThumbView1.ControlStyle +
    [csDisplayDragImage];
  Image1.ControlStyle := Image1.ControlStyle + [csDisplayDragImage];
  ControlStyle := ControlStyle + [csDisplayDragImage];
end;

procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  // The destination image component accepts all drag operations
  Accept := True;
end;

procedure TForm1.JvThumbView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // If mouse down on a thumb...
  if JvThumbView1.SelectedFile <> '' then
    // then let's start dragging
    JvThumbView1.BeginDrag(False, Mouse.DragThreshold);
end;

procedure TForm1.JvThumbView1StartDrag(Sender: TObject;
  var DragObject: TDragObject);
begin
  // DragObject will automatically be destroyed when necessary when it's
  // derived from TDragControlObjectEx
  DragObject := TMyDragObject.CreateFromThumbView(JvThumbView1);
end;

{ TMyDragObject }

const
  DragImageSize = 100;

constructor TMyDragObject.CreateFromThumbView(ThumbView: TJvThumbView);
begin
  inherited Create(ThumbView);
  // This is the picture the user will drag around
  FPictureToDrag := TPicture.Create;
  FPictureToDrag.LoadFromFile(ThumbView.SelectedFile);
  // We want a nice drag image, but this property is only available in >D7
  { AlwaysShowDragImages := True; }
end;

destructor TMyDragObject.Destroy;
begin
  FDragImages.Free;
  FPictureToDrag.Free;
  inherited Destroy;
end;

procedure TMyDragObject.Finished(Target: TObject; X, Y: Integer;
  Accepted: Boolean);
begin
  // Finished dragging
  inherited Finished(Target, X, Y, Accepted);
  // If we are over an Image component, then draw the picture
  if Accepted and (Target is TImage) then
    TImage(Target).Canvas.StretchDraw(Bounds(X, Y, DragImageSize,
      DragImageSize), FPictureToDrag.Graphic);
end;

function TMyDragObject.GetDragImages: TDragImageList;
var
  DragImage: TBitmap;
begin
  if FDragImages = nil then
  begin
    FDragImages := TDragImageList.Create(nil);
    // Set dimensions of drag image list
    FDragImages.Width := DragImageSize;
    FDragImages.Height := DragImageSize;
    // Prepare drag image
    DragImage:= TBitmap.Create;
    try
      DragImage.Width := DragImageSize;
      DragImage.Height := DragImageSize;
      DragImage.Canvas.StretchDraw(Rect(0, 0, DragImage.Width,
        DragImage.Height), FPictureToDrag.Graphic);
      FDragImages.AddMasked(DragImage, clWhite);
    finally
      DragImage.Free;
    end;
  end;
  Result := FDragImages;
end;

end.
单元1;
接口
使用
类、图形、控件、窗体、JvExForms、JvBaseThumbnail、JVThumbView、,
ExtCtrls;
类型
TMyDragObject=类(TDragControlObjectEx)
私有的
FDragImages:tdragimageslist;
fpicturetorag:TPicture;
受保护的
函数GetDragImages:TDragImageList;推翻
过程已完成(目标:TObject;X,Y:整数;
接受:布尔值);推翻
公众的
构造函数CreateFromThumbView(ThumbView:TJvThumbView);
毁灭者毁灭;推翻
结束;
TForm1=类(TForm)
jvthumbview 1:TJvThumbView;
图1:TImage;
过程表单创建(发送方:ToObject);
程序JvThumbView1MouseDown(发送方:ToObject;按钮:TMouseButton;
移位:t移位状态;X,Y:整数);
程序JvThumbView1StartDrag(发送方:ToObject;
变量DragObject:TDragObject);
过程Image1DragOver(发送方,源:TObject;X,Y:整数;
状态:TDragState;变量接受:Boolean);
结束;
变量
表1:TForm1;
实施
{$R*.dfm}
过程TForm1.FormCreate(发送方:TObject);
开始
//用任意图像填充我们的图像列表
如果JvThumbView1.Directory='',则
JvThumbView1.Directory:=“C:\Users\Public\Pictures\Sample Pictures”;
//如果Delphi版本为D7或D7,则设置用于显示拖动图像的所有控件的样式
//更低。另请参见TMyDragObject.CreateFromThumbView中的注释
JvThumbView1.ControlStyle:=JvThumbView1.ControlStyle+
[csDisplayDragImage];
Image1.ControlStyle:=Image1.ControlStyle+[CSDisplayDragage];
ControlStyle:=ControlStyle+[CSDisplayDragage];
结束;
过程TForm1.Image1DragOver(发送方,源:TObject;X,Y:整数;
状态:TDragState;变量接受:Boolean);
开始
//目标图像组件接受所有拖动操作
接受:=真;
结束;
程序t用于m1.JvThumbView1MouseDown(发送方:ToObject;按钮:TMouseButton;
移位:t移位状态;X,Y:整数);
开始
//如果鼠标落在拇指上。。。
如果JvThumbView1.SelectedFile“”,则
//那我们开始拖吧
JvThumbView1.BeginDrag(错误,鼠标。绘图阈值);
结束;
程序TForm1.JvThumbView1StartDrag(发送方:ToObject;
变量DragObject:TDragObject);
开始
//DragObject将在必要时自动销毁
//源自TDragControlObjectEx
DragObject:=TMyDragObject.CreateFromThumbView(JvThumbView1);
结束;
{TMyDragObject}
常数
DragImageSize=100;
构造函数TMyDragObject.CreateFromThumbView(ThumbView:TJvThumbView);
开始
继承创建(拇指视图);
//这是用户将拖动的图片
fpictureTorag:=TPicture.Create;
FPictureToDrag.LoadFromFile(ThumbView.SelectedFile);
//我们想要一个漂亮的拖动图像,但此属性仅在>D7中可用
{AlwaysShowDragImages:=True;}
结束;
析构函数TMyDragObject.Destroy;
开始
免费;
FpictureTorag.免费;
继承性破坏;
结束;
过程TMyDragObject.Finished(目标:TObject;X,Y:Integer;
接受:布尔值);
开始
//完成拖动
继承完成(目标、X、Y、已接受);
//如果我们在一个图像组件上,那么画一幅画
如果接受且(目标为TImage),则
TImage(目标).Canvas.StretchDraw(边界(X,Y,DragImageSize,
DragImageSize),FpictureTorag.Graphic);
结束;
函数TMyDragObject.GetDragImages:TDragImageList;
变量
绘图:TBitmap;
开始
如果FDragImages=nil,则
开始
FDragImages:=tdragimageslist.Create(无);
//设置拖动图像列表的尺寸
FDragImages.Width:=DragImageSize;
FDragImages.Height:=DragImageSize;
//准备拖动图像
DragImage:=TBitmap.Create;
尝试
DragImage.Width:=DragImageSize;
DragImage.Height:=DragImageSize;
DragImage.Canvas.StretchDraw(Rect(0,0,DragImage.Width,
图纸(图纸和图纸)(图纸和图纸);
FDragImages.AddMasked(DragImage,clWhite);
最后
德拉吉梅奇。免费;
结束;
结束;
结果:=FDRAG图像;
结束;
结束。

这是相当普遍的。请详细说明您的需求以及您的哪些方面遇到了问题。请参阅优秀的拖放教程。谢谢,也谢谢您提供到Brian Long的链接!