在浏览某些网页中, 当跳出对话框让用户选择的时候, 为了让对话框醒目, 常常让背景变暗, 如同覆盖上一层黑薄膜. 如同以下效果:
这种效果在VFP中可以很容易实现. 原理是在背景表单上覆盖一层半透明表单
首先定义一个表单 FM_COVER, windowType一定要是无模式的 (modeless)
- DEFINE CLASS form1 AS form
- Top = 0
- Left = 0
- Height = 1000 &&足够大
- Width = 1600
- Desktop = .T. && 一定要为T, 否则无透明效果
- DoCreate = .T.
- BorderStyle = 0 && 无框
- Caption = "Form1"
- TitleBar = 0 && 无标题
- BackColor = RGB(80,80,80) && 背景为暗黑色
- Name = "Form1"
- PROCEDURE Init
- DECLARE SetWindowLong In Win32Api AS _Sol_SetWindowLong Integer, Integer, Integer
- DECLARE SetLayeredWindowAttributes In Win32Api AS _Sol_SetLayeredWindowAttributes Integer, String, Integer, Integer
- _Sol_SetWindowLong(THISFORM.hWnd, -20, 0x00080000)
- _Sol_SetLayeredWindowAttributes(THISFORM.hWnd, 0, 200, 2) && 第三个为alpha参数, 设置透明效果,0-255之的一个数
- ENDPROC
- ENDDEFINE
在程序启动时候, 先创造表单, 但不显示:
do form fm_cover noshow
在需要跳出对话框时, 比如打开一个模式表单时, 前后各加上show和hide语句:
- ....
- fm_cover.show() && 背景变暗
- do form xxx 或 messagebox(...) && 这个模式表单的desktop也必须设为.t., 否则会被fm_cover所覆盖
- fm_cover.hide() && 恢复背景
- ....
以上代码在VFP8.0, MDI窗口为_screen的条件下测试成功
阅读(2403) | 评论(0) | 转发(0) |