图象漫游的功能如何实现?(100分)

  • 主题发起人 主题发起人 zeroworld
  • 开始时间 开始时间
Z

zeroworld

Unregistered / Unconfirmed
GUEST, unregistred user!
在Panel上建立了几个图象元件,就像Tshape的那种,如何在另一个窗口中显示出该Panel的
缩略图。
现在问题是当Panel全部都能显示出来的时候,可以用copyrect实现,可是当Panel有一部分
应为窗体不够宽而隐藏起来的时候,那部分看不见的就不能出来
该怎么办才能实现其余隐藏部分的缩略图,急呀,谢谢了
[:)]
 
那隐藏起来的部分图象能copy出去吗
隐藏部分还有Tshape控件
 
to 卷起千堆雪tyn
你大概理解错了我的意思,我要实现的是这个panel的缩略图。Panel太大我会卷屏的
这个实现起来不要太简单。现在的问题是隐藏部分用copyrect实现缩略图不行
 
你是不是说将屏幕上的panel直接抓到另一个窗口中去呢?
 
对,差不多了,就是panel中的图象整个的的复制到另一个窗口中
 
如果是这样,可以尝试先将panel连同上面的图象在内存中画好,再分别在屏幕上画出panel,
和窗口中去,看这样可否!
 
问题是,这些图象并不是画上去的,都是类似于Tshape的控件一个个的形成的
Tshape.parent:=panel1的
对于显示出来的部分panel,可以用copyrect连同他上面的控件一起copy到另一个窗口中去
但是对于不显示出来的部分就不行了
 
代码是在是太多了,不过你可以这样想
就相当于在Form中画控件,但是有部分控件超出了Form的范围,在Form能显示出来的部分的
外面,这样Form会自动产生ScrollBar,卷动ScrollBar就会看到外面的控件了
现在要能在另一个窗体中缩小显示整个窗口的完整图象,就像玩星际争霸,帝国时代时的
小地图的功能一样
 
我用了Image地,上面地元件就是TImage做的
其实我要实现的是一个类似于线路图设计的软件
可以在上面搭元件,在小窗口中显示总体的框架。
并不是只用一个image就能实现的
 
明白了你的意思。
你在FORM1上放一个PANEL和一个BUTTON,再在PANEL上放一些控件;
在FORM2上放一个BUTTON。

var
Bmp :TBitmap; //全局变量

procedure TForm1.Button1Click(Sender: TObject);
begin
WindowState :=wsMaximized;//如果加上这句,也许可以部分的满足你的要求。
Bmp :=TBitmap.Create;
Bmp.Width :=Panel1.Width+1;
Bmp.Height :=Panel1.Height+1;
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,Form1.Canvas.Handle,Panel1.Left,Panel1.Top,SRCCOPY);
Form2.ShowModal;
end;

--------------------------------

procedure TForm2.Button1Click(Sender: TObject);
begin
Canvas.StretchDraw(Rect(0,0,300,300),Bmp);
Bmp.Free;
end;
 
看来是不行了,这样的代码也只能copy部分,
对各个元件画缩小图,缩小图由元件本生来实现,然后根据位置贴到缩略图的相应位置上
去,大概这才是真正的解决之道吧。
例如元件为TmyShape,他有个public函数为
DrawThumbView(ACanvas:TCanvas,DestRect:TRect);
实现将Tmyshape中的图画到Acanvas中的DestRect位置上
with panel do
begin
for i:=0 to controlcount-1 do
begin
DrawThumbView(Form2.canvas,rect);
end;
end;
这样实现起来应该不难的吧
 
多人接受答案了。
 
后退
顶部