VFP中控件如何随着窗体自动调整

mmlmh 2007-06-10 10:36:11
有谁知道,当一个窗体调整大小时,如何使窗体中的控件也随着自动调整到适合窗体大小啊.
...全文
851 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxqzna 2012-10-20
  • 打赏
  • 举报
回复
表达式计算结果为一非法值
KQX7381 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
在VFP9.0中已经很容易了,

在表单的Init事件中加代码:

FOR I=1 TO THIS.CONTROLCOUNT
WITH THIS.CONTROLS(I)
IF TYPE( ".ANCHOR ")# "U "
.ANCHOR=240
ENDIF
IF TYPE( ".FontSize ")# "U "
.FONTSIZE=.FONTSIZE……
[/Quote]

怎么提示找不到属性 FONTSIZE
faipo 2012-06-01
  • 打赏
  • 举报
回复
thisform.setall('Anchor',240)这样就搞定
敦厚的曹操 2012-06-01
  • 打赏
  • 举报
回复

* ------------------------------------------------------ \\ 自动随表单变动

* 1 -------- 置顶

*
*
* *
*
* **附MiHu提供的Anchor建议值:
*!* 基类 值 描述
*!* CommandButton 12 依赖于你摆放的位置,我们假象它在右下角
*!* Pageframe 15 和父容器一起缩放
*!* Checkbox 672 控件相对于左/右边界自适应,并且横向缩放,纵向不缩放
*!* Combobox 672
*!* Label 672
*!* OptionButton 672
*!* OptionGroup 672
*!* Spinner 672
*!* Textbox 672
*!* Container 240 控件相对于四个边界都缩放,包括横向和纵向
*!* Editbox 240
*!* Grid 240
*!* Image 240
*!* Line 240
*!* Listbox 240
*!* OLEBoundControl 240
*!* OLEControl 240
*!* Shape 240
*
*
*--如果没有用到OptionButton、OptionGroup、CommandButton、Pageframe等,用如下方法也不错哟。
*--表单的INIT事件

*!* IF SYSMETRIC(1)<>THIS.WIDTH
*!* FOR I=1 TO THIS.CONTROLCOUNT
*!* WITH THIS.CONTROLS(I)
*!* IF TYPE(".ANCHOR")#"U"
*!* .ANCHOR=240
*!* ENDIF
*!* IF TYPE(".FontSize")#"U"
*!* .FONTSIZE=MAX(MIN(.FONTSIZE*(SYSMETRIC(1)/THIS.WIDTH),125),5)
*!* ENDIF
*!* ENDWITH
*!* ENDFOR
*!* ENDIF

*!* 0:NULL
*!* 1:height和top变回old值,left和width为130和94(而且在再度移动按钮位置和改变大小前,再调整表单,按钮不再受影响)
*!* 2:和1相反,是left和width变回old值,height和top为37、130(而且在再度移动按钮位置和改变大小前,再调整表单,按钮不再受影响)
*!* 3:left、top、height、width都变为原来的值
*!* 4:height为oldheight,width、left为new值,top为oldtop+DH,即保持和表单底部的距离保持在设计阶段的值
*!* 5:top为oldtop,left、width为new值,height为oldheight+DH,即表单的高度增加多少,控件的高度也增加多少
*!* 6:left、width、height均为old值,只是height为oldheight+DH,即表单的高度增加多少,控件的高度也增加多少
*!* 7:top、left、widht均为OLD值,只是height为oldheight+DH,即表单的高度增加多少,控件的高度也增加多少
*!* 8:top、height均为new值,width就为old值,left就是oldleft+DW,就是控件保持和表单右边的距离不变
*!* 9:top、height、width均为old值,left就是oldleft+DW,就是控件保持和表单右边的距离不变
*!* 注意:它的十个可用的值要加起来用的,比如,现在我有一个Listview,我要让它在表单缩放时,Top和left保持不变,右边界和底部边界跟随表单一起缩放,那么就要用到Anchor中的四个值:
*!* 1——顶部绝对,即距表单顶部的距离保持不变;
*!* 2——左边绝对,即距表单左边的距离保持不变;
*!* 4——底部绝对,即距表单底部的距离保持不变;
*!* 8——右边绝对,即距表单右边的距离保持不变;
*!* 现在,把Listview的anchor设置为15(1+2+4+8),缩放表单时Listview就跟着自动缩放了。


*!* 1——顶部绝对,即距表单顶部的距离保持不变;
*!* 2——左边绝对,即距表单左边的距离保持不变;
*!* 4——底部绝对,即距表单底部的距离保持不变;
*!* 8——右边绝对,即距表单右边的距离保持不变;
*!* 15—— 上下左右拉伸,适合表格;1+2+4+8
*!* 7—— 顶部和左边不变,上下拉伸; 1+2+4

*!* 6—— 底部和左边不变;2+4

*!* 5—— 上下拉伸;1+4









功克 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
在VFP9.0中已经很容易了,

在表单的Init事件中加代码:

FOR I=1 TO THIS.CONTROLCOUNT
WITH THIS.CONTROLS(I)
IF TYPE( ".ANCHOR ")# "U "
.ANCHOR=240
ENDIF
IF TYPE( ".FontSize ")# "U "
.FONTSIZE=.FONTSIZE……
[/Quote]






很强大,再补充页框里面的代码。

FOR m.i=1 TO THIS.CONTROLCOUNT
WITH THIS.CONTROLS(m.i)
IF TYPE( ".ANCHOR ")# "U"
.ANCHOR=240
ENDIF
*!* IF TYPE( ".FontSize")# "U"
*!* ?TYPE( ".FontSize")
*!* .FONTSIZE=.FONTSIZE*(SYSMETRIC(1)/THIS.WIDTH)
*!* ENDIF
ENDWITH

IF THISFORM.Controls[m.i].Baseclass$"Pageframe"
*Loop through each page of the pageframe
FOR m.j = 1 TO THISFORM.Controls[m.i].PageCount
WITH THISFORM.Controls[m.i].pages[m.j]
*loop through all the controls on the page
FOR m.k = 1 TO .ControlCount
WITH .CONTROLS(m.k)
IF TYPE( ".ANCHOR ")# "U"
.ANCHOR=240
ENDIF
ENDWITH
ENDFOR
ENDWITH
ENDFOR
ENDIF
ENDFOR
十豆三 2007-06-14
  • 打赏
  • 举报
回复
在VFP9.0中已经很容易了,

在表单的Init事件中加代码:

FOR I=1 TO THIS.CONTROLCOUNT
WITH THIS.CONTROLS(I)
IF TYPE(".ANCHOR")#"U"
.ANCHOR=240
ENDIF
IF TYPE(".FontSize")#"U"
.FONTSIZE=.FONTSIZE*(SYSMETRIC(1)/THIS.WIDTH)
ENDIF
ENDWITH
ENDFOR
  • 打赏
  • 举报
回复
到VFP提供的Samples里边研究以下内容:
Visual FoxPro 9.0 Samples
Resize and Reposition Controls at Run Time Sample
File: ...\Samples\Solution\Forms\Cresize.scx
A user can resize this sample form as desired. The controls on the form are resized or repositioned relative to the new Height and Width properties of the form.
This form uses the resizable class in ...\Samples\Classes\Samples.vcx to manage resizing and repositioning of the controls. The following line of code is added to the Resize event of the form, calling the AdjustControls method of the resizable class:
THIS.Resizable2.AdjustControls
In the Init of the resizable class, code loops through all the controls in the form, storing their positions and sizes relative to the form in an array. When the form is resized, the AdjustControls method resizes and repositions the controls to their relative sizes and positions.
You can add more controls to the form and the new controls will also be resized and repositioned.
The RepositionList and ResizeList properties contain a space-delimited list of all the classes that you want to reposition and resize. If you do not want a certain class to be resized, remove it from the ResizeList.
You can prevent a user from making the form too small for the objects contained on it by setting the form's MinHeight and MinWidth properties.
shxmh 2007-06-11
  • 打赏
  • 举报
回复
在form中的resize事件中通过%比计算重新调整控件的大小位置比较好
yoncen 2007-06-11
  • 打赏
  • 举报
回复
在vfp 9.0時有停靠屬性可以設置,否則的話只能用到resize自定義類.
如果是比較簡單的需求,可以自已在form中的resize事件寫.
網上能找到的通用resize類效果不算太好.
weiyong99 2007-06-11
  • 打赏
  • 举报
回复
那为何不锁定窗口,让窗口大不起来,小不下去.控件事先调好就行了.

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧