[問答題] 在考生文件夾下有一個(gè)工程文件sjt5.vbp,其窗體中有一個(gè)實(shí)心圓。程序運(yùn)行時(shí),當(dāng)用鼠標(biāo)左鍵單擊窗體任何位置時(shí),實(shí)心圓則向單擊位置直線移動(dòng);若用鼠標(biāo)
[問答題] 在考生文件夾下有一個(gè)工程文件sjt5.vbp,其窗體中有一個(gè)實(shí)心圓。程序運(yùn)行時(shí),當(dāng)用鼠標(biāo)左鍵單擊窗體任何位置時(shí),實(shí)心圓則向單擊位置直線移動(dòng);若用鼠標(biāo)右鍵單擊窗體,則實(shí)心圓停止移動(dòng)。窗體文件中已經(jīng)給出了全部控件,但程序不完整。
要求:請(qǐng)?jiān)诔绦蛑械臋M線處填寫正確的內(nèi)容,使其能正確運(yùn)行,但不能修改程序中的其他部分和控件屬性。最后用原來的文件名保存工程文件和窗體文件。
[題目提供的源程序]
Dim stepy As Integer ’縱向移動(dòng)增量
Dim stepx As Integer ’橫向移動(dòng)增量
Const LEFT_BUTTON=1
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim x0 As Integer, y0 As Integer, a As Single, radius As Integer
radius=Shape1.Width/2 ’圓的半徑
If Button=LEFT_BUTTON Then
x0=Shape1.Left+radius ’圓心的x坐標(biāo)
y0=Shape1.Top+radius’圓心的y坐標(biāo)
If x=x0 Then
stepy=Sgn(y-y0)*50
stepx= (1)
Else
a=(y-y0)/(x-x0)’斜率
stepx=Sgn(x-y0)*50
(2) =a * stepx
If Abs(stepy)>Abs(stepx) Then
stepy=Sgn(y-y0)*50
stepx=stepy/a
End If<
正確答案:[操作步驟] 第1步:打開工程文件sjt5.vbp。 第2步:分析并編寫程序。 第3步:調(diào)試、運(yùn)行并保存程序。 [1]Sgn(x-x0)*50 [2]stepy [3]Timer1.Enabled [4]Timer1.Enabled [5]stepy
參考解析:可以使用控件的Move方法或改變其Left和Top屬性來實(shí)現(xiàn)控件的移動(dòng)。本題中首先根據(jù)鼠標(biāo)單擊位置和實(shí)心圓當(dāng)前位置之間的關(guān)系決定移動(dòng)的步長(zhǎng)stepx和stepy,可能是直線運(yùn)行,也可能是斜線運(yùn)動(dòng);移動(dòng)步長(zhǎng)可為正,也可能為負(fù)。其中用到了一個(gè)關(guān)鍵函數(shù)sgn(),sgn(x)函數(shù)可以檢測(cè)x的正負(fù),如果x為正數(shù),則函數(shù)值為1;如果x為負(fù)數(shù),則函數(shù)值為-1;如果x為0,則函數(shù)值為0。例如:在圓的右側(cè)單擊時(shí),x>x0,sgn(x-x0)=1,計(jì)算出stepx的值為正,圓會(huì)向右移動(dòng)。 具體的移動(dòng)由Timer1_Timer事件過程完成,F(xiàn)orm_MouseDown事件過程負(fù)責(zé)控制Timer1是否有效以及Stepx和Stepy的計(jì)算。
詞條內(nèi)容僅供參考,如果您需要解決具體問題
(尤其在法律、醫(yī)學(xué)等領(lǐng)域),建議您咨詢相關(guān)領(lǐng)域?qū)I(yè)人士。