Delphi Windows缩略图/帧视图

Delphi Windows缩略图/帧视图,delphi,qt,mfc,native,thumbnails,Delphi,Qt,Mfc,Native,Thumbnails,如果有一个带有垂直滚动条的面板和一个描述相关图像的图像矩阵,那么制作缩略图视图的最简单方法是什么?我还希望这样,如果父帧水平调整大小,矩阵将收缩到所需的列数,以便在没有水平滚动条的情况下显示缩略图。我希望能够拖动和重新排列这些缩略图以及。写这篇文章的工具包其实并不重要。如果你知道用MFC做这件事的好方法,那很酷,Delphi/C++builder也很酷。只是某种本地应用程序框架 哇,这听起来很像我在乞求家庭作业的帮助。我发誓这是为一些驱动激光投影仪的软件设计的。看看: 另外,注册的Delphi

如果有一个带有垂直滚动条的面板和一个描述相关图像的图像矩阵,那么制作缩略图视图的最简单方法是什么?我还希望这样,如果父帧水平调整大小,矩阵将收缩到所需的列数,以便在没有水平滚动条的情况下显示缩略图。我希望能够拖动和重新排列这些缩略图以及。写这篇文章的工具包其实并不重要。如果你知道用MFC做这件事的好方法,那很酷,Delphi/C++builder也很酷。只是某种本地应用程序框架

哇,这听起来很像我在乞求家庭作业的帮助。我发誓这是为一些驱动激光投影仪的软件设计的。

看看:


另外,注册的Delphi客户可以从Embarcadero网站免费下载TMS平滑组件。如果您不是注册的Delphi用户,那么您可以从TMS网站购买该集合。

这里是我用来显示变量集合的摘录代码
numImages
网络摄像头数量

const MaxImages = 24;

type 
 TForm1 = class(TForm)
  ...
  images: array[1..MaxImages] of TWebcamImage;
  numImages: integer;
  ....
 end;
TWebCamImage
TImage
的后代,具有一些附加属性,如网络摄像头的原始url、保存图片的文件名以及双击在辅助面板中打开图片的处理程序

下面是用于在面板中排列图像的代码

procedure TForm1.ArrangeImages;
 var i, numh, numv : integer;
 const margin=2;
 begin
  case numImages of
    1: begin numh:=1; numv:=1; end;
    2: begin numh:=2; numv:=1; end;
    3: begin numh:=3; numv:=1; end;
    4: begin numh:=2; numv:=2; end;
    5,6: begin numh:=3; numv:=2; end;
    7,8: begin numh:=4; numv:=2; end;
    9: begin numh:=3; numv:=3; end;
    10: begin numh:=5; numv:=2; end;
    11,12: begin numh:=4; numv:=3; end;
    13,14,15: begin numh:=5; numv:=3; end;
    16: begin numh:=4; numv:=4; end;
    17,18,19,20: begin numh:=5; numv:=4; end;
    else begin numh:=6; numv:=4; end;
  end;
  for i:=1 to numImages do 
   begin
    images[i].Width := (panel2.Width div numh) - margin * 2;
    images[i].Height := (panel2.Height div numv) - margin * 2;
    images[i].Top := (((i-1) div numh) * (panel2.Height div numv)) + margin;
    images[i].Left := (((i-1) mod numh) * (panel2.Width div numh)) + margin;
   end;
 end;
此方法在表单初始化时调用,挂接在
oncreate
事件和
onresize
事件中

procedure TForm1.FormCreate(Sender: TObject);
 begin
  ...
  numImages:=0;
  for i:=1 to maxImages do 
    begin
     imageURL:=ini.ReadString('images','imageURL'+intToStr(i),imageURLDefault);
     if imageURL<>'' then 
      begin
       inc(numimages);
       images[numImages]:=TWebCamImage.create(self,panel2,imageURL);
      end;
     ....
    end;
   ....
  ArrangeImages;
   ....
 end;

procedure TForm1.FormResize(Sender: TObject);
 begin
  ArrangeImages;
 end;
过程TForm1.FormCreate(发送方:TObject);
开始
...
数字图像:=0;
对于i:=1的最大值
开始
imageURL:=ini.ReadString('images','imageURL'+intToStr(i),imageURLDefault);
如果是imageURL“”,则
开始
公司(numimages);
images[numImages]:=TWebCamImage.create(self,panel2,imageURL);
结束;
....
结束;
....
安排图像;
....
结束;
过程TForm1.FormResize(发送方:TObject);
开始
安排图像;
结束;

我不太确定我是否理解您的意思,但我会从一个框架开始,其中包含图像及其描述。然后,我将使用TFlowPanel来保存框架的实例化。我认为,实现拖放应该没有太多的工作。但从未尝试过

如果有很多图片,我认为你应该选择一个自己的双缓冲解决方案


最后,您只需插入激光投影组件并将其连接到激光投影转向装置……

我想我更感兴趣的是如何构造这样一个组件,而不是如何找到组件本身。我最近遇到了代码(Delphi)这样做。寻找“线程缩略图演示”在真棒!这或多或少就是我想要的。。。现在我只需要弄清楚如何进行拖放…这里是指向TMS Smooth Controls for Delphi和C++Builder 2010@stukelly的下载链接,我是Delphi XE3的注册客户,我可以在注册用户下载中看到很多东西,除了TMS组件。当我尝试从下载时。我将收到错误“抱歉,您没有访问此提交的权限。请查看RAD Studio和组件的类似提交,以及Tim DelChiaro的其他提交。”为什么?