电竞比分网-中国电竞赛事及体育赛事平台

分享

VFP的_SCREEN對象屬性和事件的定義

 Alkaid2015 2012-07-26

在VisualFoxPro中充分利用_SCREEN對象,就能對主窗口進(jìn)行各種操作,如可以動態(tài)地改變主窗口的圖標(biāo)、標(biāo)題、顏色等,也可以通過它引用其它的對象或?qū)傩浴?
_SCREEN對象(即指主窗口)是從表單類派生出來的,表單中的部分屬性、事件和方法在_SCREEN對象也存在,因而可以把主窗口當(dāng)作表單來操作(但也有所不同,如在_SCREEN中不能像表單那樣對LOAD、ACTIVATE等事件添加代碼)。
下面舉例說明如何利用_SCREEN對象:
1 更改圖標(biāo)和標(biāo)題
把VFP窗口的小狐貍圖標(biāo)和“MicrosoftVisualFoxPro”標(biāo)題,改為你所喜歡的圖標(biāo)和標(biāo)題,只需執(zhí)行代碼 _SCREEN ICON=″你的圖標(biāo)文件名(.ICO)″
_SCREEN CAPTION=″你的標(biāo)題名″
2 動態(tài)地改變主窗口的圖標(biāo)和標(biāo)題
即讓主窗口的圖標(biāo)和標(biāo)題隨時間的變化而變化。這就需要在_SCREEN中加入一個Timer類,Timer類是每經(jīng)過一定的時間(在Interval屬性中設(shè)定,單位為毫秒)循環(huán)地執(zhí)行其Timer事件中的代碼。方法如下:先定義你的Timer類:點“文件/新建/類/新建文件”,這時彈出一窗口,上面有這幾項需要填寫:“類名”項填新建類名(如MyTimer),“派生于”項選Timer,“來源于”項不用填,“存儲于”項填新建類庫名(如MyClass)。確定后出現(xiàn)類設(shè)計器(很像表單設(shè)計器),上有一小鬧鐘(Timer控件)把其Interval屬性設(shè)為1000(時間間隔,毫秒),在Init事件中輸入代碼:
PUBL NN
NN=0&&NN為變化的標(biāo)志變量
在Timer事件(每隔一定時間執(zhí)行)輸入:
_SCREEN ICON=IIF((-1)^NN,″所需加入的圖題1″,″圖標(biāo)2″)
_SCREEN CAPION=IIF((-1)^NN,″所需加入的標(biāo)題1″,″標(biāo)題2″)
NN=NN+1
關(guān)閉并保存,類建立完畢。
可視地把該類添到_SCREEN中:由于_SCREEN與表單有所區(qū)別,故不能用表單設(shè)計器工具來完成拖放類定義,而是用“類瀏覽器”來完成,尋工具/類瀏覽器”后,彈出一打開窗口,選擇剛才建立的類庫文件(MYCLASS),確定后,彈出類瀏覽器窗口,選中MyTimer類,這時在類瀏覽器的左上角有一小鬧鐘,把它拖放到主窗口中,你就會驚奇地發(fā)現(xiàn)你的主窗口不再是死氣沉沉的了。不信?試試!
3 利用_SCREEN得到主窗口內(nèi)包含的表單數(shù)量
執(zhí)行:?_SCREEN FORMCOUNT即可
4 利用_SCREEN得到打開的表單名
可執(zhí)行:?_SCREEN FORMS(1) NAME&&FORM(1)為數(shù)組
以上是有關(guān)_SCREEN對象的簡單闡述,想要你的窗口美化起來,具體的工作還需要你自己去做。

發(fā)貼心情

[求助]如何為_SCREEN表單指定事件(在VFP8、9中運行)

張洪舉大師《160問》中的16問“如何為_SCREEN表單指定事件”為何不能在VFP8中運行
張老師書中解決指定事件過程提供的源程序如下:
IF TYPE("_Screen.oHook")="O"
_Screen.RemoveObject("oHook") &&如果對象存在,移除
ENDIF
_Screen.AddObject("oHook","MyHook")

DEFINE CLASS MyHook AS Custom
oScreen = _Screen
WAIT WINDOW oscreen

PROCEDURE oScreen.Resize
"發(fā)生了Resize事件"
ENDPROC

PROCEDURE oScreen.click
"發(fā)生了Click事件"
ENDPROC

PROCEDURE oScreen.MouseMove
LPARAMETERS nButton, nShift, nXCoord, nYCoord
WAIT WINDOW "水平坐標(biāo):"+STR(nXCoord)+"垂直坐標(biāo):"+STR(nYCoord) NOWAIT
ENDPROC

ENDDEFINE

上述程序在VFP6中運行很好,但系統(tǒng)升級到VFP8 或VFP9后提示語句:
PROCEDURE oScreen.Resize 等(指 oScreen)出錯。

請各位高手解決

[原創(chuàng)]這個不知是不是你想要的結(jié)果(在VFP8及VFP9里都測試通過):

**********************在_Screen里指定事件***********************
PUBLIC oHandler
oHandler=NEWOBJECT("myhandler")
BINDEVENT(_SCREEN,"Resize",oHandler,"myresize") && 框架變動
BINDEVENT(_SCREEN,"Click",oHandler,"myClick") && Click事件
BINDEVENT(_SCREEN,"RightClick",oHandler,"myRClick")&& RightClick右鍵事件
BINDEVENT(_SCREEN,"MouseMove",oHandler,"myMouseMove") && MouseMove鼠標(biāo)經(jīng)過事件
BINDEVENT(_SCREEN,"KeyPress",oHandler,"myKeyPress")&& KeyPress事件
DEFINE CLASS myhandler AS Session
PROCEDURE myresize
"發(fā)生了Resize事件"
RETURN
PROCEDURE myClick
"發(fā)生了Click事件"
RETURN
PROCEDURE myRClick
"發(fā)生了RightClick事件"
RETURN
PROCEDURE myKeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode = 27 && [ESC] 退出系統(tǒng)
"按下了[ESC]"
CLEAR DLLS
QUIT
ENDIF
"發(fā)生了KeyPress事件"
RETURN
PROCEDURE myMouseMove
LPARAMETERS nButton, nShift, nXCoord, nYCoord
WAIT WINDOW "水平坐標(biāo):"+STR(nXCoord)+"垂直坐標(biāo):"+STR(nYCoord) NOWAIT
RETURN
ENDDEFINE

事件綁定:不知道這個函數(shù)行不行

bindevent(_screen,'resize',你綁定到的對象,'處理方法')

可以用 BINDEVENT() 來綁定事件, 屬性或方法從 Visual FoxPro 自己的對象到其它 Visual FoxPro 對象。要從 Component Object Model (COM) 對象綁定事件, 用 EVENTHANDLER() 函數(shù)。

BINDEVENT(oEventSource, cEvent, oEventHandler, cDelegate [, nFlags])

參數(shù)

oEventSource
指定事件源, 它必須是一個有效的 Visual FoxPro 對象。
cEvent
指定你想綁定的事件, 方法或?qū)傩缘拿帧?
oEventHandler
指定對象, 必須是一個有效的 Visual FoxPro 對象, 處理事件。
cDelegate
指定方法, 或 "代理", 為 oEventHandler 處理事件。
nFlags
指定一個你可以為事件綁定操作設(shè)置的額外的位標(biāo)記。

示例
下面示例展示如何保持類瀏覽器的位置在 Visual FoxPro 桌面的左邊, 進(jìn)化論桌面如何重調(diào)大小。BINDEVENT() 用 oHandler 關(guān)聯(lián) _SCREEN 或 Visual FoxPro 桌面 的 Resize 事件, 它使用 myresize 作為它的代理。當(dāng) Resize 事件被觸發(fā)時運行 myresize 代碼。
PUBLIC oHandler
oHandler=NEWOBJECT("myhandler")
DO (_browser)
BINDEVENT(_SCREEN,"Resize",oHandler,"myresize")

DEFINE CLASS myhandler AS Session
PROCEDURE myresize
_obrowser.left = _SCREEN.Width - _obrowser.width
RETURN
ENDDEFINE

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多