|
|
|
Executar el programa m7p3.exe per conèixer el seu comportament. Veure el llistat del codi del programa, m7p3. Executar Visual Basic per editar el projecte (acabat): m7p3.vbp. Com creem i gestionem un menú: Afegim-hi una trama i...L'objectiu aquí és afegir un menú que donarà noves possibilitats a la nostra aplicació educativa i hi afegirem un curiós efecte que tècnicament s'anomena Hint o Tip. Aquest efecte és comú en Windows 95, però no ho era tant en Windows 3... Aquí el que farem és crear-lo i així aprofundir en tècniques d'animació que són molt útils en aplicacions didàctiques.L'aspecte de la finestra és: ![]() Observeu que hi ha de més la barra de menú, Opcions i que la frase Prem botó esquerra i arrossega no està a la cantonada sinó en el lloc on es troba la rata. Això és un Hint, que ens aparegui una petita informació, pista, en el lloc oportú. En el menú hi ha tres submenús:
- L'altre submenú, Feixos de llum, tindrà un comportament similar a l'anterior i en funció de si està activat o no apareixeran o no les línies que representen els feixos de llum. - Finalment hi posem el submenú Sortir que servirà per abandonar el programa. Fase de disseny de la interfície d’usuariAquest projecte el desareu a C:\VBCurs\VBActivi\m7\p3 amb el nom m7p3.Podem partir del programa de la pràctica anterior i hi afegirem les modificacions.
Fase de disseny del menú Recordeu el mòdul 3, on varem aprendre a crear un menú. Feu el mateix amb les següents opcions: ![]() A totes les opcions hi posareu les característiques per defecte excepte l'opció &Feixos de llum que activareu el quadre Checked Fase de programació de respostes a eventsVariables d'àmbit a tot el formulariDim yT, xL, xO, yO, F, xI, yI As Integer Dim CalMoureObjecte, CalCanviarTamanyObjecte As Integer Dim CalMoureLent, CalMoureFocus, CalMoureTerra As Integer Dim HiHaHint, HintX, HintY As Integer Observeu que només hem afegit l'última línia que són les variables per definir si hi ha o no Hint i la seva posició. Procediments d'àmbit a tot el formulari El procediment iniciar és el mateix que l'anterior, pero hi afegim la inicialització de les noves variables. Sub iniciar () yT = 175 xL = 300 xO = 100 yO = 50 F = 100 CalMoureObjecte = 0 CalMoureLent = 0 CalMoureFocus = 0 CalCanviarTamanyObjecte = 0 CalMoureTerra = 0 HiHaHint = 0 HintX = 0 HintY = 0 End Sub El procediment (mètode) Pintar és el mateix modificat. Les diferències són:
- On es dibuixaven els eixos s'ha canviat en funció de si està activada o no l'opció de menú. If mnuFeixos.Checked Then... - En l'última part hi ha on s'escriu el Hint. Ho fa en la posició HintX, HintY que es la posició de la rata quan calgui dibuixar el Hint i vindrà donada per l'event MouseMove. If HiHaHint Then... Sub Pintar ()
Dim r As Integer
Cls
'Trama
ForeColor = RGB(128, 128, 128)
If mnuTrama.Checked Then
r = 25
While r <= 480
Line (0, r)-(640, r)
r = r + 25
Wend
r = 25
While r <= 640
Line (r, 0)-(r, 480)
r = r + 25
Wend
End If
'Terra
ForeColor = QBColor(0)
Line (0, yT)-(1300, yT)
'Focus
Line (xL + F, yT - 5)-(xL + F, yT + 5)
Line (xL - F, yT - 5)-(xL - F, yT + 5)
CurrentX = xL + F
CurrentY = 20
Print "Focus"
'Lent
ForeColor = QBColor(6)
Line (xL, yT - 130)-(xL, yT + 130)
Line (xL - 10, yT - 130 + 10)-(xL, yT - 130)
Line (xL + 10, yT - 130 + 10)-(xL, yT - 130)
Line (xL - 10, yT + 130 - 10)-(xL, yT + 130)
Line (xL + 10, yT + 130 - 10)-(xL, yT + 130)
CurrentX = xL
CurrentY = 20
Print "Lent"
'Objecte
ForeColor = QBColor(1)
r = 1
If yO < 0 Then
r = -1
End If
Line (xO, yT)-(xO, yT - yO)
Line (xO, yT - yO)-(xO - 10 * r, yT - yO + 10 * r)
Line (xO, yT - yO)-(xO + 10 * r, yT - yO + 10 * r)
CurrentX = xO
CurrentY = 20
Print "Objecte"
'Feixos de llum
If mnuFeixos.Checked Then
'Feix de llum paral.lel al terra
If Abs(F) > 1 Then
Line (xO, yT - yO)-(xL, yT - yO), QBColor(2)
'Feix de llum que passa pel focus
Line (xL, yT - yO)-(1300, yT - yO + (1300 - xL) / F * yO), QBColor(2)
End If
'Feix de llum que passa pel centre de la lent
If xL <> xO Then
Line (xO, yT - yO)-(1300, yT - yO + (1300 - xO) / (xL - xO) * yO), QBColor(2)
End If
End If
'Imatge
If (xL - xO) <> F And xL <> xO Then
ForeColor = QBColor(4)
xI = (xO - xL * (xL - xO) / F) / (1 - (xL - xO) / F)
yI = yT - yO + (xI - xO) / (xL - xO) * yO
Line (xI, yT)-(xI, yI)
If (xO > xI) Then r = r * (-1)
Line (xI - 10 * r, yI - 10 * r)-(xI, yI)
Line (xI + 10 * r, yI - 10 * r)-(xI, yI)
If xI < 1300 And xI > 0 Then
CurrentX = xI
CurrentY = 20
If xI < xL Then
Print "Imatge virtual"
If mnuFeixos.Checked Then
ForeColor = QBColor(2)
DrawStyle = 2
Line (xI, yI)-(xO, yT - yO)
Line (xI, yI)-(xL, yT - yO)
DrawStyle = 0
End If
Else
Print "Imatge"
End If
End If
End If
'Hint
If HiHaHint Then
ForeColor = QBColor(4)
CurrentX = HintX
CurrentY = HintY
Print "Prem botó esquerra i arrossega"
End If
End Sub
Mètodes associats a l'event Load i Paint Són els mateixos de la pràctica anterior. Mètodes associats als events que controlen les accions de la rata. MouseDown, MouseMove, MouseUp. Els events MouseDown i MouseUp no canvien. Els canvis de l'event MouseMove respecte l'anterior són:
- Al final, a partir If MousePointer <> 0 Then... és quan es diu si cal pintar o no i a on el Hint, i si cal fer-ho es fa amb el procediment Pintar. Sub Form_MouseMove (Button As Integer, Shift As Integer, x As Single, y As Single)
HiHaHint = 0
If CalCanviarTamanyObjecte = 1 Then
yO = yT - y
Pintar
ElseIf CalMoureObjecte = 1 Then
If x < xL - 1 Then
xO = x
Pintar
End If
ElseIf CalMoureLent = 1 Then
If x > xO + 1 Then
xL = x
Pintar
End If
ElseIf CalMoureFocus = 1 Then
If x > xL Then
F = x - xL
Pintar
End If
ElseIf CalMoureTerra = 1 Then
yT = y
Pintar
Else
MousePointer = 0
If x > xO - 5 And x < xO + 5 Then
If y > yT - yO - 5 And y < yT - yO + 5 Then
MousePointer = 7
Else
MousePointer = 9
End If
ElseIf x > xL - 5 And x < xL + 5 Then
MousePointer = 9
ElseIf x > xL + F - 5 And x < xL + F + 5 Then
MousePointer = 9
ElseIf y > yT - 5 And y < yT + 5 Then
MousePointer = 7
End If
If MousePointer <> 0 Then
HiHaHint = 1
HintX = x + 10
HintY = y + 10
Pintar
Else
HiHaHint = 0
Pintar
End If
End If
End Sub
Mètodes associats als events que controlen les accions sobre els menús Els següents menús quan es cliquen fan que alternativament s'activi o desactivi el v (Checked or UnChecked) Sub mnuFeixos_Click () mnuFeixos.Checked = Not mnuFeixos.Checked Pintar End Sub Sub mnuTrama_Click () mnuTrama.Checked = Not mnuTrama.Checked Pintar End Sub Finalment el menú Sortir per abandonar l'aplicació. Sub mnuSortir_Click () End End Sub |