Windows缩略图/框架视图

时间:2010-01-18 08:57:55

标签: delphi qt mfc native thumbnails

制作缩略图视图的最简单方法是什么,您有一个带有垂直滚动条的面板,以及描述其相关图像的图像矩阵?我也喜欢这样,如果父框架水平调整大小,矩阵将缩小到必要的列数,以显示没有水平滚动条的缩略图。我希望能够拖动和重新排列这些缩略图。写入的工具包并不重要。如果你知道用MFC做一个好方法,那很酷,Delphi / C ++构建器也很酷。只是某种本机应用程序框架。

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

3 个答案:

答案 0 :(得分:3)

看看TMS AdvSmoothImageListBox

alt text

AFAIK,已注册的德尔福客户可以从Embarcadero网站免费下载TMS Smooth Components。如果您不是注册的Delphi用户,那么您可以从TMS网站购买该系列。

答案 1 :(得分:0)

以下是用于显示变量numImages个网络摄像头的集合的摘录代码。

const MaxImages = 24;

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

TWebCamImageTImage的后代,其中包含一些其他属性,例如网络摄像头的原始网址,已保存图片的文件名以及双击打开辅助图片的处理程序面板。

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

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;

答案 2 :(得分:0)

我不太确定我理解你是对的,但我会先用一个框架来控制图像及其描述。然后我会使用TFlowPanel来保存帧的实例。我认为,实施拖放不应该做太多工作。但是从未尝试过。

如果有很多图片,我认为你应该选择ownerdraw和doublebuffered解决方案。

最后,您应该放入激光投影组件并将其连接到激光投影机转向装置......