⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jq24.htm

📁 对于学习很有帮助
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>基于Delphi的图像漫游</title>
</head>

<body stylesrc="API扩展Delphi函数.htm" bgcolor="#EEEEFF">

<p align="center"><font size="5" color="#000000"><strong>基于Delphi的图像漫游</strong></font></p>

<p><br>
在开发多媒体应用中,经常会遇到需要在有限区域内显示大图像<br>
的情况,有不少文章对此提出过解决方法,如通过调用Windows的API函<br>
数,直接读写内存等。这些方法有某些优点,但实现起来较为复杂,且<br>
易出错。笔者在实践中通过仔细摸索,利用Delphi的强大的面向对象<br>
可视化开发环境开发了一种交互式图像漫游方法。<br>
Delphi中,鼠标的消息响应是通过元件的OnMouseDown、OnMouseU<br>
p和OnMouseMove事件实现的,通过对此三个事件编程,可控制图像在有<br>
限区域内移动。考虑到所移动的图像的边界应总在该区域外,因此图<br>
像的左上角坐标应小于该区域对应坐标,图像右下角坐标应大于该区<br>
域对应坐标(除非图像大小比该区域小)。图1<br>
具体方法是:<br>
1、新建一工程Project1,在Form1中依次放入Panel1、Panel2和I<br>
mage1元件,注意Pa nel2和Image1分别在Panel1和Panel2上,再将一La<br>
bel1元件加入Panel2中,调整Panel1尺寸为适当大小,并修改各元件属<br>
性为:<br>
元件<br>
属性名<br>
属性值<br>
Panel1<br>
BevelInner:<br>
bvRaised<br>
BevelOuter: bvNone<br>
BorderStyle: bsSingle<br>
Panel2<br>
Align:<br>
alClient<br>
Image1<br>
AutoSize:<br>
True<br>
Picture:<br>
&quot;Apple.bmp&quot;<br>
Label1<br>
Align:<br>
alClient<br>
Transparent : True<br>
注意:此处Label1的作用不是显示字符,而是利用它响应鼠标消息<br>
,如果不用Label1而直接利用Image1的鼠标事件响应,则会由于其OnMo<br>
useDown事件的激活与Image1的自身坐标移动事件冲突而使图像发生<br>
闪烁甚至不能移动。<br>
2、在implementation后加入变量声明:<br>
origin:Tpoint;<br>
image_left:integer;<br>
image_top:integer;<br>
visa1:Tpoint; (鼠标当前位置相对图像右下角的坐标)<br>
visa2:Tpoint; (鼠标当前位置相对图像左上角的坐标)<br>
canmove:boolean;<br>
编写Label1鼠标响应事件:<br>
procedure TForm1.Label1MouseDown(Sender: TObject; Button<br>
: TMouseButton;S hift: TShiftState; X, Y: Integer);<br>
begin<br>
if Button=mbLeft then<br>
begin<br>
origin.x:=X;<br>
origin.y:=Y;<br>
image_left:=image1.left;<br>
image_top:=image1.top;<br>
visa1.x:=X-(image1.width-panel2.width+image1.left);<br>
visa1.y:=Y-(image1.height-panel2.height+image1.top);<br>
visa2.x:=X-image1.left;<br>
visa2.y:=Y-image1.top;<br>
canmove:=true;<br>
end;<br>
end;<br>
procedure TForm1.Label1MouseMove(Sender: TObject; Shift:<br>
TShiftState; X, Y: Integer);<br>
begin<br>
if canmove then<br>
begin<br>
if X&lt; visa1.x then X:=visa1.x;<br>
if X&gt;visa2.x then X:=visa2.x;<br>
if Y&lt; visa1.y then Y:=visa1.y;<br>
if Y&gt;visa2.y then Y:=visa2.y;<br>
image1.left:=image_left+(X-origin.x);<br>
image1.top:=image_top+(Y-origin.y);<br>
end;<br>
end;<br>
procedure TForm1.Label1MouseUp(Sender: TObject; Button: <br>
TMouseButton;Shi ft: TShiftState; X, Y: Integer);<br>
begin<br>
canmove:=false;<br>
end;<br>
上述程序在Delphi 2.0中编译通过,经过扩充和修改还可应用于<br>
多媒体数据库的图像显示,对于开发友好界面有一定借鉴作用。<br>
更正<br>
3月16日Nbase公司的广告中,北京新鸿基东方科技发展有限公司<br>
的电话、传真有误,应为:<br>
Tel:(010)62987788<br>
Fax:(010)62988485<br>
</p>

<p>向晖</p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -