| 发表于:2007-12-05 11:50:5412楼 得分:0 |
下面代码可以实现,不过有缺陷 public formoldwidth as long '保存窗体的原始宽度 public formoldheight as long '保存窗体的原始高度 private sub form_resize() resizeform me end sub private sub form_load() '加载系统 resizeinit me '自动改变控件大小 end sub '在调用resizeform前先调用本函数 public sub resizeinit(formname as form) dim obj as control formoldwidth = formname.scalewidth '记录窗体的原始宽度 formoldheight = formname.scaleheight '记录窗体的原始高度 on error resume next for each obj in formname obj.tag = obj.left & " " & obj.top & " " & obj.width & " " & obj.height & " " next obj on error goto 0 end sub '按比例改变表单内各元件的大小, '在调用resizeform前先调用resizeinit函数 public sub resizeform(formname as form) dim pos(4) as double dim i as long, temppos as long, startpos as long dim obj as control dim scalex as double, scaley as double '在调试时如果出现除数为零错误,是因为没有设定form的初值,请双击form1然后再测试,这个问题绝对不会在编译好的程序中出现 if formoldwidth = 0 then '防止该错误的产生 exit sub end if scalex = formname.scalewidth / formoldwidth '保存窗体宽度缩放比例 scaley = formname.scaleheight / formoldheight '保存窗体高度缩放比例 on error resume next for each obj in formname startpos = 1 for i = 0 to 4 '读取控件的原始位置与大小 temppos = instr(startpos, obj.tag, " ", vbtextcompare) if temppos > 0 then pos(i) = mid(obj.tag, startpos, temppos - startpos) startpos = temppos + 1 else pos(i) = 0 end if '根据控件的原始位置及窗体改变大小 '按比例对控件重新定位与改变大小 obj.move pos(0) * scalex, pos(1) * scaley, pos(2) * scalex, pos(3) * scaley next i next obj on error goto 0 end sub | | |
|