|
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) Tema: Checked Subtema: Checked Property 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 |