其實這個問題不是每個人都會遇到,因為除非您在設計所謂"套裝軟體"
所以會遇到使不同螢幕解析度的客戶,另外在一般的公司的MIS人員或多
或少也會遇到,就是設計FORM時如何去拿捏畫面的大小
客戶的畫面解析度有640x480 也有 1024 x768 或更高者
這種情況下,省事的作法就是以640x480為基準去設計
但這並不是最好的作法,雖說這不是程式的主要功能
但若您沒有考慮到這點,萬一設計出來的畫面太大,那麼客戶在使用軟體上就會出
現問題,什麼問題呢? 想想看....沒錯,就是畫面會被"切掉"了,我就遇到過客戶
執行軟體後要怎麼關閉程式呢?天啊,他竟然是按Ctrl+Alt+Delete中止軟體
我只能orz....問他為什麼?因為軟體的結束按鈕因設計畫面太大了,所以被"埋"
在下面了,因此提供客戶一個良好的使用介面也應是一個好的程式設計師該做的事
您說是嗎?
在這裏提供之前研究的小程式給各位參考參考
在form 的 init中加入
=fixform(thisform)
想法:使用遞迴的方法將所有的物件依比例縮小或放大
問題:
1.尚未考慮pageframe之物件,pageframe物件其集合為pages所以要另外考慮
2.有些字型改變後,字會被切掉(textbox),雖可以設textbox之integralHeight為.T.可設定自動調整,不過若畫面比較擠時物件會重疊
3.因最近比較忙沒時間作,所以先post 上來給大家玩一玩... Thank You
以下內容為程序代碼:
FUNCTION fixform
LPARAMETERS p_obj
Local OldHeight ,OldWidth,ChangeHeight,ChangeWidth,I,chk_type,chk_obj
IF TYPE('p_obj')!="O"
RETURN .F.
endif
****************
OldWidth=1024
OldHeight=768
ChangeWidth=0 &&新解析度與原解析度的寬度差
ChangeHeight=0 &&新解析度與原解析度的高度差
*Sysmetric(1) &&取得目前解析度的寬度
*Sysmetric(2) &&取得目前解析度的高度
If Sysmetric(1) #OldWidth
ChangeWidth=Sysmetric(1)/OldWidth
ChangeHeigh=Sysmetric(2)/OldHeight
*變更表單外框
If UPPER(p_obj.BaseClass)=='FORM'
p_obj.LockScreen=.T.
With p_obj
.Height =.Height*ChangeHeigh
.Width =.Width*ChangeWidth
.Top =.Top*ChangeHeight
.Left =.Left*ChangeWidth
Endwith
Endif
*變更每一個控制項的大小
For I=1 To p_obj.ControlCount
chk_type="p_obj."+p_obj.Controls(I).Name+".Height"
If Type(chk_type)="N"
With p_obj.Controls(I)
.Height =.Height*ChangeHeigh
.Width =.Width*ChangeWidth
.Top =.Top*ChangeHeigh
.Left =.Left*ChangeWidth
Endwith
ENDIF
*-- 調整控制項字體大小
If PEMSTATUS(p_obj.Controls(I),"FontSize",5)
p_obj.Controls(I).FontSize = Int(p_obj.Controls(I).FontSize * ChangeHeigh)
ENDIF
chk_obj= UPPER(p_obj.Controls(I).BaseClass)
If INLIST(chk_obj,'CONTAINER' )
fixform(p_obj.Controls(I))
endif
ENDFOR
If UPPER(p_obj.BaseClass)=='FORM'
p_obj.LockScreen=.F.
p_obj.AutoCenter= .T.
endif
ENDIF
p_obj.Refresh
ENDFUNC
發表於 2007/04/12 08:56 PM
沒有留言:
張貼留言