数1、数2、数3为三个0~255的自然数。
也可以在表单空白地方单击,然后在属性晌源窗口找backcolor,设置其属性为某一种颜色即可。
如果设置的是背景图片可在表单的空白地方单击,然后在属猛搭性窗口里找picture,设置其属性为你宴知态电脑上某一图片文件即可。
关于_screen.picture的图片大小问题?用_screen.picture指定屏幕的背景图片时,如果图片没有屏幕大,会平铺于屏幕上,如果我想大小不够时,图片是拉伸效果,如何实现?
_SCREEN.Picture = 'c:\windows\Forest.bmp'
WITH _SCREEN
FOR I = 1 TO .ControlCount
IF .Controls[I].Name = 'IMAGE1'
.RemoveObject('image1')
ENDIF
NEXT
.AddObject('image1', 'Image')
.image1.Picture = 'c:\windows\Forest.bmp'
.image1.Left = .Left
.image1.Top = .Top
.image1.Height = .Height
.image1.Width = .Width
.image1.Stretch = 2
.image1.Visible = .T.
ENDWITH
另外,用VFP9.0的新特性
《带动画背景的程序主界面》
为了让自己的程序主界面给人以与众不同的感觉,可以为程序主界面加上动画。
编程思路
应用ActiveX控件中的ShockFlash(Shockwave Flash Object)实现为程序主界面添加动画背景。
ShockFlash控件相关属性如下:
Movie属性:指定要播放的文件。
Playing属性:开始播放动画。
设计猛纳御步骤
1、新建一个项目文件,创建一个新表单,名称为“带动画背景的程序主界面”。
2、为了使得ActiveX控件的使用和VFP中的普通控件(如标签等)使用一样简单,首先要制定ActiveX控件工具栏。其步骤如下:
单击主工具菜单中的“工具”项,在出现的下拉菜单中选择“选项”菜单项,在出现的对话框中选择“控件”选项卡。
在“选定”列表中选择需要的ActiveX控件(由于列出的ActiveX控件很多,不要全部选上),选择过程是单击某个ActiveX控件左边的小方框,如果其中出现“(”表示选中该项,茄盯再次单击时该符号消失,表示不选中该项。本文选中“Shockwave Flash Object”。
单击屏幕下方的“设置为默枝岩认值”命令按钮,单击“确定”按钮。
在表单中添加Shockwave Flash Object控件。
3、在菜单设计器中设计系统主菜单。然后在菜单设计器主菜单上选择“显示/常规”选项菜单命令,在d出的“常规选项”对话框中,将“顶层表单”复选框选中。
4、程序代码:
在表单的Load事件中添加以下代码:
do mymenu.mpr with this,.t.
在表单的Resize事件中添加以下代码:
thisform.myflash.width=thisform.width
thisform.myflash.height=thisform.height
在表单的Activate事件中添加以下代码:
thisform.myflash.width=thisform.width
thisform.myflash.height=thisform.height
在myflash控件中的Init事件中添加以下代码:
this.movie=sys(5)+sys(2003)+"\flashbg.swf"
this.playing=.t.
this.loop=.t.
动态调整 _Screen 中的 Image 对象尺寸:
_Screen 是有 Resize 事件的,只是你无法对它编程,所以可以用 BindEvent 方法来绑定 _Screen 的
Resize 事件到一个自定义的对象方法;但 vf9 中使用 Anchor 属性可以更简单的实现你的要求。
IF PEMSTATUS( _Screen, 'oImg', 5 )
_Screen.RemoveObject( 'oImg' ) &&存在则先删除
ENDIF
_Screen.NewObject( 'oImg', 'Image' )
WITH _Screen.oImg
.Picture = 'images\main_bg.jpg'&&改为你的图片路径和文件名
*!* 放置到右下角, 随屏幕伸缩自动移动, 不调整大小
*!* .Stretch = 0
*!* .Move( _Screen.Width - .Width, _Screen.Height - .Height )
*!* .Anchor = 12
*!* 填充整个屏幕, 随屏幕缩放自动调整大小
.Stretch = 1 &&1 - 保持原长宽比缩放, 2 - 变比缩放
.Move( 0, 0, _Screen.Width, _Screen.Height )
.Anchor = 15
.Visible = .T.
ENDWITH
把坐标分为x与y轴上的两个向量(top/left);图像可移动的范围就是0到窗体宽度或高度-图像宽度或高度这个范围;
修改图像的top/left来移动图像,每次在轴上移动的距离是步长。
用计时器事件定时处做移动:
计算移动后的坐标,如果在对应的轴上超出范围,重新生成一个步长,它的sing()值与原哗和迅步长相反,同时,将向量值置为边界值。
thisform.img.left = thisform.img.left + thisform.img.step_x
if not between(thisform.img.left,0,thisform.width-thisform.img.width) then
thisform.img.step_x = round()*30*-1*sign(thisform.img.step_x)
endif
对step_y也做类似的处理即可。
当然,要想更好的运行,就需要乱此更多的细节去修饰,比如将超出边界的值补偿到left/top属性中,对角部的棚罩处理(多次补偿问题),每次步长变化如何得多自然等。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)