【问题标题】:Windows thumbnail/frame viewWindows 缩略图/框架视图
【发布时间】:2010-01-18 08:57:55
【问题描述】:

制作缩略图视图的最简单方法是什么,其中您有一个带有垂直滚动条的面板和一个描述其相关图像的图像矩阵?我也希望这样,如果父框架水平调整大小,矩阵将缩小到所需的列数以显示没有水平滚动条的缩略图。我也希望能够拖动和重新排列这些缩略图。编写它的工具包并不重要。如果您知道使用 MFC 的好方法,那很酷,Delphi/C++ builder 也非常酷。只是某种原生应用框架。

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

【问题讨论】:

    标签: delphi qt mfc native thumbnails


    【解决方案1】:

    看看TMS AdvSmoothImageListBox

    AFAIK,注册的 Delphi 客户可以从 Embarcadero 网站免费下载 TMS Smooth Components。如果您不是 Delphi 注册用户,则可以从 TMS 网站购买该合集。

    【讨论】:

    • 我想我更感兴趣的是如何构建这样的东西,而不是如何找到组件本身。
    • 我最近遇到了这样做的代码(Delphi)。在rmklever.com上查找“线程缩略图演示”
    • 太棒了!这或多或少是我正在寻找的......现在我只需要弄清楚如何进行拖放......
    • 这里是用于 Delphi 和 C++Builder 2010 的 TMS 平滑控件的下载链接cc.embarcadero.com/Item/27470
    • @stukelly,我是 Delphi XE3 的注册用户,我可以在我的注册用户下载中看到很多东西,除了 TMS 组件。当我尝试从 cc.embarcadero.com/item/27470 下载时。我将收到错误“抱歉,您无权访问此提交。请参阅 RAD Studio 和组件的类似提交,以及 Tim DelChiaro 的其他提交。”为什么?
    【解决方案2】:

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

    const MaxImages = 24;
    
    type 
     TForm1 = class(TForm)
      ...
      images: array[1..MaxImages] of TWebcamImage;
      numImages: integer;
      ....
     end;
    

    TWebCamImageTImage 的后代,具有一些附加属性,例如网络摄像头的原始 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;
    

    【讨论】:

      【解决方案3】:

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

      如果有很多图像,我认为您应该使用所有者绘制和双缓冲解决方案。

      最后,您应该将激光投影组件放入并将其连接到激光投影仪转向单元......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-26
        • 2012-01-25
        • 1970-01-01
        • 1970-01-01
        • 2010-12-01
        • 1970-01-01
        • 2016-06-20
        • 2012-07-04
        相关资源
        最近更新 更多