Executar el programa m7p1.exe per conèixer el seu comportament. Veure el llistat del codi del programa, m7p1. Executar Visual Basic per editar el projecte (acabat): m7p1.vbp. Simulació d'una lent convergent. Com dibuixar? FotografiaEn un llibre de física de segon de BUP s'explica com va el traçat de feixos de llum a través d'una lent convergent. El que pretenem aquí és fer el dibuix que apareix en aquests llibres. La pràctica és molt semblant a les del mòdul 5.El dibuix que pretenem aconseguir és el següent: Aquest projecte el desareu a C:\VBCurs\VBActivi\m7\p1 amb el nom m7p1. Fase de disseny de la interfície d’usuariHem de fer un formulari més o menys de la mida del dibuix anterior. Aquí no hi col·loquem cap objecte, la seva aparença la crearem en temps d'execució mitjançant el procediment pintar.Important: la propietat del formulari Scale mode l'heu de posar en 3 - Pixel. Fase de programació de respostes a eventsEl funcionament del programa és el següent: quan es carrega el formulari, event Form_Load() crida a un procediment Iniciar() que s'encarrega d'iniciar les variables que definirem a nivell d'àmbit global del projecte.Fins ara quan voliem fer un dibuix (mòdul 5) calia clicar en el formulari o en un menú, és a dir, calia activar un event. Aquí farem servir l'event Form_Paint que és un event que crida el sistema operatiu cada vegada que calgui repintar la finestra. Per la qual cosa el dibuix es veurà sempre que veiem la finestra. L'event Form_Paint crida senzillament el procediment Pintar que és el que realment cuida de fer aparèixer el dibuix. Variables d'àmbit a tot el formulari Dim yT, xL, xO, yO, F, xI, yI As IntegerAquestes variables serveixen per definir les posicions dels objectes en la finestra. Així yT, vol dir Coordenada y del Terra i xL, coordenada x de la Lent... Els comentaris (REM ') us ajudaran en la comprensió del significat de les variables. Procediments d'àmbit a tot el formulari Per iniciar les variables tenim el següent procediment: Sub iniciar () yT = 165 xL = 300 xO = 100 yO = 50 F = 100 End Sub El procediment (mètode) Pintar és el que fa el dibuix. Observeu les diferents instruccions que ens ofereix el Visual Basic per opcions gràfiques: Cls, Print, ForeColor i QBColor. Sub Pintar () Dim r As Integer Cls '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" 'Feix de llum paral.lel al terra ForeColor = QBColor(2) If Abs(F) > 1 Then Line (xO, yT - yO)-(xL, yT - yO) Line (xL, yT - yO)-(1300, yT - yO + (1300 - xL) / F * yO) End If 'Feix de llum que passa pel focus If xL <> xO Then Line (xO, yT - yO)-(1300, yT - yO + (1300 - xO) / (xL - xO) * yO) 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) Line (xI - 10 * r, yI - 10 * r)-(xI, yI) Line (xI + 10 * r, yI - 10 * r)-(xI, yI) CurrentX = xI CurrentY = 20 Print "Imatge" End If End Sub Tema: Cls Esborra la finestra. Tema: Print Subtema: Print Method Escriu text a la finestra. Tema: CurrentX, CurrentY Coordenades de la finestra on escriu el text o la següent instrucció de dibuix. Tema: ForeColor Subtema: Setting Colors Per canviar el color amb què volem escriure o dibuixar a la finestra. Tema: QBColor Subtema: QBColor Function Torna el número de color en format RGB (que entén el ForeColor) dels colors del Basic tradicional. Mètodes associats a l'event Load Tal com hem dit aquest mètode crida al procediment Iniciar que inicia les variables. Es podria pensar que no caldria fer-ho: per definir les posicions del dibuix es podria escriure directament amb els números. És mala pràctica enterrar números al mig del codi, a més, a les pràctiques següent voldrem que les posicions dels dibuixos canviïn i això només es pot fer si estan definides mitjançant variables. Sub Form_Load () iniciar End Sub Mètodes associats a l'event Paint Tal com hem dit aquest event l'activa el sistema operatiu cada vegada que s'ha de repintar la finestra. Això passa quan s'inicia el programa per primer cop o cada vegada que volem tornar a activar-lo clicant damunt la finestra (o amb Alt+Tab...) i un altre programa (o finestra) l'ha cobert total o parcialment. Sub Form_Paint () Pintar End Sub Aquest event ens permet entendre perquè cada vegada que s'activa una finestra, aquesta es torna a mostrar correctament i podem comprendre perquè en els programes del mòdul 5 quan una finestra els cobria i tornavem a ells ja no es veia el dibuix i calia tornar a clicar o activar el corresponent menú. La causa era que no es pintava el seu contingut a través d'aquest event. |