El Visual Basic

160
El Visual Basic es un lenguaje fácil de aprender y se lleva muy bien con el Windows. Se pueden hacer programas de gran calidad. Otros lenguajes como el Visual C, Delphi (PASCAL) son más potentes, tal vez más profesionales, pero el Visual Basic es un buen primer paso para empezar a programar. Esto sería un programa en BASIC: INPUT "Escribe tu nombre ..", n$ INPUT "Tu Edad .. " , e IF e >= 18 THEN PRINT n$; " eres mayor de edad" ELSE PRINT n$; " no eres mayor de edad" END ENTRADA "Escribe tu nombre ... ", n$ ENTRADA "Tu Edad .. ", e SI e >= 18 ENTONCES ESCRIBE n$; " eres mayor de edad" SINO ESCRIBE n$; " no eres mayor de edad" FIN En el CDROM de Windows 98, concretamente en la carpeta TOOLS/OLDMSDOS se encuentra una aplicación llamada QBASIC, con ella puedes empezar a aprender BASIC. Aquí pongo algunos programas que puedes probar, es interesante trabajar con ellos para luego pasar al Visual Basic. Bajar qbasic.exe (200 K) Bajar ayuda del qbasic qbasic.hlp (140 K) (Debes ponerlo en el mismo directorio) Ejemplos de programas en QBASIC Nombre y edad 10 REM ******** Nombre y Edad ******* 20 INPUT "Introduce tu nombre: ", n$ 30 INPUT "Introduce tu edad: ", e

Transcript of El Visual Basic

El Visual Basic es un lenguaje fácil de aprender y se lleva muy bien con el Windows. Se pueden hacer programas de gran calidad. Otros lenguajes como el Visual C, Delphi (PASCAL) son más potentes, tal vez más profesionales, pero el Visual Basic es un buen primer paso para empezar a programar.

Esto sería un programa en BASIC:

INPUT "Escribe tu nombre ..", n$INPUT "Tu Edad .. " , eIF e >= 18 THENPRINT n$; " eres mayor de edad"ELSEPRINT n$; " no eres mayor de edad"END

ENTRADA "Escribe tu nombre ... ", n$ENTRADA "Tu Edad .. ", eSI e >= 18 ENTONCESESCRIBE n$; " eres mayor de edad"SINOESCRIBE n$; " no eres mayor de edad"FIN

En el CDROM de Windows 98, concretamente en la carpeta TOOLS/OLDMSDOS se encuentra una aplicación llamada QBASIC, con ella puedes empezar a aprender BASIC. Aquí pongo algunos programas que puedes probar, es interesante trabajar con ellos para luego pasar al Visual Basic.Bajar qbasic.exe (200 K)Bajar ayuda del qbasic qbasic.hlp (140 K) (Debes ponerlo en el mismo directorio)

 

Ejemplos de programas en QBASIC

Nombre y edad

10 REM ******** Nombre y Edad *******20 INPUT "Introduce tu nombre: ", n$30 INPUT "Introduce tu edad: ", e40 IF e >= 18 THEN PRINT n$; " eres mayor de edad"50 IF e < 18 THEN PRINT n$; " eres menor de edad"

Pitágoras

10 REM ****** Pitagoras *******20 PRINT "Teorema de Pitagoras"30 PRINT40 INPUT "Introduce un cateto: ", a50 INPUT "Introduce otro cateto: ", b

60 c = SQR ( a*a + b*b)70 PRINT "La hipotenusa vale: "; c

Tabla de multiplicar

10 REM ****** Tabla de multiplicar *******20 PRINT "Tabla de multiplicar": PRINT: PRINT : PRINT30 INPUT "Introduce un número del 1 al 9 "; k40 IF k > 9 OR k < 1 THEN GOTO 3050 FOR n=1 TO 960 PRINT n ; " x " ; k; " = "; n*k70 NEXT n

Condicional

10 INPUT "Introduce un número ", x20 r = x MOD 230 IF r = 0 THEN40 PRINT "El numero introducido es par, porque al dividirlo entre 2, nos da de resto 0"50 ELSE60 PRINT "El numero introducido es impar, porque al dividirlo entre 2, nos da de resto 1"70 END IF

Atención :Si el IF ..... THEN consta de una sola instrucción puede ir así :

IF r = 0 THEN PRINT "El numero es par"

Pero si consta de varias instrucciones irá así :

IF r = 0 THENPRINT "Numero par"f = f + 1PRINT "Varias lineas"c = 2 * cEND IF

Otra formas del IF .... THEN ...... ELSE ...... END IF

IF edad > 18 THENPrint "Eres mayor de edad"

ELSEPrint "Eres menor de edad"END IF

Ecuación de Segundo Grado

10 INPUT "Coeficiente a "; a20 INPUT "Coeficiente b "; b30 INPUT "Coeficiente c "; c40 REM ***** Vamos a realizar el b*b - 4 * a * c50 r = b*b - 4 * a * c60 REM ****** Se r es negativo no se puede realizar la raíz.70 IF r < 0 THEN PRINT "Número imaginario, no se puede realizar la raíz.": GOTO 15080 REM ******* Es posible realizar la raíz ******90 t = SQR (r)100 x1 = (- b - t) / (2 * a)110 x2 = (- b + t)/ (2 * a)120 REM ****** Soluciones ********130 PRINT "Las soluciones son: "; x1; " y "; x2150 END

Area y longitud

10 REM **** Área y longitud del círculo20 INPUT "Introduce el diámetro de una circunferencia "; d30 r = d/240 a = 3.1416 * r * r50 l = 2 * 3.1416 * r60 PRINT "El área vale: "; a70 PRINT "La longitud vale: "; l

 

Atención :

Se pueden poner varias instrucciones en una línea separado por :

30 r = d/2 : a = 3.1416 * r * r : l = 2 * 3.1416 * r : PRINT "Area "; a : PRINT "Longitud " ; l

Pero es menos presentable.

Paralelo

10 REM **** Paralelo de dos resistencias *****20 INPUT "Introduce el valor de una resistencia "; R130 INPUT "Introduce el valor de otra resistencia "; R240 RT = (R1 * R2) / (R1 + R2)50 PRINT "El paralelo vale "; RT

Descomponer vector

10 REM **** Vector ****15 CLS20 PRINT "Dado el módulo y ángulo de un vector. Hallar su componente horizontal y vertical"30 INPUT "Introduce el modulo del vector "; m40 INPUT "Introduce el angulo del vector en grados "; ag50 REM *** Paso del ángulo a radianes ***60 ar = 2 * 3.1416 * ag / 36070 h = m * cos(ar)80 v = m * sin(ar)90 PRINT "La componente horizontal vale "; h100 PRINT "La componente vertical vale "; v

Nota: El Seno, Cos y Tangente hay que expresarlo en radianes, por eso hemos pasado de grados a radianes.

Para pasar de grados a radianes:rad = 2 * 3.1416 * grad / 360

Para pasar de radianes a grados:grad = rad * 360 / 2 * 3.1416

Adivina

5 CLS 10 REM Adivina 20 RANDOMIZE TIMER 30 x = INT(1 + RND * 100) 40 INPUT "Introduce numero (1 -100)"; n 45 inten = inten + 1

50 IF x = n THEN GOTO 8060 IF x < n THEN PRINT "Mi numero es menor": GOTO 40 70 IF x > n THEN PRINT "Mi numero es mayor": GOTO 40 80 REM ACERTO 90 PRINT "Efectivamente, el numero era "; x 100 PRINT "Has acertado de "; inten; " intentos."

Media aritmética

VAL(n$) convierte una cadena alfanumérica de caracteres númericos en números.VAL("23") lo convierte al número 23

PRINT "Calculo de la media de varios numeros"otro:INPUT "Introduce un numero ( s ..... Salir) ", n$IF n$ = "s" OR n$="S" GOTO calculot = t + VAL(n$) c = c + 1GOTO otrocalculo:r = t / cPRINT "La media vale : "; r

Divisores de un número

10 REM Divisores de un numero 20 CLS 30 PRINT "Vamos a mostrar los divisores de un numero"40 INPUT "Introduce un numero del 1 al 1000 "; x 50 IF x < 1 OR x > 1000 GOTO 40 60 FOR n = 1 TO x 70 r = x MOD n 80 IF r = 0 THEN PRINT n 90 NEXT n

Escribir y leer archivo

10 OPEN "A" , #1, "C:\borra.txt"            ------------> Abre el archivo para escribir-añadir20 INPUT "Nombre ", n$30 INPUT "Edad ", e$

40 WRITE #1, n$, e$                                -------------> Escribe en el archivo50 CLOSE #1

55 OPEN "I", #1, "C:\borra.txt"            ---------------> Abre el archivo para leerlo60 FOR n = 1 TO 2070 IF EOF(1) GOTO 20080 INPUT #1, a$, b$                                ----------------> Lee el archivo90 PRINT a$, b$100 NEXT n200 CLOSE #1210 END

OPEN "O" para escribir-machacar en el archivo (Se escribe con WRITE #1)(o PRINT #1)OPEN "A" para escribir-añadir en el archivo (Se escribe con WRITE #1)( o PRINT #1)OPEN "I" para leer el archivo (Se lee con INPUT #1)

EOF (End Of File) SI findearchivo VE A 200

Quiniela

1 2 3 4 5 61 1 1 X X 2

Vamos a realizar una quiniela. Suponemos que tenemos un dado con sus seis caras (1,2,3,4,5,6). Lo lanzamos. Si sale la cara 1, 2 o 3 (o sea, CASO que SEA menos de 4) ponemos un "1". Si sale la cara 6 ponemos un "2" (o sea, CASO sea 6) .Si sale la cara 4 o 5 ponemos una "X" (o sea, en OTRO CASO).

CLSRANDOMIZE TIMERFOR n = 1 TO 15g = INT(RND * 6) + 1

SELECT CASE g

CASE IS < 4PRINT "1"

CASE 6PRINT "2"

CASE ELSEPRINT "X"

END SELECT

NEXT n

Primitiva

Creamos una tabla con 6 elementos (en realidad 7 porque el 0 también cuenta) DIM a(6)Sacamos un número del 1 al 49. Comprobamos si el número obtenido se encuentra en la tabla. Si es así, saca otro número. Si no está en la tabla lo guarda en su lugar correspondiente (n). Y lo escribe en pantalla. Esto lo hacemos para evitar que se repita el número sacado.

DIM a(6)RANDOMIZE TIMERFOR n = 1 TO 6saca: g = INT(RND * 49) + 1                FOR k = 1 TO 6                IF a(k) = g THEN GOTO saca                NEXT ka(n) = gPRINT g; "-";NEXT n

a(k) gEl bucle FOR k ..... comprueba si en algunos de los seis elementos de la tabla está el número que acaba de salir (g) .

Si ahora sale el 8 otra vez, se comprueba que ese número ya existe en la tabla con lo cual vuelve para atrás a sacar otro número mediante IF a(3) = 8 THEN GOTO saca.

En caso que el número no esté repetido lo almacena en el siguiente lugar de la tablaa(n) = g

a(1) 24

a(2) 31

a(3) 8

a(4) 15

a(5)

a(6)

 

Al revés

INPUT "Escribe tu Nombre ", a$FOR n = LEN(a$) TO 1 STEP -1b$ = MID$(a$, n, 1)PRINT b$; "-";SLEEP 2 : REM pausa 2 segundosNEXT n

(Nota : Esta función en VB es StrReverse("asd"))

Mueve un caracter por la pantalla. El punto debe encontrarse con el 0.

CLSx = 10: y = 1010 FOR n = 1 TO 20CLSa = INT(RND * 80) + 1b = INT(RND * 20) + 1LOCATE b, aPRINT "0"FOR t = 1 TO 50000t$ = INKEY$IF t$ = "a" THEN y = y -1 : IF y < 1 THEN y = 1IF t$ = "z" THEN y = y +1 : IF y > 20 THEN y = 20IF t$ = "," THEN x= x-1 : IF x < 1 THEN x= 1IF t$ = "." THEN x = x + 1 : IF x > 80 THEN x= 80IF t$ ="q" THEN ENDLOCATE y, xPRINT "."IF x = a AND y = b THEN PRINT "¡¡¡ PUM !!!": FOR j = 1 TO 40000: NEXT j: GOTO 10PRINT "."NEXT tNEXT n

Crear directorio y listados

REM Crear un directorioMKDIR "C:\EJEMPLO"REM Cambiar a un directorio

CHDIR "C:\WINDOWS"REM Listado de archivos (DIR)FILES

Colores

SCREEN 7FOR n = 1 TO 15COLOR nPRINT nNEXT n

En caso de un error en el programa va a la etiqueta mal, imprime un mensaje y continua con la siguiente instrucción (RESUME NEXT)

CLSON ERROR GOTO malx = -3b = SQR(x)c = 2 * xPRINT cENDmal:PRINT "Ocurrio un error"RESUME NEXT

Para poder utilizar órdenes del DOS

SHELL "DIR"SHELL "COPY C:\autoexec.bat C:\borra.txt"SHELL "TYPE C:\autoexec.bat"

Bola.bas

Círculo que se mueve por la pantalla.

Capital

Hacemos una imposición en un Banco de un Capital C, a un interés anual i, durante 9 años. Calculemos los capitales resultantes en cada año.

(El código del acento circunflejo ^ , es ALT 94, es el signo de exponente)

CLSINPUT "Capital ", cINPUT "Interes ", ii = i / 100FOR n = 1 TO 9t = c * ( 1 + i ) ^ nPRINT "Año "; n ; " .... "; : PRINT USING "###,###,###"; CLNG(t)NEXT n

Hacer Mientras c$ sea distinto de pedro

PRINT "Estaras en el bucle hasta que escribas la palabra -pedro-"c$ = ""

DO WHILE c$ <> "pedro"INPUT "Introduce la clave ", c$LOOP

PRINT "Muy bien, escribistes -pedro- y salistes del bucle"

Hacer Bucle Mientras f > 0

PRINT "Te pide un numero y te escribe los 12 siguientes"INPUT "Introduce un numero ", nf = 12

DO WHILE f > 0n = n + 1PRINT nf = f - 1LOOP

Ecuación de la recta

10 REM *** Ecuacion de la recta ****20 PRINT "Sabemos que una recta pasa por dos puntos"

30 PRINT "Si nos dan dos puntos (x1,y1) (x2,y2) podemos deducir la ecuación de la recta"40 PRINT50 PRINT "Vamos a introducir las componentes (x,y) de un punto."60 INPUT "Introduce x1 "; x170 INPUT "Introduce y1"; y180 PRINT "Ahora vamos a introducir las componentes (x,y) del otro punto."90 INPUT "Introduce x2 "; x2100 INPUT "Introduce y2"; y2110 REM ****** Calculos ******115 REM Ecuacion de la recta (x-x1)/(x2-x1)=(y-y1)/(y2-y1)120 m = (y2-y1)/(x2-x1)130 PRINT "La ecuacion de la recta que pasa por ("; x1;",";y1;")";" y (";x2;",";y2;") es ="140 PRINT "Y = "; m; " * X + " ; y1 - x1*m

Alterna. Cálculo de un circuito RLC

10 REM Circuito serie RLC15 CLS 20 PRINT "Tenemos un circuito serie RLC, al cual se le aplica una tension V de frecuencia f" 30 PRINT "Calcular Xl, Xc, Z en polar y binomial, I, Vr, Vl, Vc y frecuencia de resonancia del circuito" 40 REM DATOS 50 INPUT "Valor de la Resistencia en ohmios"; r 60 INPUT "Valor de la Bobina en mili Henrios "; l 70 INPUT "Valor del Condensador en micro Faradios "; c 80 INPUT "Valor de pico de la tension "; v 90 INPUT "Frecuencia "; f 100 REM CALCULOS 110 Xl = 2 * 3.1416 * f * l * .001 120 PRINT "El valor de Xl es de "; Xl 130 Xc = 1 / (2 * 3.1416 * f * c * .000001) 140 PRINT "El valor de Xc es de "; Xc 150 x = Xl - Xc 160 PRINT "La Z en binomial "; r; "+"; x; "j" 170 z = SQR(r * r + x * x) 180 ar = ATN(x / r)185 REM ar esta en radianes, se pasa a grados 190 ag = ar * 360 / 6.28200 PRINT "La Z en polar vale "; z; 210 PRINT " y su angulo "; ag220 i = v / z 230 alfa = 0 - ag

240 PRINT "La intensidad vale "; i; " y su angulo de desfase "; alfa 250 Vr = r * i 260 PRINT "La Vr vale "; Vr; " y su angulo de desfase "; alfa 270 Vl = Xl * i 280 al = 90 + alfa 290 PRINT "La Vl vale "; Vl; " y su angulo de desfase "; al 300 Vc = Xc * i 310 ac = -90 + alfa 320 PRINT "La Vc vale "; Vc; " y su angulo de desfase "; ac 330 fr = 1 / (2 * 3.1416 * SQR(l * .001 * c * .000001)) 340 PRINT "La frecuencia de resonancia del circuito es "; fr; " Hz."

Compilación                  .BAS ---------> .EXE

Si has realizado los programas anteriores observarás que el código fuente, o sea, el programa en textos se guarda como un archivo .BAS . Y que para ejecutarlo hace falta entrar en el QBASIC y luego Ejecutar el programa.

Ahora vamos a COMPILAR el archivo .BAS, es decir a convertirlo en .EXE, para que no haga falta tener que entrar en el QBASIC para ejecutarlo. Para ello vamos a utilizar un Compilador llamado FIRSTBAS de PowerBASIC.

Bajar FIRSTBAS o bien desde aquí: Bajar FIRSTBAS.ZIP

Te lo bajarás comprimido .ZIP, cuando lo descomprimas ejecuta FIRSTBAS.EXE.

1.- Mediante Load y Directory localiza el archivo.BAS que quieres compilar.2.- Cuando lo tengas ve a Compile, saldrá un desplegable.3.- Elige Destination.... EXE file, márcalo.4.- Luego marca Compile (o pulsa Alt -F9). Tu archivo.BAS habrá creado otro archivo llamado archivo.EXE que será ejecutable.

El menú se activa mediante la tecla <Alt> y una letra (F, E, R, C)

Algunas funciones

ABS( ) Valor absoluto

PRINT ABS (-3) ...................................................... 3

ASC ( ) Valor numérico del código ASCII

PRINT ASC("A") .....................................................65

CHR ( ) Convierte un número a caracter ASCII

PRINT CHR(97) .......................................................a

STR( ) Convierte un número a caracter

a$ = STR(23)

VAL ( ) Convierte caracter a número

X = VAL("345")

ATN ( ) Arco Tangente

SIN ( ) Seno

COS ( ) Coseno

El argumento debe estar en radianes.Para pasar grados a radianesrad = grad * 2 * 3.1416 / 360

CLS Borra pantalla

LEN (a$ ) Longitud de una cadena caracter

a$ = "Visual Basic es un lenguaje de Programacion" PRINT LEN(a$) ........................................................43

LEFT(a$,4 ) Devuelve los 4 caracteres de la izquierda

a$ = "Visual Basic es un lenguaje de Programacion"PRINT LEFT (a$,4) .................................................Visu

RIGHT(a$,4 ) Devuelve los 4 caracteres de la derecha

a$ = "Visual Basic es un lenguaje de Programacion"

PRINT RIGHT (a$,4) .................................................cion

MID(a$,8,4) Devuelve 4 caracteres a partir del octavo

a$ = "Visual Basic es un lenguaje de Programacion"PRINT MID (a$,8,4) .................................................Basi

PSET (x,y) Dibuja un punto

TIMER Número de segundos que han pasado desde medianoche

PRINT TIMER .................................................. 45675

Bucle FOR NEXT

FOR n = 1 TO 10Print nNext n

FOR n = 1 TO 12PRINT n * 2Next n

FOR n = 1 TO 18 STEP 2PRINT nNext n

FOR n = 20 TO 1 STEP -3PRINT nNext n

a = 2FOR n = 1 TO 10PRINT a * nNext n

FOR n = 20 TO 30PRINT n; "........"; 2 * nNext n

Bucles anidadosFOR n=1 TO 9 FOR a=1 TO 9 PRINT n * a NEXT a PRINTNEXT n

 

 

El BASIC era un lenguaje en modo texto apropiado para MSDOS. Cuando evolucionaron los sistemas operativos a modo ventana, como Windows, el BASIC también cambió y se convirtió en Visual Basic. Su programación y uso es en modo ventana, de tal manera que los programas realizados son como los que utilizamos normalmente en Windows.

VISUAL BASIC

<0>

<1>

<2>

<3>

<4>

<5>

<6>

<7>

<8>

<9>

<10>

<11>

<12>

<13>

<14>

Variables numéricas y alfanuméricas

a = 4564temp = 32.5b$ = "Yo soy una variable alfanumerica" (STRING)n$ = "34" : REM El "34" es alfanumérico (STRING)n = 34 : REM El 34 es numérico

En VB no es necesario declarar las variables, sin embargo es una buena práctica el declararlas.Si al principio del Programa ponemos Option Explicit, nos obligamos a declarar todas las variables que vamos a utilizar. Declarar una variable significa darla a conocer antes de utilizarla. Las variables se declaran al principio del programa o de una subrutina mediante: DIM

DIM a, temp, b$

Hay diversos tipos de variables INTEGER, LONG, CURRENCY, STRING

También podemos declarar las variables diciendo de qué tipo es:

DIM a AS INTEGERDIM temp AS LONG DIM b$ AS STRINGDIM euro AS CURRENCY

Si no decimos de qué tipo es, se le asigna el tipo VARIANT que puede ser numérica o alfanumérica según convenga.

Una tabla o matriz es un conjunto de variables que tienen el mismo nombre pero distinto subíndice :

DIM a(7)

Crea éstos elementos : a(0), a(1), a(2), a(3), a(4), a(5), a(6), a(7)

Ámbito de las variables

Una variable es válida solo en el sitio en el que se declara.Para que una variable sea reconocible por las Subrutinas de un formulario, hay que declararla al principio.(General)

Private Sub rutina1()a = 1234PRINT a * 2End Sub

Private Sub rutina2()PRINT a * 3End Sub

En éste caso la variable "a" vale 1234 y al poner PRINT a * 2 me escribirá 2468

En la subrutina2 se quiere imprimir a * 3, pero la variable no es la "a" anterior porque está en otra subrutina, luego se escribirá un 0 o se indicará un error.

 

DIM a

Private Sub rutina1()a = 1234PRINT a * 2End Sub

Private Sub rutina2()PRINT a * 3End Sub

Ahora la subrutina2 escribirá a * 3 , 3702, porque reconoce a la variable "a", ya que está declarada al principio. Es decir, la "a" la reconocen todas las subrutinas.

Cómo poner los controles.

1.- Abre un nuevo Proyecto:Archivo/Nuevo Proyecto/ EXE estándar

2.- En la parte izquierda vemos los controles u objetos, en el centro está el Formulario (Form) y a la derecha el explorador de proyectos y las Propiedades.

Las demás ventanas las puedes eliminar. Si quieres volver a ver algunas pulsa Ver.

3.- Ésta es la ventana de Códigos. Aquí escribiremos el programa:

4.- Con estos iconos podemos pasar de la ventana del Formulario a la ventana de Códigos

5.- Para poner un Control pulsa sobre ese Control.

6.- Suelta y ve al formulario. Pulsa sobre un punto del formulario y, sin soltar el botón izquierdo, arrástralo.

 

 

Sabemos que un Control tiene Propiedades aquí ponemos algunas.

Botón :

Calcula.Enabled = False

(Nombre) CalculaCaption PulsameFont Tipo de letraBackColor ColorStyle GraphicVisible TrueEnabled True

ToolTipText AyuditaPicture GráficoDownPicture

Gráfico-Pulsado

Textbox :

Text1.Text = "Hola"X = VAL(Text2.Text)

(Nombre) CasillaTextAlignement RightFont Tipo de letraMultiline TrueVisible True

ScrollbarEn caso de multiline

LockedModificable o no

MaxLengthMax. Longitud

Passwordchar

*********

ToolTipText Ayudita

Etiqueta :

Label1.Caption ="Miércoles"

Caption Textos

 

Scroll :

X = HScroll1.Value

Max Valor MáximoMin Valor MínimoValue Valor

Picture :

Picture1.Picture = LoadPicture ("C:\Dado\dado3.bmp")

Picture Localización de la ImagenLa Imagen se carga en tiempo de ejecución mediante Picture1.Picture = LoadPicture("C:\Dado\dado3.bmp")

Timer :

Timer1.Interval = 2000

Interval Tiempo en milisegundos

Check :

IF Check1.Value = 0 THEN res = 1234

Value 1 o 0

Option :

IF Option1.Value = True THEN r = "abc"

Value True o False

 

 

Si durante la ejecución del programa queremos cambiar una propiedad pondríamos :

Control.Propiedad

Calcula.Caption = "Púlsame"Calcula.Visible = FalseCasilla.Text = "1234"Casilla.Visible = TrueText1.Text = 23.45Label1.Caption = "Jueves"IF HScroll1.Value = 12 THEN Boton1.Enabled = FalseX = VAL(Text2.Text) * 345

El formulario también tiene Propiedades

Formulario

BorderStyleRedimensionable o no. Con Título o no.

Caption Título del FormularioIcon IconoBackColor Color de fondoMaxButton MaximizarMinButton MinimizarMoveable Formulario movible o no.Picture Dibujo de fondo

 

Private Sub Calcula_Click ( )

a = VAL(Casilla.text)doble = 2* a

End Sub

Fíjate lo que hay en Casilla.text, o sea el "1234" NO es un número, sino los caracteres "1", "2", "3" y "4". Para convertilos al número 1234 ponemos VAL(Casilla.text), VAL convierte carácteres a número.

En principio NO podemos multiplicar los caracteres "1234" por el número 2, o sea, no podemos hacer :

doble = 2 * "1234" Daría un error ..........

En fin ...... de todos modos ..... el Visual Basic es tan permisivo que lo permite... :

Conversión implícita de variables

Si tenemos una variable de un tipo y la operamos con otra variable de otro tipo, el resultado depende de los tipos y de la operación realizada.

Numeric = 22222Alfanume = "4"

x = Numeric * Alfanume.

Nos dará 88888, es decir, ha realizado una multiplicación de un número. Ha convertido automáticamente la variabla Alfanume a una variable numérica para realizar la operación.

También se puede convertir una variable alfanumérica a numérica mediante VAL

a = 4b$ = "33"c = VAL(b$)d = a + c

Incluso podemos poner :Text2.Text = Text1.Text * 234 / 567

Probar también c = CDbl(b$)

PROYECTOS

En ésta y las siguientes páginas te presento unos 50 proyectos de Visual Basic.

En éste archivo los he puesto comprimidos. Aunque te recomiendo que escribas cada uno y que leas los comentarios:

todoslosproyectos.zip (lo pondré pronto, por ahora me lo puedes pedir por correos)

1.- Controles : Botones y Cajas de Textos

Private Sub Azul_Click()Text1.Text = "Soy Azul"End Sub

Private Sub Rojo_Click()Text2.Text = "Soy Rojo"End Sub

Private Sub Borra_Click()Text1.Text = ""Text2.Text = ""End Sub

2.- Etiquetas, Cajas de textos y botón

Explica qué hace este Proyecto :¿Qué hace la Propiedad: Alignement en un Textbox?

Private Sub Calcula_Click()r = Val(Text1.Text)l = 2 * 3.1416 * ra = 3.1416 * r * rText2.Text = lText3Text = aEnd Sub

 

3.- Frames, Etiquetas, Cajas de textos y Botón.En los Textbox poner :Alignement = RightText =Font= Negrita, 12

Private Sub Calcula_Click()C = Val(Text1.Text)i = Val(Text2.Text) / 100a = Val(Text3.Text)T = C * (1 + i) ^ aText4.Text = TEnd Sub

Un EVENTO es algo que puede suceder como : Click, MouseMove, Change, Load

En el Proyecto anterior cambia el evento Click ( ) a MouseMove, ahora el programa se ejecutará cuando muevas el ratón sobre el botón sin necesidad de pulsar.La Sub rutina Calcula_MouseMove se ejecuta cuando se mueve el ratón sobre el botón.

Vamos a modificar el Proyecto. Cortemos lo que hay dentro del Calcula_MouseMove y Copiémoslo dentro de la Subrutina del Text3_Change. ¿Qué ocurre ahora? Pues que los cálculos se realizarán cuando Change el Text3, o sea, cuando Cambie el valor del Text3

Private Sub Calcula_Click()

End Sub

Private Sub Text3_Change()C = Val(Text1.Text)i = Val(Text2.Text) / 100a = Val(Text3.Text)T = C * (1 + i) ^ aText4.Text = TEnd Sub

4.- Control : HScroll (Al Moverlo cambia el Value)

' Poner HScroll1 Max=255' Poner HScroll1 Min=32

Private Sub HScroll1_Change()

C = HScroll1.ValueText1.Text = CText2.Text = Chr$(C)End Sub

5.- Control : VScroll

Private Sub VScroll1_Change()cent = Val(VScroll1.Value)fahr = 32 + 1.8 * centtxtCent = centtxtFahr = fahrEnd Sub

Propiedades de VScroll1

Max = 100Min = -100

 

6.- Colores A los controles se les pone nombres identificativos, por ejemplo en vez de poner HScroll1 se le llama hsrR.

HScroll1 hsrR Text1 txtR Label4 lblRHScroll2 hsrV Text2 txtV Label5 lblVHScroll3 hsrA Text3 txtA Label6 lblA

Text4 txtCarta Label7 lblSuma

En las Propiedades de cada HScroll debes poner:Max = 255Min = 1

Dim x, y, z

Private Sub hsrR_Change()x = Val(hsrR.Value)txtR.Text = xlblR.BackColor = RGB(x, 0, 0)lblsuma.BackColor = RGB(x, y, z)txtCarta.ForeColor = RGB(x, y, z)End Sub

Private Sub hsrV_Change()y = Val(hsrV.Value)txtV.Text = ylblV.BackColor = RGB(0, y, 0)lblsuma.BackColor = RGB(x, y, z)txtCarta.ForeColor = RGB(x, y, z)End Sub

Private Sub hsrA_Change()z = Val(hsrA.Value)txtA.Text = zlblA.BackColor = RGB(0, 0, z)lblsuma.BackColor = RGB(x, y, z)txtCarta.ForeColor = RGB(x, y, z)End Sub

7.- Controles : Label, Scroll, Line y Shape

El VScroll1 en Propiedades:Max = 12Min = 1

El VScroll2 en Propiedades:Max = 300Min = 1

El dibujo del circuito está realizado mediante Shape y Line

Mover primero el scroll de la resistencia.

Dim r, v, i As Currency

Private Sub vsrR_Change()r = Val(vsrR.Value)Label6.Caption = ri = v / rLabel4.Caption = iEnd Sub

Private Sub vsrV_Change()v = Val(vsrV.Value)Label5.Caption = vi = v / rLabel4.Caption = iEnd Sub

8.- Controles : Check y Option

En las Propiedades del Text1PonerMultiline=True

vbCrLf es para cambiar de línea en el casillero Text1 También se puede ponerChr(13) & Chr(10)

El guión _ es para cambiar de línea en el código.

Dim beb, com

Private Sub Command1_Click()com = ""If Check1.Value = 1 Then com = "Ensalada,"If Check2.Value = 1 Then com = com & "Carne,"If Check3.Value = 1 Then com = com & "Pescado,"If Check4.Value = 1 Then com = com & "Fruta."Text1.Text = "De comidas: " & com & vbCrLf & _" y de bebida: " & bebEnd Sub

Private Sub Option1_Click()beb = "Agua."End Sub

Private Sub Option2_Click()beb = "Vino."End Sub

Private Sub Option3_Click()beb = "Cerveza."End Sub

9.- Control : Combo (Lista desplegable)

En la Propiedad List del Combo1, poner la lista de nombresFíjate que el evento es Click

Private Sub Combo1_Click()Text1.Text = Combo1End Sub

10.- Controles : Drive, Dir, File e Image

Poner:un Driveun Dirun Fileun Image

En Propiedades del File poner :Pattern=*.bmp; *.gif; *.jpg

En Propiedades del Image poner :Strech = True

Private Sub Drive1_Change()Dir1.Path = Drive1.DriveEnd Sub

Private Sub Dir1_Change()File1.Path = Dir1.PathEnd Sub

Private Sub File1_Click()Image1.Picture = LoadPicture(File1.Path & "\" & File1.FileName)End Sub

Hacerlos ejecutables.exe

Una vez que has realizado algunos programas en VB, habrás observado que los archivos se guardan con extensión .vbp y .frm.Por cierto, si quieres guardar el proyecto entero en otra carpeta debes guardar los dos archivos:Archivo/Guardar proyecto como .............................. juego.vbpArchivo/Guardar juego.frm como ............................. juego.frm

Propiedades: Enabled, Visible y BackColor.

Private Sub cmdverde_Click()cmdrojo.Visible = FalseEnd Sub

Private Sub cmdrojo_Click()cmdverde.Visible = FalseEnd Sub

Private Sub cmdseven_Click()cmdrojo.Visible = Truecmdverde.Visible = TrueEnd Sub

Private Sub cmdfondo_Click()Form1.BackColor = QBColor(Rnd * 9)End Sub

Private Sub cmdsifun_Click()cmdrojo.Enabled = Truecmdverde.Enabled = Truecmdseven.Enabled = Truecmdfondo.Enabled = TrueEnd Sub

Private Sub cmdnofun_Click()cmdrojo.Enabled = Falsecmdverde.Enabled = Falsecmdseven.Enabled = Falsecmdfondo.Enabled = FalseEnd Sub

12.- Calculadora

Dim x as CurrencyDim y as CurrencyDim c as Currency

Private Sub Borrar_Click()Text1.Text = ""Text2.Text = ""Text2.Text = ""End Sub

Private Sub Coseno_Click()On Error Resume Nextx = Val(Text1.Text)xr = x * 2 * 3.1416 / 360c = Cos(xr)Text3.Text = cEnd Sub

Private Sub Cuadrado_Click()On Error Resume Nextx = Val(Text1.Text)c = x * xText3.Text = cEnd Sub

Private Sub Divide_Click()On Error Resume Nextx = Val(Text1.Text)y = Val(Text2.Text)c = x / yText3.Text = cEnd Sub

Private Sub Elevado_Click()On Error Resume

Alinear el contenido de los TextBox a la derecha.Quitar su contenido en Propiedades Text =

On Error Resume Next significa que en caso de error, división por cero, valores alfanuméricos, etc,.. no salga ningún mensaje de error que interrumpa el programa, sino que continúe con la siguiente instrucción.

Subir lo que hace es poner el contenido del Text3 en el Text1

Los ángulo se pasan a radianes.

Dim x as Currency

Nextx = Val(Text1.Text)y = Val(Text2.Text)c = x ^ yText3.Text = cEnd Sub

Private Sub Euro_Click()On Error Resume Nextx = Val(Text1.Text)c = x / 166.386Text3.Text = cEnd Sub

Private Sub Inverso_Click()On Error Resume Nextx = Val(Text1.Text)c = 1 / xText3.Text = cEnd Sub

Private Sub Multipli_Click()On Error Resume Nextx = Val(Text1.Text)y = Val(Text2.Text)c = x * yText3.Text = cEnd Sub

Private Sub Peseta_Click()On Error Resume Nextx = Val(Text1.Text)c = x * 166.386Text3.Text = cEnd Sub

Private Sub Pitagoras_Click()On Error Resume

Currency son variables de tipo monedas.

Si x fuese una variable Single y hacemos:

2/140 saldrá 1,42857142857143E-02

Si x es de tipo Currency:

2/140 = 0,0143

Nextx = Val(Text1.Text)y = Val(Text2.Text)c = Sqr(x * x + y * y)Text3.Text = cEnd Sub

Private Sub Raiz_Click()On Error Resume Nextx = Val(Text1.Text)c = Sqr(x)Text3.Text = cEnd Sub

Private Sub Resta_Click()On Error Resume Nextx = Val(Text1.Text)y = Val(Text2.Text)c = x - yText3.Text = cEnd Sub

Private Sub Seno_Click()On Error Resume Nextx = Val(Text1.Text)xr = x * 2 * 3.1416 / 360c = Sin(xr)Text3.Text = cEnd Sub

Private Sub Subir_Click()Text1.Text = Text3.TextEnd Sub

Private Sub Suma_Click()On Error Resume Nextx = Val(Text1.Text)y =

Val(Text2.Text)c = x + yText3.Text = cEnd Sub

Private Sub Tangente_Click()On Error Resume Nextx = Val(Text1.Text)xr = x * 2 * 3.1416 / 360c = Tan(xr)Text3.Text = cEnd Sub

13.- Cálculo del NIF

Private Sub cmdCalcula_Click()a$ = "TRWAGMYFPDXBNJZSQVHLCKEI"x = Val(txtdni.Text)n = (x Mod 23) + 1letra = Mid$(a$, n, 1)txtNif.Text = x & "-" & letraEnd Sub

14.- Enviar archivo (Copiar archivo)

Ponemos la dirección absoluta de un fichero existente en nuestro disco duro.

Lo enviamos o al directorio C:\Segur de nuestro disco duro, o a la carpeta Envio del Eqp20 de la red, o a ambos lugares.

La carpeta Envio debe estar compartida.

Private Sub Command1_Click()a = Text1.Textx = Timerz = Int(Val(x))b = "C:\Segur\" & zc = "\\eqp20\envio\" & z

If Check1.Value = 1 Then FileCopy a, bIf Check2.Value = 1 Then FileCopy a, cEnd Sub

Al fichero destino le cambiamos el nombre, le ponemos el Timer, o sea, el número de segundos que han pasado desde la media noche.Esto lo hacemos para no recibir archivos con el mismo nombre.

Timer = segundos transcurridos desde la media noche.\\eqp20\envio = Carpeta envio, que se encuentra en el eqp20 de la red

15.- Mandar Texto

Se trata de escribir un texto y pulsar el botón Enviar para mandarlo a un Equipo de Red.

El contenido del Text1 se debe guardar en el archivo C:\borra.txt de tu disco duro (Machacando si ya hubiera otro texto)

Además se debe enviar a la carpeta compartida envio situada en un ordenador de red llamado eqp20 (\\eqp20\envio\)

El archivo enviado debe tener como nombre el Timer, o sea, la hora actual en segundos.

Para ello "cogemos" la hora actualx = Timer, que es cadena de caracteres.Lo pasamos a número (VAL) y tomamos la parte entera (INT)

El valor z será el

Private Sub Command1_Click()Open "C:\borra.txt" For Output As #1Write #1, Text1.TextClose #1

x = Timerz = Int(Val(x))c = "\\eqp20\envio\" & z' c = "C:\" & z (Si no tienes red)

FileCopy "C:\borra.txt", cEnd Sub

nombre del archivo que enviemos.

Operaciones con archivos

El Text1 debe tener en Propiedades :

Multiline = TrueScrollBar = Vertical

En vez deWrite #1, Text1.TextEscribePrint #1, Text1.Text

16.- Dado

Poner un botón y un PictureBox (pctdado)

Bájate el archivo comprimido dado.zip en donde encontrarás los dibujos del dado. Descomprímelo en la carpeta C:\Dado

Cuando Pulsas sale la cara de un dado.

Private Sub cmdPulsa_Click()

Randomize TimerX = Int(6 * Rnd) + 1

Select Case XCase 1pctdado.Picture = LoadPicture("C:\Dado\dado1.bmp")Case 2pctdado.Picture = LoadPicture("C:\Dado\dado2.bmp")Case 3pctdado.Picture = LoadPicture("C:\Dado\dado3.bmp")

Case 4pctdado.Picture = LoadPicture("C:\Dado\dado4.bmp")Case 5pctdado.Picture = LoadPicture("C:\Dado\dado5.bmp")Case 6pctdado.Picture = LoadPicture("C:\Dado\dado6.bmp")End Select

End Sub

 

Cuando la línea de código es muy larga, la podemos continuar en la línea siguiente poniendo un guión _

Ejemplo :

If x = num Then txtrespuesta.Text = "Acertaste de " & n & " intentos.": cmdes.Enabled = False

La podemos escribir así, en dos líneas :

If x = num Then txtrespuesta.Text = "Acertaste de " & n & _" intentos.": cmdes.Enabled = False

17.- Adivina

El guión _ es para un cambio de línea en el código fuente.

Fíjate en la Propiedad Enabled, se utiliza para anular el botón.

Dim num, x, nPrivate Sub cmdes_Click()n = n + 1num = Val(txtnum.Text)If x < num Then txtrespuesta.Text = "Mi número es menor."If x > num Then txtrespuesta.Text = "Mi número es mayor."If x = num Then txtrespuesta.Text = "Acertaste de " & n & _" intentos.": cmdes.Enabled = FalseEnd Sub

Private Sub Command1_Click()Randomize Timerx = Int(Rnd * 100)n = 0cmdes.Enabled = TrueEnd Sub

Private Sub Form_Load()cmdes.Enabled = FalseEnd Sub

 

18.- Dibujar

Trazo libre de dibujo

Poner dos optionButton (optrojo)(optnegro)Dim dibujar As Boolean

Private Sub Command1_Click()ClsEnd Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer,_ X As Single, Y As Single)

dibujar = TrueEnd Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _X As Single, Y As Single)If optrojo = True Then Form1.ForeColor = vbRedIf optnegro = True Then Form1.ForeColor = vbBlackIf dibujar Then Line -(X, Y)

End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _X As Single, Y As Single)

dibujar = FalseEnd Sub

19.- Ecuación

Dim a As CurrencyDim b As CurrencyDim c As Currency

Private Sub cmdCalcula_Click()txtnegativo.Visible = Falsea = Val(txta.Text)b = Val(txtb.Text)c = Val(txtc.Text)r = b * b - 4 * a * c

If r < 0 Then

txtx1.Text = ""

Resolución de una ecuación de 2º grado

txtx2.Text = ""txtnegativo.Visible = True

Else

ra = Sqr(r)X1 = (-b + ra) / (2 * a)X2 = (-b - ra) / (2 * a)txtx1.Text = X1txtx2.Text = X2

End IfEnd Sub

Private Sub Form_Load()txtnegativo.Visible = FalseEnd Sub

20.- Papelillos

Private Sub Form_Load()

Form.WindowState=2 ' Pantalla completaForm.BorderStyle=0 ' Sin barra de TitulosTimer1.Interval = 1 ' Pone intervaloDrawWidth = 8 ' Grosor del puntoIf App.PrevInstance Then Unload MeEnd Sub

Private Sub Timer1_Timer()

Randomize Timer()X = Rnd * 12000Y = Rnd * 9000C = Rnd * 15PSet (X, Y), QBColor(C)

End Sub

Private Sub Form_Click()Unload Me

' Cuando pulsa sobre el Formulario se descargaEnd Sub

 

21.- Resistencias

Hay una etiqueta sobre cada resistencia : lblR1, lblR2 y lblR3

Se ha realizado de dos formas:

En la parte izquierda se efectúan los Calculos en cada Subrutina del Scroll.

En la parte derecha he creado una Subrutina llamada Calculos y la llamo cada vez que se realiza un Scroll.

Estúdia las dos formas.Dim Rt As Currency

Private Sub hscR1_Change()lblR1.Caption = hscR1.ValueR1 = Val(hscR1.Value)R2 = Val(hscR2.Value)R3 = Val(hscR3.Value)Rp = (R2 * R3) / (R2 + R3)lblRp.Caption = RpRt = R1 + RplblRt.Caption = RtEnd Sub

Private Sub hscR2_Change()lblR2.Caption = hscR2.ValueR1 = Val(hscR1.Value)R2 = Val(hscR2.Value)R3 = Val(hscR3.Value)Rp = (R2 * R3) / (R2 + R3)lblRp.Caption = RpRt = R1 + RplblRt.Caption = RtEnd Sub

Dim Rt As Currency

Private Sub hscR1_Change()lblR1.Caption = hscR1.ValueCalculos

End Sub

Private Sub hscR2_Change()lblR2.Caption = hscR2.ValueCalculos

End Sub

Private Sub hscR3_Change()lblR3.Caption = hscR3.ValueCalculos

End Sub

Private Sub Calculos()R1 = Val(hscR1.Value)R2 = Val(hscR2.Value)R3 = Val(hscR3.Value)Rp = (R2 * R3) / (R2 + R3)lblRp.Caption = RpRt = R1 + RplblRt.Caption = RtEnd Sub

Private Sub hscR3_Change()lblR3.Caption = hscR3.ValueR1 = Val(hscR1.Value)R2 = Val(hscR2.Value)R3 = Val(hscR3.Value)Rp = (R2 * R3) / (R2 + R3)lblRp.Caption = RpRt = R1 + RplblRt.Caption = RtEnd Sub

22.- Quiniela

Sacar un TextBox. Marcar. Botón derecho. Copiar. Botón derecho. Pegar.Te hace una pregunta:¿Quieres crear una matriz de controles? Responde Sí.Repetir el proceso de Pegar.

Habrás creado : Text1(0), Text1(1), Text1(2), Text1(3), Text1(4), Text1(5) ......Text1(14)

Todos son Text1 pero con distinto subíndice.

De tal manera que podemos localizar cualquiera de ellos medianteText1(n)

Este programa se basa en el de la quiniela visto en la página de QBASICPrivate Sub Command1_Click()Randomize TimerFor n = 0 To 14a = Int(Rnd * 6) + 1If a < 4 Then r = "1": GoTo finIf a > 5 Then r = "2": GoTo finr = "X"

fin:Text1(n).Text = rNext n

End Sub

23.- InputBox y MsgBox

InputBox se utiliza para introducir datos, se asigna a una variable, por ejemplo nom.

Si pulsamos Cancelar se toma nom como ""

MsgBox se utiliza para presentar una respuesta. Con las constantes vb podemos poner distintos botones y símbolos.Private Sub Command1_Click()nom = InputBox("Introduce tu nombre", "Datos")

If nom = "" Thenres = MsgBox("No válido", vbExclamation + vbOKOnly, "Repetir")Elseres = MsgBox("Te llamas " & nom, vbInformation + vbOKOnly, "Respuesta")End IfEnd Sub

Mensajes Botones RespuestavbCritical Crítico vbOKOnly Aceptar vbOK Aceptar

vbQuestion Pregunta vbOKCancelAceptar Cancelar

vbCancel

Cancelar

vbExclamation

Exclamación

vbAbortRetryIgnore

Anular, Reintentar, Ignorar

vbAbort Anular

vbInformation

Información

vbYesNoCancelSi, No, Cancelar

vbRetryReintentar

vbYesNo Si, NovbIgnore

Ignorar

vbRetryCancelReintentar, Cancelar

vbYes Si

vbCrLfCambioLinea

vbApplicationModal

Sin botones

vbNo No

' Aquí tienes otro ejemplo de respuestas del MsgBox

Private Sub Command1_Click()pre = MsgBox("¿Te gustan los Beatles?", vbQuestion + vbYesNo, "Pregunto")

If pre = vbYes Thenres = MsgBox("Eres un carroza.", vbInformation + vbOKOnly, "Respuesta")Elseres = MsgBox("Niñato moderno.", vbExclamation + vbOKOnly, "Respuesta")End IfEnd Sub

 

24.- Tres iguales

Dim ya

Private Sub Command1_Click()Timer1.Interval = 1Text2.Visible = FalseEnd Sub

Private Sub Command2_Click()ya = "si"End Sub

Private Sub Form_Load()Text2.Visib

Juego de máquina recreativa.

Cuando le das a Comienza, salen continuamente números 1, 2 y 3 en los casilleros, cuando pulsas Para, si los tres número son iguales sale el mensaje de Enhorabuena que estaba Visible=false.

le = FalseTimer1.Interval = 0Randomize TimerEnd Sub

Private Sub Timer1_Timer()a = Int(Rnd * 3 + 1)b = Int(Rnd * 3 + 1)c = Int(Rnd * 3 + 1)Text1(0).Text = aText1(1).Text = bText1(2).Text = cIf ya = "si" ThenTimer1.Interval = 0If (Text1(0).Text = Text1(1).Text _And Text1(1).Text = Text1(2).Text) _Then Text2.Visible = TrueEnd Ifya = ""End Sub

Los TextBox deben ser TextBox1(0), TextBox1(1) y

TextBox1(2)

25.- Energía

En una casa hay contratado un servicio de potencia de 3.3 KW (Por el cuál se ha de pagar 1.394348 euro cada mes). El KWh consumido se paga a 0.079213 Euro.Además hay que pagar un impuesto sobre electricidad de 1.05113 x 4.864 %. Y un I.V.A. del 16 %.El recibo se hace cada 2 meses. Este sería su recibo de energía, suponiendo que estos dos meses ha

consumido 562 Kwh.

Termino de potencia3.3 kW x 2 meses x 1.394348 eur

9.20

Coste de Consumo 562 x 0.079213 eur 44.52Subtotal 53.72

Impuesto sobre electricidad

53.72 x 1.05113 x 4.864 % 2.75

Base Imponible 56.47I.V.A. 16 % de 56.47 9.04TOTAL FACTURA 65.51En PESETAS 10900

 

Private Sub Consumo_Change()

nPcontratada = Val(Pcontratada.Text)nIPcontratada = nPcontratada * 2 * 1.394348IPcontratada.Text = nIPcontratada

nConsumo = Val(Consumo.Text)nIConsumo = nConsumo * 0.079213IConsumo.Text = nIConsumo

nSubtotal = nIPcontratada + nIConsumoSubtotal.Text = nSubtotal

nImpuestos = nSubtotal * 1.05113 * 4.864 / 100Impuestos.Text = nImpuestos

nBaseImponible = nSubtotal + nImpuestosBaseImponible.Text = nBaseImponible

nIVA = nBaseImponible * 0.16IVA.Text = nIVA

nTotal = nBaseImponible + nIVATotal.Text = nTotal

nPesetas = nTotal * 166.386Pesetas.Text = nPesetasEnd Sub

Este Proyecto se puede mejorar definiendo los tipos de variables y actuando sobre el redondeo. Pero se ha intentado realizar de una manera sencilla.

Para su funcionamiento debes cambiar sólamente el casillero de Consumo.

26.- Dias

En este Proyecto ponemos una fecha, y nos calcula los dias pasados desde esa fecha y el día de la semana.

Los Textbox tienen como nombre Dia, Mes y Año respectivamente.

Donde está la palabra Miércoles se ha de poner una etiqueta llamada Dianaciste.

Donde está el número 4645 se ha de poner una etiqueta llamada Diasvividos.DateSerial, convierte tres números en formato fecha.

WeekDay me dá el número de día de la semana.

DateDiff nos da la diferencia entre dos fechas, si ponemos "d"

Private Sub Command1_Click()Dia = Dia.TextMes = Mes.TextAño = Año.TextMifecha = DateSerial(Año, Mes, Dia)semana = Weekday(Mifecha, vbMonday)dias = DateDiff("d", Mifecha, Now)Diasvividos.Caption = dias

Select Case semanaCase 1Dianaciste.Caption = "Lunes"Case 2Dianaciste.Caption = "Martes"Case 3Dianaciste.Caption = "Miércoles"Case 4

nos da los días de diferencia.

Now es la fecha actual.

Dianaciste.Caption = "Jueves"Case 5Dianaciste.Caption = "Viernes"Case 6Dianaciste.Caption = "Sábado"Case 7Dianaciste.Caption = "Domingo"

End SelectEnd Sub

Juego de dados

Dim puntos1, puntos2

Private Sub Command1_Click()

Randomize Timera = Int(Rnd * 6) + 1b = Int(Rnd * 6) + 1c = a + bLabel1.Caption = aLabel2.Caption = bLabel4.Caption = cIf c = 7 Then puntos1 = puntos1 + 1Label5.Caption = puntos1Command2.Enabled = TrueCommand1.Enabled = False

End Sub

Private Sub Command2_Click()

Randomize Timera = Int(Rnd * 6) + 1b = Int(Rnd * 6) + 1

Juego de dados

Atención : los dos cuadrados blancos de arriba no son TextBox, sino Label, llamados Label1 y Label2. Tienen color blanco de fondo. El Label4 es el que está a la derecha de Suma :.

c = a + bLabel1.Caption = aLabel2.Caption = bLabel4.Caption = cIf c = 7 Then puntos2 = puntos2 + 1Label6.Caption = puntos2Command1.Enabled = TrueCommand2.Enabled = False

End Sub

Private Sub Command3_Click()puntos1 = 0puntos2 = 0Label5.Caption = 0Label6.Caption = 0End Sub

Private Sub Form_Load()Command2.Enabled = FalseEnd Sub

Condicionales y operadores lógicos

IF a > b THEN ...

SI a es mayor que b ENTONCES...

IF a >= b THEN ...

SI a es mayor o igual que b ENTONCES ...

IF a <= b THEN ...

SI a es menor o igual que b ENTONCES ...

IF a > 7 AND a < 24 THEN ...

SI a es mayor que 7 Y a es menor que 24

ENTONCES ...

IF a > 7 AND b > 30 THEN ...

SI a es mayor que 7 y b es mayor que 30 ENTONCES ...

IF a = 5 OR b = 9 THEN

Si a es igual a 5 O b es igual a 9 ENTONCES ...

IF a$="Pedro" OR a$="Juan" THEN ...

SI a$ es Pedro O a$ es Juan ENTONCES ...

IF a="Juan" AND edad >= 18 THEN ...

SI a es Juan Y edad es mayor o igual que 18 ENTONCES ...

 

Operadores Lógicos(Interpreta estas Líneas)

C = A AND BD = A OR BE = Not AF = A Xor B

True = -1False = 0

 

28.- Puertas lógicas

Puertas Lógicas

Cuando pulsamos sobre los botones, su correspondiente

Podríamos utilizar variables Booleanas que tienen como valores True y False.

Textbox cambia a 0 y 1 alternadamente.

En la salida debemos obtener el resultado.

Los dibujos de las puertas son un Image. Lo puedes bajar de aquí puerta.gif

En este caso la variable utilizada cambia, mediante el Not entre0 y -1.

Para obtener el valor 1 se aplica la función Abs( )

Tienes que declarar las variables.

' Presento el Código de la puerta AND y O-EXCLUSIVA, las demás puertas se' deja como ejercicio. La O-EXCLUSIVA se podría haber realizado mediante' Xor. SE = EX1 Xor EX2

Dim AN1, AN2Dim EX1, EX2

' PUERTA AND

Private Sub Command1_Click()AN1 = Not (AN1)A1.Text = Abs(AN1)SA.Text = Abs(AN1 And AN2)

End Sub

Private Sub Command2_Click()AN2 = Not (AN2)A2.Text = Abs(AN2)SA.Text = Abs(AN1 And AN2)End Sub

' PUERTA O-EXCLUSIVA

Private Sub Command5_Click()EX1 = Not (EX1)E1.Text = Abs(EX1)SE.Text = Abs((EX1 And Not (EX2)) Or (Not (EX1) And EX2))End Sub

Private Sub Command6_Click()EX2 = Not (EX2)E2.Text = Abs(EX2)SE.Text = Abs((EX1 And Not (EX2)) Or (Not (EX1) And EX2))End Sub

 

Estudia la suma acumulativa :

Anueva = Aantigua + 1A = A + 1B = B + 5Text1.Text = Text1.Text & " Hola " De esta manera se agrega al valor anterior de Text1 la palabra " Hola "

Text1.Text = "Visual"Text1.Text= Text1.Text & " Basic"

Ahora el Text1.Text valdrá "Visual Basic"

29.- Divisores

Divisores de un número

Private Sub Command1_Click()Text2.Text = ""x = Val(Text1.Text)

If x < 1 Or x > 50 Thena = MsgBox("No válido", vbOKOnly, "Entrada incorrecta")

ElseFor n = 1 To xz = x Mod nIf z = 0 Then Text2.Text = Text2.Text & n & "-"Next n

End If

End Sub

30.- Intermitente

Dim cambi As Boolean

Private Sub HScroll1_Change()Timer1.Interval = HScroll1.ValueEnd Sub

Private Sub Timer1_Timer()cambi = Not (cambi)If cambi = True Then Shape1.FillColor = QBColor(10)If cambi = False Then Shape1.FillColor = QBColor(12)

End Sub

En Propiedades del HScroll1:Max = 2000Min = 100

Poner el FillStyle del Shape1 en Solid

31.- Mueve

Mueve el Check1

Ponemos WindowState= 2 para que salga la pantalla completa.

Check1.Move H, V mueve el Check.

En vez de 100 se puede poner otro número.Mejoras :

Cuando lo ejecutes podrás observar que se puede salir de la pantalla por los cuatro lados.

Modifica el programa para que no se salga de la pantalla cuando llegue a los extremos.

Actuar sobre :

Form1.TopForm1.Left

Dim H, V

Private Sub Form_Load()Form1.WindowState = 2End Sub

Private Sub Abaj_Click()V = V + 100Check1.Move H, VEnd Sub

Private Sub Arri_Click()V = V - 100Check1.Move H, VEnd Sub

Private Sub Dere_Click()H = H + 100Check1.Move H, VEnd Sub

Form1.HeightForm1.Width

Private Sub Izqui_Click()H = H - 100Check1.Move H, VEnd Sub

 

Otros controles .ocx y .dll

Además de los controles básicos que encontramos por defecto en el cuadro de herramientas, podemos utilizar otros controles. Para ello vamos a Proyecto/Componentes/Controles y nos encontramos con conjuntos de ellos.

Vamos a insertar (marcar)

Windows Media Player es el wmp.dll     (En Windows 98 MSDXM.OCX)

Los OCX y algunas .DLL son controles de Visual Basic. Podemos buscar *.ocx en Internet.

Private Sub Command1_Click()WindowsMediaPlayer1.URL = "E:\multi\video.avi"End Sub

 

Como he comentado anteriormente los archivos.OCX son controles de Visual Basic. Vamos a verlos :

Ve a Buscar archivos en tu disco duro y busca : *.ocx. Te saldrán controles.OCX que tienes en tu ordenador y que utiliza Visual Basic o Windows. La mayoría estarán en C:\Windows\System (o en \Windows\System32).También algunas *.dll se pueden utilizar como controles de Visual Basic.

En Internet puedes encontrar muchos controles.OCX, ve a un buscador y escribe -ocx free download- te saldrán páginas de donde puedes bajar archivos OCX.

1.- Aquí te pongo un control ocx BÁJATELO y guárdalo en la carpeta C:\MisOCX de tu disco duro rotater.ocx (69 K)

2.- Ahora entra en Visual Basic y en Proyecto/Componentes/Controles/Examinar Entra en la carpeta C:\MisOCX que es donde lo has guardado, márcalo y dale la botón Abrir.

3.- A continuación en la ventana de Controles tendrás activado en citado control como Sidewalk Rotater Control, dale a Aplicar y este control aparecerá en la caja de controles.

4.- Saca el mencionado control al Formulario de Visual Basic.

5.- Entra en la Propiedad (Personalizado) del mencionado control y cambia algunos valores, colores, las Face Zero, One, Two son las caras. Se pueden poner letras y dibujos en cada una de las tres caras.

De esta manera hemos bajado un control ocx de Internet y lo hemos insertado en nuestro Proyecto.

Hay muchos controles en Internet algunos son gratuitos y otros son

comerciales.

 

Aquí tienes otro ejemplo de OCX. Alguien, en este caso una empresa, se ha dedicado a construir un botón con cierta personalidad. Y ha realizado un OCX. Luego lo ha puesto en Internet por si alguien lo quiere utilizar. (Si quieres ser un buen profesional de Visual Basic deberás aprender a construir controles.OCX)

1.- Aquí te pongo otro control ocx BÁJATELO y guárdalo en la carpeta C:\MisOCX de tu disco duro Btnenh4.ocx. (404 K)

2.- Ahora entra en Visual Basic y en Proyecto/Componentes/Controles/Examinar Entra en la carpeta C:\MisOCX que es donde lo has guardado, márcalo y dale la botón Abrir.

3.- A continuación en la ventana de Controles tendrás activado en citado control como Active Multimedia Button Control, dale a Aplicar y este control aparecerá en la caja de controles.

4.- Saca el mencionado control al Formulario de Visual Basic.

5.- Entra en la Propiedad (Personalizado) del mencionado control y cambia algunos valores. Podrás configurar un botón de distintas formas, colores, estilos, .....

Puede ocurrir que un control.ocx no funcione porque no esté registrado, para registrarlo busca el programa Regsvr32.exe

Luego en Inicio/Ejecutar poner : Regsvr32.exe control.ocx

Sólo Windows 98

Aquí tienes otro Control, en este caso viene como un archivo dll.Vtext.dll (169 K)Microsoft Direct Text-to-Speech.

Private Sub Command1_Click()TextToSpeech1.Speak ("Escribe una frase")

End Sub

Escribe una frase y te la pronuncia, con acento inglés. Busca en Internet el Español.

W98Veamos otro control Multimedia lo puedes encontrar en el CDROM de VisualBasic/os/System/MCI32.OCX, aunque también lo puedes bajar de aquí MCI32.OCX (194 K)Aunque podemos poner los controles en cualquier directorio, normalmente se guardan en C:\Windows\System, guárdalo ahí y luego en Visual Basic marca :Proyecto/Componentes/Controles/Microsoft Multimedia Control 6.0

En el formulario situa un botón, un PictureBox y el MMControl. Luego en el botón escribe éste código :

Private Sub Command1_Click()

MMControl1.DeviceType = "AVIVideo"MMControl1.FileName = "C:\Pon-un-archivo.avi"MMControl1.Command = "open"MMControl1.hWndDisplay = Picture1.hWnd

MMControl1.Command = "play"

End Sub

Calendario MSCAL.ocx

 

¿Qué son las API de Windows? Voy a intentar explicarlo de una manera sencilla.

Comencemos con los archivos.dll, (Dinamic Link Libraries) en su interior hay una serie de funciones que un programa puede utilizar.

Supongamos que tenemos un archivo llamado Operaciones.dll y en su interior hay 4 funciones: Suma, Resta, Multiplica y Divide.

Function

Operaciones.dll

Suma (X,Y)R = X + YReturn

Resta (X,Y)R = X - YReturn

Multiplica (X,Y)R = X * YReturn

Divide (X,Y)R = X / YReturn

End Function

Pues un programa puede acudir a cualquiera de esas funciones.Primero tendría que declarar la Función de esta manera :

Private Declare Function Suma Lib "Operaciones" (X as Single, Y as Single) as Single

Esto quiere decir que le hemos de suministrar dos parámetros (a,b) y él nos devolverá la solución de tipo Single.

Lo haríamos de esta manera :

C = Suma (3,4)

Evitentemente, C tomaría el valor 7, que es la suma de 3 y 4.

Las API de Windows son una serie de archivos dll que tiene Windows y que nosotros las podemos utilizar, algunas de ellas son : kernel32.dll, gdi32.dll, user32.dll podemos encontrar muchas más, además los programas que instalamos en nuestro ordenador también nos añaden más archivos.dll. Entra en tu buscador de Windows y escribe *.dll

El ejemplo trata de lo siguiente : Tomamos el archivo User32.dll de Windows 98, que contiene muchas funciones, una de ellas es SwapMouseButton, que permuta los botones derecho e izquierdo del ratón.

Declaramos la Función que vamos a utilizar (SwapMouseButton) y el archivo donde se encuentra (User32.dll)

Si llamamos (Call) a esta función SwapMouseButton (0) nos pondrá el ratón normalSi llamamos (Call) a esta función SwapMouseButton (1) nos pondrá el ratón al revés.

Así que hemos tomado el archivo de Windows "User32.dll" para utilizar una de sus funciones SwapMouseButton

Private Declare Sub SwapMouseButton Lib "User32" (ByVal N As Integer)

Private Sub Diestro_Click()Call SwapMouseButton(0)End Sub

Private Sub Zurdo_Click()Call SwapMouseButton(1)End Sub

Private Sub Hola_Click()Text1.Text = "Hola"End Sub

Private Sub Adios_Click()Text1.Text = "Adios"End Sub

Las dll además de funciones pueden contener dibujos, iconos u otro tipo de datos. A los que pueden acceder cualquier aplicación de Windows.

Con este programas puedes ver el contenido de las dll: depends.zip (403 K)Claro que para saber qué significa cada función y como puedes acceder a ellas tendrás que profundizar.

Insertar un gif animado en un formulario de Visual Basic.

Te bajas éste archivo: Gif89.dll (43 K)

Luego: Proyecto / Componentes... / Controles Botón: Examinar Tipo: Todos los archivos (*.*) ----> Gif89.dllAplicar.

Insertamos el control en el Formulario y en la Propiedad Filename ponemos la dirección absoluta del gif animado.

 

Editor de texto   Editor.exe (20 K)

Ahora vas a construir un Editor de texto. Vas a insertar nuevos controles CommonDialog y CommonControl, vas a utilizar el Editor de menús, y una API de Windows. No es necesario que aprendas todo lo que vas a realizar, pero te recomiendo que construya el siguiente Proyecto.

Baja el archivo Editor.zip (140 K) , descomprímelo y obtendrás un archivo.doc. Sigue las instrucciones y en un par de horas habrás construido un Editor de texto que te sorprenderá.

Al revés

Private Sub cmdPulsa_Click()a$ = Text1.Textx = Len(a$)

For n = x To 1 Step -1b$ = Mid(a$, n, 1)c$ = c$ + UCase(b$)Next nText2.Text = c$' Hay una funcion llamada StrReverse("asd")' que hace lo mismoEnd Sub

 

33.- Codifica

Private Sub Command1_Click()a$ = Text1.Textx = Len(a$)For n = 1 To xca$ = Mid(a$, n, 1)cod = Asc(ca$)Text2.Text = Text2.Text & cod & "-"Next nEnd Sub

Private Sub Command2_Click()Text1.Text = ""Text2.Text = ""End Sub

  Esto es un ejemplo de concatenación:

  Text2.Text = Text2.Text & cod & "-"

34.- Colores

Los botones se han creado mediante una matriz de controles:Boton(0), Boton(1), Boton(2), Boton(3), Boton(4), .....

  Hay que poner el Timer1.Interval   en 10

Private Sub Timer1_Timer()Randomize Timerx = Int(Rnd * 8)c = Int(Rnd * 6) + 9Boton(x).BackColor = QBColor(c)End Sub

35.- Semáforo

Private Sub Timer1_Timer()x = x + 1If x = 8 Then x = 0

Select Case xCase Is < 3Shape1.FillColor = QBColor(12)Shape2.FillColor = QBColor(6)Shape3.FillColor = QBColor(2)Case Is = 4Shape1.FillColor = QBColor(4)Shape2.FillColor = QBColor(14)

Shape3.FillColor = QBColor(2)Case Is > 4Shape1.FillColor = QBColor(4)Shape2.FillColor = QBColor(6)Shape3.FillColor = QBColor(10)End Select

End Sub

36.- Temporizador

Dim ahora, total, comenzo, fin, progPrivate Sub Command1_Click()hh = Val(Text1.Text)mm = Val(Text2.Text)

ss = Val(Text3.Text)total = hh * 3600 + mm * 60 + sscomenzo = Timerfin = comenzo + totalTimer1.Interval = 1If Option1.Value = True Then prog = "C:\Windows\Calc.exe"If Option2.Value = True Then prog = "C:\Archivo....Mspaint.exe"If Option3.Value = True Then prog = "C:\Windows\Explorer.exe"End Sub

Private Sub Timer1_Timer()ahora = TimerText4.Text = Int(ahora - comenzo)If ahora > fin Thend = Shell(prog, 1)Timer1.Interval = 0End IfEnd Sub

Las rutas de las aplicaciones tienes que cambiarlas. Si tienes XP, la calculadora estará en \Windows\System32\calc.exe.

Para hacer las pruebas establece pocos segundos: 6

37.- Factorial

Private Sub otro()repe: a = InputBox("Introduce un número del 1 al 20", "Factorial")If a = "" Then EndIf Val(a) < 1 Or Val(a) > 20 Thenb = MsgBox("Entrada no válida", vbOKOnly, "Error")GoTo repeElsex = 1For n = 1 To ax = x * nNext nb = MsgBox("El factorial de " & a & " es : " & x, vbOKOnly, "Resultado")otroEnd IfEnd Sub

Private Sub Form_Load()otroEnd Sub

Estudio del InputBox y MsgBox.No hace falta controles, sólo el formulario y la Sub-rutina otro.

38.- Multiplicar

Dim r, mPrivate Sub Command1_Click()Text2.Text = ""m = Val(Text1.Text)If m > 0 And m < 10 ThenFor n = 0 To 9

r = n * mText2.Text = Text2.Text & m & " x " & n & " = " & r & vbCrLfNext nElsere = MsgBox("Número no válido." & vbCrLf & "Debe estar_

comprendido entre 1 y 9.", vbCritical + vbOKOnly, "No vale")End IfEnd Sub

39.- Disparo

Dim h, v, i, a, b, c

Private Sub Command1_Click()Timer2.Interval = 10Command1.Enabled = FalseEnd Sub

Private Sub Form_Load()i = 100b = 5160End Sub

Private Sub Timer1_Timer()h = h + iIf h > Width Then i = -100If h < 0 Then i = 100

Super.Move h, v

End Sub

Private Sub Timer2_Timer()b = b -

100If b < 0 Thenb = 5160Timer2.Interval = 0Command1.Enabled = TrueEnd If

Check1.Move 3420, bEnd Sub

Bajo el botón azul de la parte inferior hay un CheckBox.El CheckBox sólo sube.

40.- Frutas

Dim na, nakg, napts, ma, makg, mapts,_ mel, melkg, melpts, pla, plakg,_ plapts As Long

Private Sub Form_Load()

End Sub

Private Sub Text5_Change()On Error Resume Nextna = Text1.Textnakg = Text5.Textnapts = na * nakgText9.Text = napts sumaEnd Sub

Private Sub Text6_Change()On Error Resume Nextma = Text2.Textmakg = Text6.Textmapts = ma * makgText10.Text = mapts

sumaEnd Sub

Private Sub Text7_Change()On Error Resume Nextmel = Text3.Textmelkg = Text7.Textmelpts = mel * melkgText11.Text = melpts sumaEnd Sub

Private Sub Text8_Change()On Error Resume Nextpla = Text4.Textplakg = Text8.Textplapts = pla * plakgText12.Text = plaptssumaEnd Sub

Public Sub suma()On Error Resume Nexttotal = napts + mapts + melpts _ + plaptsText13.Text = totalEnd Sub

Imágenes

Dim x

Private Sub pctDado_Click()

End Sub

Private Sub Timer1_Timer()Timer1.Interval = HScroll1.Value

x = x + 1

Select Case xCase 1pctDado.Picture = LoadPicture("C:\IMAGES\Moon1.jpg")Case 2pctDado.Picture =

LoadPicture("C:\IMAGES\Moon2.jpg")Case 3pctDado.Picture = LoadPicture("C:\IMAGES\Moon3.jpg")Case 4pctDado.Picture = LoadPicture("C:\IMAGES\Moon4.jpg")Case 5pctDado.Picture = LoadPicture("C:\IMAGES\Moon5.jpg")Case 6pctDado.Picture = LoadPicture("C:\IMAGES\Moon6.jpg")Case 7pctDado.Picture = LoadPicture("C:\IMAGES\Moon7.jpg")Case 8pctDado.Picture = LoadPicture("C:\IMAGES\Moon8.jpg")End SelectIf x = 8 Then x = 0End Sub

El HScroll1Min = 1Max = 1000

Colocar un PictureBox y llamarlo pctDado

Bajar las imágenes:Moon.zip (54 K)Y grabarlas en C:\IMAGES

43.- Rapidez

44.- Ruleta

Dim n

Private Sub Command1_Click()Timer1.Interval = 0If Val(Text1.Text) = n Then Text2.Visible = TrueEnd Sub

Private Sub Command2_Click()Timer1.Interval = HScroll1.ValueText2.Visible = Falsek = Val(Text1.Text)If k < 0 Or k > 5 Then l = MsgBox("Numero no valido", vbOKOnly, "No válido")End Sub

Private Sub Form_Load()Text2.Visible = FalseEnd Sub

Private Sub Timer1_Timer()

Shape2(n).FillColor = QBColor(10)If n = 0 Then

Shape2(5).FillColor = QBColor(0)ElseShape2(n - 1).FillColor = QBColor(0)End Ifn = n + 1If n = 6 Then n = 0

End Sub

45.- Ruleta rusa.

Dim x

Private Sub Boton1_Click()If x = 1 ThenForm1.BackColor = QBColor(12)ElseBoton1.Enabled = FalseEnd IfEnd Sub

Private Sub Boton2_Click()If x = 2 ThenForm1.BackColor = QBColor(12)ElseBoton2.Enabled = FalseEnd IfEnd Sub

Private Sub Boton3_Click()If x = 3 ThenForm1.BackColor = QBColor(12)Else

Boton3.Enabled = FalseEnd IfEnd Sub

Private Sub Boton4_Click()If x = 4 ThenForm1.BackColor = QBColor(12)ElseBoton4.Enabled = FalseEnd IfEnd Sub

Private Sub Boton5_Click()If x = 5 ThenForm1.BackColor = QBColor(12)ElseBoton5.Enabled = FalseEnd IfEnd Sub

Private Sub Boton6_Click()If x = 6 ThenForm1.BackColor = QBColor(12)ElseBoton6.Enabled = FalseEnd IfEnd Sub

Private Sub Command1_Click()Form1.BackColor = QBColor(8)Boton1.Enabled = TrueBoton2.Enabled = TrueBoton3.Enabled = TrueBoton4.Enabled = TrueBoton5.Enabled = TrueBoton6.Enabled = TrueRandomize Timerx = Int(Rnd * 6) + 1

End Sub

46.- Rebotes

Para que al pulsar una tecla (KeyPress), se mueva el Botón, en las Propiedades del Form1, tenemos que establecer KeyPreview = True.

El círculo es un OptionButton.

En el Timer poner Interval = 1Dim h, v

Private Sub Form_KeyPress(KeyAscii As Integer)' Tecla b y Tecla cIf KeyAscii = 98 Then Command1.Top = Command1.Top + 100If KeyAscii = 99 Then Command1.Top = Command1.Top - 100End Sub

Private Sub Form_Load()h = 100v = 100End Sub

Private Sub Timer1_Timer()Option1.Left = Option1.Left + hOption1.Top = Option1.Top + vIf Option1.Left > Form1.Width Then h = h * (-1)

If Option1.Left < 0 Then h = h * (-1)If Option1.Top > Form1.Height Then v = v * (-1)If Option1.Top < 0 Then v = v * (-1)End Sub

En esta dirección puedes encontrar exámenes de Visual Basic de una Universidad:

http://www1.ceit.es/Asignaturas/Informat1/Examenes/VBasic/ExamsVBasic.htm

La dirección anterior contienen enlaces a varias páginas en donde se encuentran exámenes de Visual Basic, ¿Cómo podrías bajar todas las páginas automáticamente?. Pues con un navegador fuera de línea, como por ejemplo el HTTrack. Ve a Programas, luego a WinHTTrack, bájate este navegador, estúdialo un poco y luego baja todas las páginas que componen la dirección de Visual Basic que he puesto arriba.

Base de datos y SQL

Para realizar éste proyecto, previamente hemos construido una Base de Datos con el Access, llamada C:\mibase.mdb y en ella una tabla llamada: mitabla.En la tabla debe haber dos campos alfanuméricos llamados: Nombre y Edad.

Una vez que tenemos la Base de datos, vamos a Visual Basic y creamos un formulario como el que se indica a la derecha la tabla siguiente.

Los Text3 y Text4 tienen propiedad Multiline True.

Deberás estudiar el funcionamiento de SQL

En algunos proyectos tendremos que abrir la base de datos para poder trabajar, para ello se utilizan éstas instrucciones:

Set con = CreateObject("ADODB.Connection")con.Open ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & "c:\mibase.mdb")

' GuardarPrivate Sub Command1_Click()Set con = CreateObject("ADODB.Connection")con.Open ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & "c:\mibase.mdb")

nomb = Text1.Textedad = Text2.Textsql = "INSERT INTO mitabla (Nombre, Edad) "sql = sql & " VALUES ("sql = sql & "'" & nomb & "',"sql = sql & "'" & edad & "')"con.Execute (sql)End Sub

' VerPrivate Sub Command2_Click()Set con = CreateObject("ADODB.Connection")con.Open ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & "C:\mibase.mdb")

busca = Text5.Text

sql = "SELECT * FROM mitabla WHERE Nombre LIKE '" & busca & "'"Set RS = con.Execute(sql)Do While Not RS.EOFText3.Text = Text3.Text & vbCrLf & RS("Nombre")Text4.Text = Text4.Text & vbCrLf & RS("Edad")

RS.MoveNextLoopEnd Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Para BORRAR Registros, añadimos un nuevo Command6_Click:

Private Sub Command6_Click()Set con = CreateObject("ADODB.Connection")con.Open ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & "C:\mibase.mdb")

busca = Text5.Textsql = "DELETE * FROM prueba WHERE Nombre LIKE '" & busca & "'"Set RS = con.Execute(sql)End Sub

Vamos a ver tres formas más de trabajar con Bases de Datos:1.- Creación mediante el Administrador Visual de datos.2.- Control mediante el control Data.3.- Control mediante el control ADODC.

1.- Creación mediante el Administrador Visual de datos (Visdata).

Abrimos un nuevo proyecto EXE Standard.

Complementos/Administrador visual de datos... (Está arriba, en la barra de menú)

Archivo/Nuevo.../Microsoft Access/MDB de la versión 7.0.. -------> Nombre: C:\mibase.mdb

Pulsar botón derecho; en el menú emergente pulsar Nueva tabla. Le damos un nombre: mitabla

Agregar campo y vamos agregando los distintos campos que componen la tabla.

Generar tabla.

Ya la tenemos. Ahora pulsamos dos veces sobre el icono de mitabla y podremos Agregar datos.Con el botón derecho del ratón podemos entrar en las Propiedades de la tabla y modificar sus parámetros.(Algunas propiedades son sólo de lectura; el tipo y tamaño no se puede modificar)

Buscar: Podemos Buscar los Registros que tengan en el campo Edad, operador >, Valor 10.

Si queremos volver a editar la tabla, pulsamos con el botón derecho sobre mitabla y luego Diseñar...

Podemos marcar Required, para obligar a rellenar un campo.Si en ValidationRule ponemos ">100" y en ValidationText "Una edad demasiada avanzada", estamos restringiendo a que coloquen una edad mayor de 100 años.

Podemos hacer búsqueda mediante SQL

2.- Control mediante el control Data

Construimos previamente esta base de datos:

Abrimos un nuevo proyecto EXE Standard.

Insertamos en el Formulario un control Data, TextBox y tres Label.

Vamos a Propiedades de Data1DatabaseName = C:\mibase.mdbRecordSource = mitabla

(Puede ocurrir que obtengamos un error debido a que el formato de la base de datos no sea el adecuado, tendremos que convertirla a Access 97, Access2000 o Access2002 según se necesite)

Vamos a las Propiedades de los Text:Text1 y ponemos en DataSource Data1 y en DataField Nombre

Text2 y ponemos en DataSource Data1 y en DataField EdadText3 y ponemos en DataSource Data1 y en DataField Ciudad

Ejecutamos y observamos.

(Más adelante estudiaremos las Propiedades del Data1: BOFAction y EOFAction)

Ahora vamos a gestionar la Base de datos anterior con Botones.

Ahora vamos a agregar 4 Botones y realizar la visualización de las fichas mediante los botones.

Private Sub Command1_Click()Data1.Recordset.MoveFirstEnd Sub

Private Sub Command2_Click()Data1.Recordset.MoveNextEnd Sub

Private Sub Command3_Click()Data1.Recordset.MovePreviousEnd Sub

Private Sub Command4_Click()Data1.Recordset.MoveLastEnd Sub

Ejecutamos y observamos. Cuando superamos el último o el anterior al primero se produce un error.Lo vamos a corregir de ésta manera:

Private Sub Command1_Click()Data1.Recordset.MoveFirstEnd Sub

Private Sub Command2_Click()If Data1.Recordset.EOF Then' Data1.Recordset.AddNewData1.Recordset.MoveLastElseData1.Recordset.MoveNextEnd IfEnd Sub

Private Sub Command3_Click()If Data1.Recordset.BOF ThenData1.Recordset.MoveFirstElseData1.Recordset.MovePreviousEnd IfEnd Sub

Private Sub Command4_Click()Data1.Recordset.MoveLastEnd Sub

 

3.- Control mediante el control ADODC

Abrimos un nuevo proyecto EXE Standard.

Proyecto/Componentes/Microsoft ADO Data Control 6.0 (OLEDB)

Ponemos ese control en el Formulario.                                             

                                                       

Debemos "Conectar" la Base de datos.

Vamos a Propiedades del Adodc1, ConnectionString

Marcamos: Usar cadena de conexión. Pulsamos Generar.

Elegimos el Proveedor: Microsoft Jet 4.0 OLE DB Provider

Le damos a Siguiente >>. Y Seleccionamos la Base de datos con la que vamos a trabajar. Probar.

Ahora vamos de nuevo a Propiedades del Adodc1, RecordSource

Y ponemos 2- adCmdTable y el nombre de la tabla a la que se le aplicarán los comandos: C:\mitabla

Ya hemos preparado el control ADODC1. Ahora vamos a construir el Formulario:

En el DataSource de los Text se pone el nombre del control Adodc1En el Data Field   de los Text se pone el nombre del campo.

Vamos a las Propiedades del:Text1 y ponemos en DataSource Adodc1 y en DataField NombreText2 y ponemos en DataSource Adodc1 y en DataField ApellidoText3 y ponemos en DataSource Adodc1 y en DataField PaisText4 y ponemos en DataSource Adodc1 y en DataField Edad.

Ejecutamos y observamos.

En resumen:- Agregar el control Adocd1- Propiedad ConectionString: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\mibase.mdb

- Propiedad CommandType: 2 adCmdTable- Propiedad RecordSource: mitabla

- Propiedades DataSource y DataField de cada Text

Volviendo al control Adodc1 vemos que tiene estas dos Propiedades:Propiedad BOFAction:BOF significa antes que el primero, o sea, estamos viendo los registros 5, 4, 3, 2, 1, NADA-BOF- Si ponemos MoveFirst permanecerán en el primer registro.- Si ponemos BOF se desactiva el control izquierdo.

Propiedad EOFAction:EOF significa fin del fichero, o sea, estamos viendo los registros 5, 6,7, 8, 9 * FIN-EOF- Si ponemos MoveLast permanecerá en el último registro.- Si ponemos EOF se desactiva el control derecho.- Si ponemos AddNew podremos Agregar nuevos Registros.

Ahora vamos a gestionar la Base de datos anterior con botones.

Agregamos los botones que indica la siguiente figura:

Private Sub Command1_Click()Adodc1.Recordset.Fields("Nombre") = Text1.TextAdodc1.Recordset.Fields("Apellido") = Text2.TextAdodc1.Recordset.Fields("Pais") = Text3.TextAdodc1.Recordset.Fields("Edad") = Text4.TextAdodc1.Recordset.UpdateEnd Sub

Private Sub Command2_Click()Adodc1.Recordset.AddNewEnd Sub

Private Sub Command3_Click()Confirma = MsgBox("¿Quieres borrar esta ficha?", vbYesNo, "Confirmación")If Confirma = vbYes ThenAdodc1.Recordset.DeleteMsgBox "Ficha borrada.", , "Borrado"ElseMsgBox "Cancelación de borrado.", , "No borrado"End If

End Sub

Private Sub Command4_Click()Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""End Sub

Private Sub Command5_Click()If Not Adodc1.Recordset.BOF ThenAdodc1.Recordset.MovePreviousIf Adodc1.Recordset.BOF ThenAdodc1.Recordset.MoveNextEnd IfEnd IfEnd Sub

Private Sub Command6_Click()If Not Adodc1.Recordset.EOF ThenAdodc1.Recordset.MoveNextIf Adodc1.Recordset.EOF ThenAdodc1.Recordset.MovePreviousEnd IfEnd If

End Sub

Private Sub Command7_Click()EndEnd Sub

Ahora vamos a realizar un formulario en donde podamos verimágenes archivadas en una Base de Datos Access

Baja cuadros.zip, son una serie de imágenes que nos pueden valer para éste ejercicio.

Vamos a verlo de tres formas:

Primera forma:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvbpj01/html/gs0102.asp

Creamos una Base de datos Access llamada C:\Cuadros\cuadros2.mdby en ella una tabla llamada mitabla con tres campos:

Nombre (Texto)Apellido (Texto)Cuadro   (Objeto OLE)

Podemos rellenar los elementos de la tabla con varios registros:

Los cuadros se introducen mediante:Botón derecho en el campo Cuadro / Insertar objeto... / Crear desde archivo / Examinar

Vamos a Visual Basic y creamos éste formulario:

Private Conn As ADODB.ConnectionPrivate rs As ADODB.Recordset

Private Sub Form_Load()'Establecer conexiónSet Conn = New ADODB.ConnectionConn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB" & _ ".4.0;Data Source=" & "C:\cuadros\cuadros.mdb" Conn.Open

'Abrir recordsetSet rs = New ADODB.Recordsetrs.Open "mitabla", Conn, _ adOpenKeyset, adLockPessimistic, adCmdTable

Set Text1.DataSource = rsText1.DataField = "Nombre"

Set Text2.DataSource = rsText2.DataField = "Apellido"

Set Image1.DataSource = rsImage1.DataField = "Cuadro"

End Sub

Con esta idea debería funcionar, pero suele fallar porque los componente de Visual Basic no están actualizados con las nuevas Base de datos de Access.

Además tenemos que poner botones u otros elementos para cambiar de registro.

Hay que tener en cuenta que existen varias versiones de Access: Access 97, Access 2000, Acces 2002.... si tenemos el Office XP, podemos convertir a Access a versiones anteriores mediante:

Herramientas / Utilidades de la base de datos / Convertir base de datosAl convertir la base de datos, cambia algunas de sus anteriores características.

En algunas ocasiones, si no tenemos el Visual Basic 6 actualizado, tendremos que convertir bases de datos de Acces XP a Access 97.

 

Segunda forma:

Bajamos éste archivo: VBAccessImag.zip lo descomprimimos y lo ejecutamos, observaremos que el código es un poco enrevesado, pero funciona.

Tercera forma:

Digamos que es mi contribución personal, en este caso no tenemos un campo de Objeto OLE, sino un campo de texto en donde guardamos la localización del archivo gráfico.

Creamos una Base de datos Access llamada C:\cuadros2.mdby en ella una tabla llamada mitabla con tres campos de Texto:

Rellenamos varios Registros:

Observamos que el campo Imagen es de Texto y en él escribimos la ruta de la imagen.

Vamos a Visual Basic y creamos éste formulario:

Dim Con As ADODB.ConnectionDim RS As New ADODB.RecordsetDim strConn As String

' GuardarPrivate Sub Command1_Click()Set Con = CreateObject("ADODB.Connection")Con.Open ("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & "C:\cuadros2.mdb")

nomb = Text1.Textapel = Text2.Textimag = Text3.TextSQL = "INSERT INTO mitabla (Nombre, Apellido, Imagen) "SQL = SQL & " VALUES ("SQL = SQL & "'" & nomb & "',"SQL = SQL & "'" & apel & "',"SQL = SQL & "'" & imag & "')"Con.Execute (SQL)End Sub

' AbrirPrivate Sub Command2_Click()'Set Con = CreateObject("ADODB.Connection")

'Con.Open ("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & "C:\cuadros2.mdb")

'SQL = "SELECT * FROM mitabla "'Set RS = Con.Execute(SQL)'RS.CursorType = adOpenDynamic

Dim Conn As New ADODB.Connection

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="strConn = strConn & "C:\cuadros2.mdb"Conn.ConnectionString = strConnConn.OpenRS.Source = "SELECT * FROM mitabla"RS.CursorType = adOpenDynamicRS.ActiveConnection = ConnRS.Open

End Sub

' SiguientePrivate Sub Command3_Click()Text1.Text = RS("Nombre")Text2.Text = RS("Apellido")Text3.Text = RS("Imagen")Image1.Picture = LoadPicture(RS("Imagen"))RS.MoveNextEnd Sub

' AnteriorPrivate Sub Command4_Click()Text1.Text = RS("Nombre")Text2.Text = RS("Apellido")Text3.Text = RS("Imagen")Image1.Picture = LoadPicture(RS("Imagen"))RS.MovePreviousEnd Sub

Private Sub Form_Load()

End Sub

Éste proyecto lo podemos depurar, evitando que salga un error cuando llega al final del archivo EOF o al principio BOF.

También se podría poner controles Drive, Dir y File, para que no tengamos que poner la ruta de la imagen manualmente, sino que la localizamos mediante éstos controles y la agregamos a la base de datos.

Recordar que podemos visualizar una Base de datos con imágenes mediante los formulario del Access como se vió en el Ejercicio Nº 2 de Base de datos

  Base de datos   Visual Basic   Páginas Web   VBScript   JavaScript   SQL   ASP   PHP   LINUX

 Recuperar Reparar XP  Convierte tu ordenador en   un Osciloscopio  Controla totalmente XP Cambiar la Apariencia  Crackear mi programa  Recuperar las contraseñas de los usuarios  Recuperar los Permisos de los usuarios NTFS  Pasa tus discos y cassettes a CDROM  De MID a WAV   de WAV a MID  Conecta dos ordenadors por puerto paralelo  MACROS en Word  Nociones de Internet  Recuperar

información de un disquete o disco duro  Hacer un Disco Virtual en RAM  Encende-Apaga ordenador Automátcmente Arranque XP MBR - BIOS  Quitar el Botón de Inicio  VIRUS   keyloge r  Puerto 5000  Proteger Carpetas  FORMATEAR NTFS - FAT

  Pasar a PDF           360º  ¡ No Cambies ! Hacer imagen  NetMeeting   eMule   KaZaA  Yahoo+POP3  Winzip   Grabar CD- DVD  Snagit   GIF animados   Eliminar Pop- up  Xara   Flash   Animat Screen   WinHTTrack   VNC   WAP   La hora   AceMacro   Skipe - PalTalk   Troyanos   Cortafuego XP   Otros

 Bloquear Teclas y Teclado XP en CDROM !! MSDOS CDROM Servidor SMTP y Envío MSDOS  Web y Correo Anónimo !!!  Instalar   Win98   después de XP   Game Boy   Redes   Discoduro   Favoritos   Algunas   Página s    C  EyeToy PS2- PC  Ver Televisión  HacerPublicidad  FTP   Varios   Preguntas   Curiosidades   MUY DIVER :-)

 Unas palabras Password Hotmail Números de Serie Crack Páginas Web Resumen Enlaces

Visual Basic-8

<0>

<1>

<2>

<3>

<4>

<5>

<6>

<7>

<8>

<9>

<10>

<11>

<12>

<13>

<14>

Fechas y horas - Inserción de controles en tiempo de ejecución.

Para los paises latino-americanos el primer día de la semana es el Lunes (vbMonday)Para los paises anglosajones el primer día de la semana es el Domingo (vbSunday)

vbSunday 1

vbMonday 2

vbTuesday 3

vbWednesday

4

vbThurday 5

vbFriday 6

vbSaturday 7

Fecha y hora actual MsgBox Now 25/2/03 16:40:24

Fecha actual MsgBox Date 25/2/03

Hora actual MsgBox Time 16:40:24

Formato de horas t = #20:45:32 PM#

Devuelve la hora MsgBox Hour (t) 20

Devuelve el minuto MsgBox Minute (t) 45

Devuelve el segundo MsgBox Second (t) 32

Formato de fecha f = #2/23/2003#   (mes, día, año)

Devuelve el año MsgBox Year (f) 2003

Devuelve el mes MsgBox Month (f) 2

Devuelve el día MsgBox Day (f) 23

Devuelve número del día

MsgBox WeekDay (f, vbMonday) 7

Devuelve nombre del día

MsgBox WeekDayName (f, vbMonday)

Domingo

Pasa a fecha f = DateSerial (2003, 6, 28) f = #6/28/2003#   (mes,día,año)

MsgBox DateSerial (2003, 6, 28)

28/6/2003

Pasa a fecha MsgBox DateValue (f) 28/6/2003

Pasa a horas t = TimeSerial (20, 45, 32) t = #20:45:32#

MsgBox TimeSerial (20,45,32)

20:45:32

Pasa a horas MsgBox TimeValue (t) 20:45:32

Pasa a fecha u hora

CDate (#9/28/2003#)CDate (#4:45:23 PM#)

Formatos de fecha y hora.

MsgBox Format(Time, "Long Time") 16:10:26

MsgBox Format(Time, "Short Time") 16:10

MsgBox Format(Date, "Long Date") miércoles, 23 de julio de 2003

MsgBox Format(Date, "Short Date") 23/7/2003

-- -- ---_mmm

Hora t = #20:45:32# .

Fecha f = #9/28/2003# .

F y H ft = #9/28/2002 20:45:32#

MsgBox Format(t, "hh:mm:ss AMPM") 20:45:32

MsgBox Format(f, "dddd, d mmmm yyyy")

domingo, 28 septiembre 2003

MsgBox Format(f, "dddd, mmm d yyyy")

domingo, sep 28 2003

MsgBox Format(f, "ddd, mmmm d yyyy")

dom, septiembre 28 2003

MsgBox Format(f, "dddd, mmmm d yy")

domingo, septiembre 20 2003

MsgBox Format(f, "d, \de mmmm \de yyyy")

28, de septiembre de 2003

Diferencia entre dos fechas o tiempos.

DateDiff(Intervalo, fechavieja, fechanueva, vbMonday)

Intervalo = "yyyy", "q", "m", "y", "d", "w", "ww", "h", "n", "s"

Añadir fecha

DateAdd(Intervalo, cantidad, Fecha)

Intervalo = "yyyy", "q", "m", "y", "d", "w", "ww", "h", "n", "s"

DateAdd("m", 25, Now) -------> Le añade 25 minutos a la hora actual.

Inserción de controles en tiempo de ejecución.

- Normalmente ponemos los controles mientras se está construyendo el Formulario, esto es insertar los controles en tiempo de diseño.- Tambíén se pueden colocar los controles, (especialmente las matrices de controles) cuando se carga el programa, esto es insertar los controles en tiempo de ejecución.

1.- Creamos un nuevo proyecto EXE estándar y colocamos un TextBox.2.- Al TextBox anterior le ponemos, en sus Propiedades, de nombre (Nombre) = aa y

en su Propiedad Text =    (ponerlo vacio)3.- Marcamos el casillero aa / Botón derecho - Copiar / Botón derecho - Pegar

4.- Pulsamos Sí. El casillero aa se habrá convertido en aa(0) y el otro en aa(1)5.- Eliminamos del Formulario el aa(1), nos quedamos sólo con el aa(0)

6.- Ahora creamos un nuevo control TextBox llamado bb(0) al lado del aa(0), de la misma forma que creamos al aa.

7.- Ponemos el siguiente código...

Dim total

Private Sub aa_Change(Index As Integer)Print IndexIf (aa(Index) > 5) And (aa(Index) < 7) Then bb(Index) = "Bien"If (aa(Index) > 7) And (aa(Index) < 10) Then bb(Index) = "Notable"If aa(Index) < 5 Then bb(Index) = "Insuficiente"End Sub

Private Sub Form_Load()total = InputBox("¿Cuántos alumnos hay en esta clase? ") Dim i As Integer

For i = 1 To total Load aa(i) aa(i).Top = 10 + i * 400 aa(i).Visible = True

Load bb(i) bb(i).Top = 10 + i * 400 bb(i).Visible = True Next i aa(0).Visible = False bb(0).Visible = FalseEnd Sub

El bucle For-Next junto con el Load aa(i) va creando y colocando los controles en el momento de cargar el Formulario. El aa(i).Top situa uno debajo del otro.

Fíjate que a los TextBox: aa y bb no les he puesto el .Text (esto es porque esa es su propiedad por defecto y no es obligatorio ponerla)Es decir se puede poner aa(Index).Text > 5 o símplemente aa(Index) > 5

En este programa, al poner una nota del 0 al 9 en los casilleros de la izquierda, obtenemos su calificación correspondiente en su casillero de la derecha.

MACROS de Visual Basic en el Word de Microsoft (enlace)

Eventos.Formulario con fondo transparente.OLE con Word.

Eventos

Son sucesos que pueden ocurrir durante un programa.

Click Pulsar sobre un control

DblClick Pulsar dos veces sobre un control

KeyDown Bajada de tecla

KeyPress Pulsar una tecla

KeyUp Subida de tecla

MouseDown Bajada del botón del ratón

MouseMove Mover el ratón sobre un control

MouseUp Subida del botón del ratón

Change Cambio del valor del control

LoadEl momento de la carga del Formulario

UnloadEl momento de la descarga del Formulario

ResizeAl cambiar el tamaño del Formulario

 

Veamos algunos ejemplos:

1.- Crear un Proyecto y en las Propiedades del Formulario poner: WindowState ---> 2- Maximize2.- Poner un Botón (Command1)3.- Escribimos las siguientes órdenes en el código del Botón.

El Proyecto dibujará un círculo de color, radio y posición aleatoria, cada vez que hagamos un Click en el Botón.

Private Sub Command1_Click()Randomize TimerX = Rnd * 14000Y = Rnd * 9000r = Rnd * 200c = RGB(Rnd * 255, Rnd * 255, Rnd * 255)Circle (X, Y), r, cEnd Sub

Ahora modificamos el Proyecto:

1.- Borramos los códigos que hay dentro del Command1_Click2.- Ahora cambiamos el Evento a MouseMove

3.- Y copiamos de nuevo el Código.

Private Sub Command1_MouseMove(Button As_ Integer, Shift As Integer, X As Single, Y

As Single)

Randomize TimerX = Rnd * 14000Y = Rnd * 9000r = Rnd * 200c = RGB(Rnd * 255, Rnd * 255, Rnd * 255)Circle (X, Y), r, cEnd Sub

Ahora los círculos se dibujarán cuando Movamos el Ratón sobre el Botón.

Si ponemos el Evento KeyPress, los círculos se dibujarán cuando esté marcada (Focus) el Botón y pulsemos cualquier tecla.

Private Sub Command1_KeyPress(KeyAscii As Integer)Randomize TimerX = Rnd * 14000Y = Rnd * 9000r = Rnd * 200c = RGB(Rnd * 255, Rnd * 255, Rnd * 255)Circle (X, Y), r, cEnd Sub

 

También podrías poner dos eventos a la vez en el mismo Control, por ejemplo haz que en los códigos aparezcan dos Command1, uno con el Evento Click y otro con el Evento KeyPress.

Veamos otro ejemplo:

En este caso el cuando Cambie el Text1 se escribirá el doble.Y cuando Click el Command1 se escribirá el triple.

Private Sub Text1_Change()Text2.Text = 2 * Text1.TextEnd Sub

Private Sub Command1_Click()Text3.Text = 3 * Text1.TextEnd Sub

 

Cambia el evento del Command1 al evento Command1_MouseMove y cuando muevas el ratón sobre el botón saldrá el triple.

Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)Text3.Text = 3 * Text1.TextEnd Sub

Te propongo este ejercicio:

1.- El Formulario debe estar Maximizado cuando se ejecute (WindowState ---> 2- Maximize)2.- Cada vez que hagas un Doble Click sobre el Formulario se deben dibujar circulos aleatorios.3.- Que los círculos estén rellenos. Para ello la Propiedad del Formulario FillStyle ---> 0 -Solidy dentro del código y antes de Circle .......... pones Form1.Fillcolor = c

Formulario con fondo transparente:

Baja éste proyecto: shaped.zip (10 K)

Te situas sobre el control image: ImgJuicy y cambias el dibujo en su Propiedad: Picture.

Si colocas un gif de fondo transparente, tendrá mejor efecto. Gif

 

Otro ejemplo de Formulario transparente: howto_clock_face.zip (21 K)

OLE con Word

Aquí vamos a tratar de ver un documento Word en una aplicación de Visual Basic.

Para ello abrimos un Formulario e insertamos un control OLE1Crea un documento llamado: C:\midocumento.doc

Bajar el archivo: OLEword.zip (2 K)

 

LEN, LEFT, RIGHT y MID. Tablas.

LEN

Cuenta el número de carácteres.

nom = "Juan Antonio"c = LEN (nom)MsgBox c      ------------> 12

LEFT

Devuelve los primeros carácteres de la izquierda de una cadena.

nom = "Juan Antonio"izq = LEFT (nom, 4)         ---------> Juan

Ejemplo:nom = "Juan Antonio"r = ""

For n = 1 To Len(nom)r = r & Left(nom, n) & vbCrLfNext n

MsgBox r

' vbCrLf hace un cambio de línea.

RIGHT

Devuelve los últimos carácteres de la derecha de una cadena.

nom = "Juan Antonio"izq = RIGHT (nom, 7)        ---------> Antonio

Ejemplo:nom = "Juan Antonio"r = ""

For n = 1 To Len(nom)r = r & Right(nom, n) & vbCrLfNext n

MsgBox r

MID

Devuelve los n carácteres después del m.

nom = "Juan Antonio"izq = MID (nom, 2, 3)        ---------> uan

Ejemplos:

nom = "Juan Antonio"r = ""

For n = 1 To Len(nom)x = Mid(nom, n, 1)r = r & x & "-"Next n

MsgBox r          ------> J-u-a-n- -A-n-t-o-n-i-o-

nom = "Juan Antonio"r = ""

For n = Len(nom) To 1 Step -1x = Mid(nom, n, 1)r = r & x & "-"Next n

MsgBox r              ------> o-i-n-o-t-n-A- -n-a-u-J-

Cambia la letra "n" por la "M"

nom = "Juan Antonio"r = ""

For n = 1 To Len(nom)x = Mid(nom, n, 1)If x = "n" Then Mid(nom, n, 1) = "M"Next n

MsgBox nom                -------> JuaM aMtoMio

CHR y ASC son complementarios.

a CHR le ponemos un número y nos devuelve su carácter.a ASC le ponemos un carácter y nos devuleve su número.

CHR (97)  ------> aASC ("b") ------> 98

Codificación.

A cada carácter le suma un número para cambiarlo por el siguente carácter.

Juan ---> Kvbo       En este caso le hemos añadido 1 a cada carácter.

nom = "Juan Antonio"r = ""h = 1            ' El valor de h lo podemos cambiar

For n = 1 To Len(nom)x = Mid(nom, n, 1)r = r & Chr(Asc(x) + h)Next n

MsgBox r

Te propongo el siguiente ejercicio:Elegir un archivo de texto (o de lo que sea). Elegir un número y codificar el archivo. Luego guardarlo

.

Y sabrías hacer este otro... a los caracteres impares le añade un 4 y a los caracteres pares le añade un 7.

TablasSe utiliza para que una variable tenga subíndices:a(0), a(1), a(2), a(3), a(4), a(5), a(6).

Se declara de esta manera:DIM a(6)De esta forma se establece que tendrá 7 subíndices (del 0 .... al 6)

Puede ocurrir que al principio no sepamos los subíndices o dimensiones que va a tener, en este caso la declaramos de esta manera:DIM a ( ) Cuando durante la ejecución del programa conozcamos sus dimensiones, la volvemos a declarar:ReDim a(c)Al volverla a declarar, los datos que tenía guardado los pierde, si no queremos que los pierda, la redimensionamos así:ReDim Preserve a(c)

47.- Guardar y Ver datos en una Tabla de dos dimensiones.

a(1,1) a(1,2)

a(2,1) a(2,2)

a(3,1) a(3,2)

a(4,1) a(4,2)

a(5,1) a(5,2)

a(6,1) a(6,2)

a(7,1) a(7,2)

a(8,1) a(8,2)

a(9,1) a(9,2)

Dim a(10, 2)Dim x, n

Private Sub Command1_Click()x = x + 1a(x, 1) = Text1.Texta(x, 2) = Text2.TextEnd Sub

Private Sub Command2_Click()n = n + 1Text3.Text = a(n, 1)Text4.Text = a(n, 2)End Sub

Private Sub Command3_Click()x = 0n = 0End Sub

Cada vez que damos a Iniciar, tanto X como N se ponen a 0.En el caso de Guardar, se sobreescriben los valores anteriores.En el caso de Ver se vuelven a ver los valores.

Cuando cerramos la aplicación, los valores se pierden, para que no se pierdan tendríamos que guardalos en un archivo en vez de una tabla.

 

Dim a()Dim x, nDim k

Private Sub Command1_Click()x = x + 1a(x, 1) = Text1.Texta(x, 2) = Text2.TextEnd Sub

Private Sub Command2_Click()n = n + 1Text3.Text = a(n, 1)Text4.Text = a(n, 2)End Sub

Private Sub Command3_Click()x = 1n = 1End Sub

Private Sub Command4_Click()k = k + 1ReDim a(k, 2)Text5.Text = kEnd Sub

Private Sub Form_Load()k = 10End Sub

En este otro caso Ampliamos la dimensión de la Tabla al pulsar el Botón "Redimensionar". Borrándose los valores ya almacenados.

Si no queremos que se borren los valores ya almacenados, ReDimensionamos de esta manera: ReDim Preserve a(k,2)

48.- Cambiar letras.

Se introduce una palabra.Se calcula las letras que tiene.Se Redimensiona una matriz con ese número de letras.Se desordenan una cantidad de números.Se guardan las letras según el desorden anterior.

Aparece la palabra anterior con sus letras desordenadas.

Dim a() As IntegerDim palabra

Private Sub Cambia_Click()Randomize Timerpalabra = Text1.Textc = Len(palabra)ReDim a(c)' Vamos a cambiar numeros' Ejemplo: 1,2,3,4 -- > 3,1,4,2For n = 1 To csaca: g = 1 + Int(Rnd * c) For k = 1 To c ' SI Repetido vuelve a saca If a(k) = g Then GoTo saca Next ka(n) = g' Print g;"-";Next nText1.Text = ""Text2.Text = ""For m = 1 To cText2.Text = Text2.Text & Mid(palabra, a(m), 1)Next m

End Sub

Private Sub Probar_Click()If Text3.Text = palabra Then

q = MsgBox("Has acertado", , "Enhorabuena")Elseq = MsgBox("No has acertado", , "Repite")End IfEnd Sub

Private Sub Salir_Click()EndEnd Sub

Private Sub Solucion_Click()Text1.Text = palabraEnd Sub

 

Carpetas y Archivos

Carpetas

Comprobar si la carpeta "C:\Europa" existe.En caso que exista que salga un mensaje.En caso que no exista que se cree la carpeta y varias subcarpetas.

Private Sub Command1_Click()

Carp = Dir("C:\Europa", vbDirectory)

If Carp <> "" ThenMsgBox ("La Carpeta Existe")

ElseMsgBox ("La Carpeta No Existe, la voy a crear.")MkDir ("C:\Europa")MkDir ("C:\Europa\España")MkDir ("C:\Europa\Italia")MkDir ("C:\Europa\Francia")MsgBox ("Ya han sido creadas. Consulta C:")End If

End Sub

Borrar carpetas.

Antes de borrar una carpeta debemos borrar su contenido.

Para borrar archivos: Kill *.*Para borrar carpetas: Rmdir

Private Sub Command2_Click()

RmDir ("C:\Europa\España")RmDir ("C:\Europa\Italia")RmDir ("C:\Europa\Francia")RmDir ("C:\Europa")

End Sub

Archivos.

Crear un archivo y escribir datos. (Machaca los datos anteriormente escritos) (Output)

Private Sub Command1_Click()

Nombre = "Juan Antonio"DNI = "12345678"

Open "C:\borrame.txt" For Output As #1Write #1, Nombre, DNIClose #1

End Sub

Pulsa varias veces el Botón. Consulta C:\borrame.txt. Cambia Write por Print

Crear un archivo y añadir datos. (Append)

Private Sub Command2_Click()

Nombre = "Juan Antonio"DNI = "12345678"

Open "C:\borrame.txt" For Append As #1Print #1, Nombre, DNIClose #1

End Sub

Pulsa varias veces el Botón. Consulta C:\borrame.txt.

Introducir datos.

Private Sub Command1_Click()

Nombre = Text1.TextDNI = Text2.Text

Open "C:\borrame.txt" For Append As #1Write #1, Nombre, DNIClose #1

End Sub

' Insertamos los datos con Write' Prueba Print #1 Nombre; DNI;' El ; une las palabras.' Consulta el archivo

Visualizar datos.

Private Sub Command1_Click()CloseOpen "C:\borrame.txt" For Input As #1End Sub

Private Sub Command2_Click()

If EOF(1) ThenMsgBox ("Fin de archivo")

ElseInput #1, Nombre, DNIText1.Text = NombreText2.Text = DNIEnd If

End Sub

Si en vez de poner: Input #1, Nombre, DNIPonemos: Line Input #1, NombreSaldrá cada renglón.

Comprobar

Comprobar si el archivo C:\borrame.txt existe.En caso que exista que se muestre.En caso que no exista que se cree.

En las Propiedades del Text1 debemos poner:

Multiline = TrueScrollBars = 2 - Vertical

Private Sub Command1_Click()Arch = Dir("C:\borrame.txt", vbFile)

If Arch <> "" ThenMsgBox ("El archivo Existe")Open "C:\borrame.txt" For Input As #1

Do While Not EOF(1)Line Input #1, renglontodo = todo & renglon & vbCrLfLoopText1.Text = todo

ElseMsgBox ("No existe, voy a crearlo.")Open "C:\borrame.txt" For Output As #1MsgBox ("Ya está creado.")End If

End Sub

Tamaño de un archivo en bytes y fecha de creación.

Private Sub Command1_Click()longitud = FileLen("C:\borrame.txt")Print longitudfecha = FileDateTime("C:\borrame.txt")Print fechaEnd Sub

Atributos de un archivo.

vbNormal                   0    Normal vbReadOnly               1    Sólo lecturavbHidden                   2    OcultovbSystem                   4    SistemavbDirectory              16   DirectoriovbArchive                32   El archivo ha cambiado desde su última copia

Poner atributos:SetAttr "C:\borrame.txt", vbHidden + vbReadOnly

Consultar atributos:

atri = GetAttr("C:\borrame.txt")

atri será igual a 1 + 2 = 3

Quitar atributos:

SetAttr "C:\borrame.txt", 0

Base de datos con fichero.

Otra base de datos mediante control de archivos: Ficherobase.exe (28 K)

Código fuente: Ficherobase.zip ( 2 K)

Construción de un navegador de Internet.

Añadimos al cuadro de herramientas el control Microsoft Internet Controls:

Proyecto/Componentes/Controles/Microsoft Internet Controls.

Lo insertamos (WebBrowser1) en el Formulario y lo agrandamos un poco.

Situamos un Label con la Propiedad Caption en blanco.

Dentro del Label situamos 5 Botones. Ponemos en blanco Caption.Ponemos Sytle en 1. GraphicalEn cada Picture situamos uno de los dibujos que puedes bajar de aquí: web.zip (3 K)

Añadimos otro Label que pone Dirección y un TextBox.

Quedará así:

Private Sub Command1_Click()' AtrásOn Error Resume NextWebBrowser1.GoBackText1.Text = WebBrowser1.LocationURL ' depurarEnd Sub

Private Sub Command2_Click()' AdelanteOn Error Resume NextWebBrowser1.GoForwardText1.Text = WebBrowser1.LocationURL ' depurarEnd Sub

Private Sub Command3_Click()' Inicio al disco CText1.Text = "file://C:"WebBrowser1.Navigate Text1.TextEnd Sub

Private Sub Command4_Click()' ActualizarWebBrowser1.RefreshEnd Sub

Private Sub Command5_Click()' DetenerWebBrowser1.StopEnd Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)If KeyAscii = 13 And Text1.Text <> "" Then WebBrowser1.Navigate Text1.Text' KeyAscii= 13 Equivale a la tecla Enter' <> "" Equivale a: no-vacíoEnd Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Podemos mejorarlo poniendo un control StatusBar ' (Proyectos/Componentes/Microsoft Windows Common Controls 6.0' y luego insertamos un StatusBar

Private Sub WebBrowser1_DownloadBegin()StatusBar1.Panels(1).Text = "Cargando Página..."End Sub

Private Sub WebBrowser1_DownloadComplete()StatusBar1.Panels(1).Text = "Listo"End Sub

Le das las dimensiones apropiadas a los controles, e incluso puedes hacer que los controles se adapten a las dimensiones del Formulario.

Puedes hacer que el Formulario se presente Maximizado cuando se cargue.

Bájate éste navegador a pantalla completa. Internet.exe (28 KB)

Comprobarás que cuando el enlace sale a otra ventana, ésta sale con el Internet Explorer, pero eso no es un problema del navegador, sino que tu sistema operativo está configurado para que los archivos htm se abran con ésta últama aplicación. Ésto lo puedes corregir mediante:Mi PC / Herramientas / Opciones de carpetas / Tipos de archivos.

Y Modificar el programa que abre .HTM

Información de la BIOS

 

Private Sub Command1_Click()On Error Resume NextstrComputer = "."Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery("Select * from Win32_BIOS", , 48)For Each objItem In colItems MsgBox "BiosCharacteristics: " & objItem.BiosCharacteristics MsgBox "BIOSVersion: " & objItem.BIOSVersion MsgBox "BuildNumber: " & objItem.BuildNumber MsgBox "Caption: " & objItem.Caption MsgBox "CodeSet: " & objItem.CodeSet MsgBox "CurrentLanguage: " & objItem.CurrentLanguage MsgBox "Description: " & objItem.Description MsgBox "IdentificationCode: " & objItem.IdentificationCode MsgBox "InstallableLanguages: " & objItem.InstallableLanguages MsgBox "InstallDate: " & objItem.InstallDate MsgBox "LanguageEdition: " & objItem.LanguageEdition MsgBox "ListOfLanguages: " & objItem.ListOfLanguages MsgBox "Manufacturer: " & objItem.Manufacturer MsgBox "Name: " & objItem.Name MsgBox "OtherTargetOS: " & objItem.OtherTargetOS MsgBox "PrimaryBIOS: " & objItem.PrimaryBIOS MsgBox "ReleaseDate: " & objItem.ReleaseDate MsgBox "SerialNumber: " & objItem.SerialNumber MsgBox "SMBIOSBIOSVersion: " & objItem.SMBIOSBIOSVersion MsgBox "SMBIOSMajorVersion: " & objItem.SMBIOSMajorVersion MsgBox "SMBIOSMinorVersion: " & objItem.SMBIOSMinorVersion MsgBox "SMBIOSPresent: " & objItem.SMBIOSPresent MsgBox "SoftwareElementID: " & objItem.SoftwareElementID MsgBox "SoftwareElementState: " & objItem.SoftwareElementState MsgBox "Status: " & objItem.Status MsgBox "TargetOperatingSystem: " & objItem.TargetOperatingSystem MsgBox "Version: " & objItem.VersionNextEnd Sub

Otro: BiosInfo.zip (6 K)

 

Abrir y cerrar puerta del CDROM

Private Declare Function mciSendString Lib "winmm.dll" _Alias "mciSendStringA" (ByVal lpstrCommand As String, _ByVal lpstrReturnString As String, ByVal uReturnLength As Long,_ByVal hwndCallback As Long) As Long

' Las tres líneas anteriores mejor que vayan en un sólo renglón, quitar _

Sub CDControl(action As Boolean)If action Then'Abrir CDROMretvalue = mciSendString("set CDAudio door open", returnstring, 127, 0)Else'Cerrar CDROMretvalue = mciSendString("set CDAudio door closed", returnstring, 127, 0)End IfEnd SubPrivate Sub Command1_Click()CDControl TrueEnd Sub

Private Sub Command2_Click()CDControl FalseEnd Sub

 

Activar una aplicación que está en la misma carpeta que el programa de Visual Basic

Private Sub Command1_Click()a = App.Path & "\calc.exe"m = Shell(a, 1)End Sub

Excel y Visual Basic

 

Private Sub Command1_Click()Dim xls As Object

Set xls = CreateObject("Excel.Application")xls.Visible = Falsexls.Workbooks.Open "c:\excelvb\source.xls"xls.Range("a1").Value = Text1.TextText2.Text = xls.Range("a3").ValueEnd Sub

Private Sub Command2_Click()

Archivo = App.Path & "\source.xls"Set xls = CreateObject("Excel.Application")

xls.Workbooks.Open Archivo

xls.Visible = False

xls.Worksheets("Hoja1").Activate

xls.Worksheets("Hoja1").Range("A1").Value = 666xls.Worksheets("Hoja1").Range("A2").Value = 777xls.Worksheets("Hoja1").Range("A3").Value = 888

'Para leer' ValorCelda=pxls.Worksheets("Hoja1").Range("A3").Value

xls.ActiveWorkbook.Close SaveChanges:=True

End Sub

 

Introducir y leer datos de una celdilla de Excel

Tenemos una Hoja de Cálculo Excel llamada Ejemplo.xls y ubicada en la misma carpeta que la aplicación de Visual Basic.

En caso que esté en otra carpeta pondríamos: Archivo = "C:\Carpeta\Ejemplo.xls"

Elegimos una Hoja (o Sheet), un rango, por ejemplo: A3 y un valor.Al pulsar el botón el valor se insertará en la celda elegida o bien se leerá de ella, según el botón pulsado.

Private Sub Command1_Click()h = Text1.Textl = Text2.Textn = Text3.TextValor = Text4.Texthoja = "Hoja" & CStr(h)rango = Text2.Text & Text3.Text

Archivo = App.Path & "\Ejemplo.xls"Set xls = CreateObject("Excel.Application")

xls.Workbooks.Open Archivoxls.Visible = False

xls.Worksheets(hoja).Activate

xls.Worksheets(hoja).Range(rango).Value = Valor

xls.ActiveWorkbook.Close SaveChanges:=True

MsgBox ("Dato introducido.")End Sub

Private Sub Command2_Click()h = Text5.Textl = Text6.Textn = Text7.Text

hoja = "Hoja" & CStr(h)rango = Text6.Text & Text7.Text

Archivo = App.Path & "\Ejemplo.xls"Set xls = CreateObject("Excel.Application")

xls.Workbooks.Open Archivoxls.Visible = False

xls.Worksheets(hoja).Activate

Text8.Text = xls.Worksheets(hoja).Range(rango).Value

xls.ActiveWorkbook.Close

MsgBox ("Dato leido.")End Sub