vf程序背景图片怎样添加

vf程序背景图片怎样添加,第1张

如果设置的是背景颜色可在表单中某个程序代码中加入thisform.backcolor=rgb(数1,数2,数3)

数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属性中,对角部的棚罩处理(多次补偿问题),每次步长变化如何得多自然等。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12419525.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存