Upload
cindy-esquivel
View
100
Download
11
Embed Size (px)
Citation preview
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
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)
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