Bueno ando trabajando en un proyecto para mi escuela, la idea es que hay un centro de computo con 50 PCs, la primera parte del proyecto esta enfocada a la comodidad de los alumnos.
Actualmente llegan, tienen que preguntar a la encargada si hay PCs disponibles y se anotan en un cuaderno, la idea es que haya una PC donde llegen y se muestren las PCs disponibles, hagan doble click en la que se quieren registrar, llenen un formulario. Al hacer click en Registar! se comprobará que sus apellidos y nombre coincidan con el de su N° de cuenta de ser así registra el N° de cuenta, N° de PC y hora en que se registro.
Bueno aqui pongo los codigos:
UPDATE 1: Ya empece a manejar matrices, pero aun no funciona como debería =S
principal.frm(Form1):
Public statuspc As Integer
Private Sub Form_Load()
If App.PrevInstance = True Then
MsgBox "El Programa ya se esta ejecutando", 0 + 48, "Error"
End
End If
End Sub
Private Sub pc_Click(Index As Integer)
statuspc = i
i = statuspc
If Label(i).Caption = "DISPONIBLE" Then
Unload principal
registro.Show
Else
MsgBox "Elige otra computadora, está ya esta ocupada.", vbCritical, "Error"
End If
End Sub
registro.frm(Form2):
Private Sub Form_Load()
Command1.Enabled = False
End Sub
Private Sub datos_Change(Index As Integer)
If datos(Index).Text <> "" Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If
End Sub
Private Sub Command1_Click()
MsgBox "Registrado. Disfruta tu estancia", vbInformation, "Registro exitoso"
Call Ocuparpc
'Registro BD
Call Limpiardatos
Unload registro
principal.Show
End Sub
Private Sub Command2_Click()
Call Limpiardatos
Unload registro
principal.Show
End Sub
funciones.bas(module1):
Public Sub Limpiardatos()
registro.datos(Index).Text = ""
End Sub
Function Bloquearpc()
End Function
Function Ocuparpc()
For i = 0 To principal.Label(Index)
principal.Label(i).Caption = "NO DISPONIBLE"
Next i
End Function
Como se podran cuenta soy muy nuevo en visual basic :(, aparte aquí les dejo el source:
http://rapidshare.com/files/291290861/Centro_de_computo.rar ----> Actualizado al Update 1 ;)
De ante mano, mil gracias por su ayuda y consejos!!
Para yo los pics del principal.frm(Form1) usaria una matriz de controles.
Yo en tu lugar en el registro.frm(Form2) usaria una clase para subclasificar todo esos eventos _Change o mas facil aun una matriz de controles.
Quitaria los Sleep() que de nada sirven solo estan de màs hasta donde puedo ver.
Solo te digo lo que veo a simple vista de lo que posteaste.
un saludo
Dulces Lunas!¡.
Cita de: ░▒▓BlackZeroҖ▓▒░ en 5 Octubre 2009, 13:50 PM
Para yo los pics del principal.frm(Form1) usaria una matriz de controles.
Yo en tu lugar en el registro.frm(Form2) usaria una clase para subclasificar todo esos eventos _Change o mas facil aun una matriz de controles.
Quitaria los Sleep() que de nada sirven solo estan de màs hasta donde puedo ver.
Solo te digo lo que veo a simple vista de lo que posteaste.
un saludo
Dulces Lunas!¡.
Yo tomaré en cuenta cada idea, solo que las tengo que investigar porque soy muy newbie en, programación y no entendí que quisiste decir!
Cita de: Murd3r3r 0f daT4 en 5 Octubre 2009, 06:06 AM
Bueno ando trabajando en un proyecto para mi escuela, la idea es que hay un centro de computo con 50 PCs, la primera parte del proyecto esta enfocada a la comodidad de los alumnos.
Actualmente llegan, tienen que preguntar a la encargada si hay PCs disponibles y se anotan en un cuaderno, la idea es que haya una PC donde llegen y se muestren las PCs disponibles, hagan doble click en la que se quieren registrar, llenen un formulario. Al hacer click en Registar! se comprobará que sus apellidos y nombre coincidan con el de su N° de cuenta de ser así registra el N° de cuenta, N° de PC y hora en que se registro.
Bueno aqui pongo los codigos:
principal.frm(Form1):
Public statuspc As Integer
Private Sub Form_Load()
Dim running As Integer
running = App.PrevInstance
If running <> 0 Then
MsgBox "El Programa ya se esta ejecutando", 0 + 48, "News"
End
End If
End Sub
Private Sub pc1_Click()
statuspc = 1
If Label1.Caption = "DISPONIBLE" Then
Unload principal
registro.Show
Else
MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
End If
End Sub
Private Sub pc2_Click()
statuspc = 2
If Label2.Caption = "DISPONIBLE" Then
Unload principal
registro.Show
Else
MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
End If
End Sub
Private Sub pc3_Click()
statuspc = 3
If Label3.Caption = "DISPONIBLE" Then
Unload principal
registro.Show
Else
MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
End If
End Sub
Private Sub pc4_Click()
statuspc = 4
If Label4.Caption = "DISPONIBLE" Then
Unload principal
registro.Show
Else
MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
End If
End Sub
Private Sub pc5_Click()
statuspc = 5
If Label5.Caption = "DISPONIBLE" Then
Unload principal
registro.Show
Else
MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
End If
End Sub
registro.frm(Form2):
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form_Load()
Command1.Enabled = False
End Sub
Private Sub apellidop_Change()
If apellidop.Text <> "" And apellidom.Text <> "" And nombre.Text <> "" And cuenta.Text <> "" Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If
End Sub
Private Sub apellidom_Change()
If apellidop.Text <> "" And apellidom.Text <> "" And nombre.Text <> "" And cuenta.Text <> "" Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If
End Sub
Private Sub nombre_Change()
If apellidop.Text <> "" And apellidom.Text <> "" And nombre.Text <> "" And cuenta.Text <> "" Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If
End Sub
Private Sub cuenta_Change()
If apellidop.Text <> "" And apellidom.Text <> "" And nombre.Text <> "" And cuenta.Text <> "" Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If
End Sub
Private Sub Command1_Click()
MsgBox "Registrado. Disfruta tu estancia", vbInformation, "Registro exitoso"
Sleep 250
Call Ocuparpc
Sleep 250
'Registro BD
Sleep 250
apellidop.Text = ""
apellidom.Text = ""
nombre.Text = ""
cuenta.Text = ""
Sleep 250
Unload registro
principal.Show
End Sub
Private Sub Command2_Click()
apellidop.Text = ""
apellidom.Text = ""
nombre.Text = ""
cuenta.Text = ""
Sleep 250
Unload registro
principal.Show
End Sub
funciones.bas(module1):
Function Limpiaregistro()
End Function
Function Bloquearpc()
End Function
Function Ocuparpc()
Select Case principal.statuspc
Case 1
principal.Label1.Caption = "NO DISPONIBLE"
Case 2
principal.Label2.Caption = "NO DISPONIBLE"
Case 3
principal.Label3.Caption = "NO DISPONIBLE"
Case 4
principal.Label4.Caption = "NO DISPONIBLE"
Case 5
principal.Label5.Caption = "NO DISPONIBLE"
End Select
End Function
Como se podran cuenta soy muy nuevo en visual basic :(, aparte aquí les dejo el source:
http://rapidshare.com/files/288825115/Centro_de_computo.rar
De ante mano, mil gracias por su ayuda y consejos!!
Yo le cambiaria alguinas cosas. pero me quedo una duda
vos sos el que publico de como cambiar a "NO DISPONIBLE" en www.forosdelweb.com (http://www.forosdelweb.com) por que ese cdigo es muy similar (Una parte) a la que le aonsegue a un usuario de FDW jaja
La verdad mire solo las primeras lineas por que ahora me tengo que ir a estudiar a simple vista yo reemplazaria
esto
Private Sub Form_Load()
Dim running As Integer
running = App.PrevInstance
If running <> 0 Then
MsgBox "El Programa ya se esta ejecutando", 0 + 48, "News"
End
End If
End Sub
por esto que es lo mismo pero mas corto;
Private Sub Form_Load()
If App.PrevInstance = True Then
MsgBox "El Programa ya se esta ejecutando", 0 + 48, "News"
End
End If
End Sub
Ba solo ahorras 2 lineas pero me parece innecesari crear esa variable...
Hola, ese codigo se puede achicar un 80 %, creando matrices de controles y funciones, si no sabes lo que es eso, entonces ya no es parte nuestra enseñar eso que seria lo basico, te vas a tener que leer inevitablemente un manual de visual basic.
saludos.
Cita de: agus0 en 5 Octubre 2009, 21:05 PM
La verdad mire solo las primeras lineas por que ahora me tengo que ir a estudiar a simple vista yo reemplazaria
esto
Private Sub Form_Load()
Dim running As Integer
running = App.PrevInstance
If running <> 0 Then
MsgBox "El Programa ya se esta ejecutando", 0 + 48, "News"
End
End If
End Sub
por esto que es lo mismo pero mas corto;
Private Sub Form_Load()
If App.PrevInstance = True Then
MsgBox "El Programa ya se esta ejecutando", 0 + 48, "News"
End
End If
End Sub
Ba solo ahorras 2 lineas pero me parece innecesari crear esa variable...
Ok, tienes toda la razón!
@agus0
Si ese era yo!!
Cita de: seba123neo en 6 Octubre 2009, 02:00 AM
Hola, ese codigo se puede achicar un 80 %, creando matrices de controles y funciones, si no sabes lo que es eso, entonces ya no es parte nuestra enseñar eso que seria lo basico, te vas a tener que leer inevitablemente un manual de visual basic.
saludos.
Hoy empece a leer sobre matrices!! Vere que más hago!
Ya estudiando y aplicando matrices ya mejoró, pero tengo una duda como quedaría esta parte sobre todo: principal.Label(1 To 48).Caption = "NO DISPONIBLE"
El codigo ya me quedo así:
Function Ocuparpc()
For i = 0 To statuspc(48)
If i = statuspc(48) Then
principal.Label(1 To 48).Caption = "NO DISPONIBLE"
End If
Next i
End Function
Esa aprte que comente arriba no funciona ni idea de como hacerla =S
Antes que nada debes considerar 49 Estados ya que de 0-48 hay 49
Una recomendacion statuspc() ponlo en estado boleano o tipo boolean
dim statuspc(48) as boolean
public sub Ocuparpc()
For i = 0 To ubound(statuspc)
If statuspc(i) Then
principal.Label(i).Caption = "DISPONIBLE"
else
principal.Label(i).Caption = "NO DISPONIBLE"
End If
Next i
End sub
Otra forma de IF(), es lo mismo que arriba
dim statuspc(48) as boolean
public sub Ocuparpc()
For i = 0 To ubound(statuspc)
principal.Label(i).Caption = iif(statuspc(i),"DISPONIBLE","NO DISPONIBLE")
Next i
End sub
P.D.: Usa function para procesar informacion y devolver un valor y Sub para realizar procesos sin devolver ningun valor por medio del mismo.
Usa private, public, friend segùn se requiera, pero declaralos, estos definen el accceso a dichos procesos/funciones desde exterior, se comprende que si no son declarados seria private por default pero por prioridad seria mejor derarlos.
Dulces Lunas!¡.
Cita de: ░▒▓BlackZeroҖ▓▒░ en 6 Octubre 2009, 05:58 AM
Antes que nada debes considerar 49 Estados ya que de 0-48 hay 49
Una recomendacion statuspc() ponlo en estado boleano o tipo boolean
dim statuspc(48) as boolean
public sub Ocuparpc()
For i = 0 To ubound(statuspc)
If statuspc(48) Then
principal.Label(i).Caption = "DISPONIBLE"
else
principal.Label(i).Caption = "NO DISPONIBLE"
End If
Next i
End sub
Otra forma de IF(), es lo mismo que arriba
dim statuspc(48) as boolean
public sub Ocuparpc()
For i = 0 To ubound(statuspc)
principal.Label(i).Caption = iif(statuspc(48),"DISPONIBLE","NO DISPONIBLE")
Next i
End sub
P.D.: Usa function para procesar informacion y devolver un valor y Sub para realizar procesos sin devolver ningun valor por medio del mismo.
Usa private, public, friend segùn se requiera, pero declaralos, estos definen el accceso a dichos procesos/funciones desde exterior, se comprende que si no son declarados seria private por default pero por prioridad seria mejor derarlos.
Dulces Lunas!¡.
Pues mira que use varios codigos así pero siempre me da el mismo error =S
"Method or data member not found" y me marca esta zona:
.Label
todavia no entiendo bien la logica del programa, pero bue :xD...entonces
statuspc(48) deberia ser
statuspc(49) si son 50 computadoras y la funcion la deberias pasar del modulo y ponerla directamente en el formulario.y por favor indentar el codigo fuente.
Cita de: ░▒▓BlackZeroҖ▓▒░ en 6 Octubre 2009, 05:58 AM
dim statuspc(48) as boolean
public sub Ocuparpc()
For i = 0 To ubound(statuspc)
principal.Label(i).Caption = iif(statuspc(48),"DISPONIBLE","NO DISPONIBLE")
Next i
End sub
no deberia reemplazarse el 48 del iif por la "i", sino siempre chequearia el valor de (48) no?
saludos.
Cita de: Murd3r3r 0f daT4 en 6 Octubre 2009, 06:09 AM
Pues mira que use varios codigos así pero siempre me da el mismo error =S "Method or data member not found" y me marca esta zona: .Label
creaste la matriz de controles de labels ??
Cita de: seba123neo en 6 Octubre 2009, 06:16 AM
todavia no entiendo bien la logica del programa, pero bue :xD...entonces statuspc(48) deberia ser statuspc(49) si son 50 computadoras y la funcion la deberias pasar del modulo y ponerla directamente en el formulario.y por favor indentar el codigo fuente.
Cita de: ░▒▓BlackZeroҖ▓▒░ en 6 Octubre 2009, 05:58 AM
dim statuspc(48) as boolean
public sub Ocuparpc()
For i = 0 To ubound(statuspc)
principal.Label(i).Caption = iif(statuspc(48),"DISPONIBLE","NO DISPONIBLE")
Next i
End sub
no deberia reemplazarse el 48 del iif por la "i", sino siempre chequearia el valor de (48) no?
saludos.
jajaja se me paso xd, me ire a dormir ando muy desvelado ya jajaja.
Dulces Lunas!!¡.
Cita de: seba123neo en 6 Octubre 2009, 06:19 AM
Cita de: Murd3r3r 0f daT4 en 6 Octubre 2009, 06:09 AM
Pues mira que use varios codigos así pero siempre me da el mismo error =S "Method or data member not found" y me marca esta zona: .Label
creaste la matriz de controles de labels ??
Claro la matriz la he definido =S, he allí lo raro de que me marque ese error!
Haber prueba con este Ejemplo
Se nesesita Dibujar en un Form
1 CommandButton con nombre = Command1
1 Label Con Nombre = Label Propiedad index = 0
Option Explicit
Dim StatusPC() As Boolean
Private Sub Command1_Click()
Dim i As Integer
For i = 0 To UBound(StatusPC)
' // Simulo las entradas de estado
StatusPC(i) = Round(1 * Rnd())
' // Visualiso dichas entradas
Label(i) = i & " " & IIf(StatusPC(i), "DISPONIBLE", "NO DISPONIBLE")
Next i
End Sub
' // Esto solo lo hago por que no deseo estar dibujando _
y posicionando cada label manualmente
Private Sub Form_Load()
Dim i As Integer
Dim SumaIzquierda As Long, TopLabel As long
Const CantLabel = 80
Const Filas = 10
ReDim StatusPC(CantLabel - 1)
BackColor = vbBlack
With Command1
.Top = 255
.Left = 255
.Caption = "Reiniciar Simulaciòn de Estados"
End With
With Label(0)
.Left = 255
.Top = Command1.Top + Command1.Height + 250
.BackColor = vbBlack
.ForeColor = vbWhite
End With
SumaIzquierda = 255
For i = 1 To CantLabel - 1
Load Label(i)
SumaIzquierda = IIf(i Mod Filas = 0, Label(i).Left + Label(i).Width + 255 + SumaIzquierda, SumaIzquierda)
TopLabel = IIf(i Mod Filas = 0, Label(0).Top, Label(i - 1).Top + Label(i - 1).Height + 25)
With Label(i)
.Top = TopLabel
.Left = SumaIzquierda
.Caption = ""
.BackColor = vbBlack
.ForeColor = vbWhite
.Visible = True
End With
Next i
Width = SumaIzquierda + Label(i - 1).Width + 255
Height = Label(Filas - 1).Top + Label(Filas).Height * 4
End Sub
P.D.: El codigo te generara los demàs Label segun se deseen.
Dulces Lunas!¡.
Cita de: ░▒▓BlackZeroҖ▓▒░ en 6 Octubre 2009, 22:41 PM
Haber prueba con este Ejemplo
Se nesesita Dibujar en un Form
1 CommandButton con nombre = Command1
1 Label Con Nombre = Label Propiedad index = 0
Option Explicit
Dim StatusPC() As Boolean
Private Sub Command1_Click()
Dim i As Integer
For i = 0 To UBound(StatusPC)
' // Simulo las entradas de estado
StatusPC(i) = Round(1 * Rnd())
' // Visualiso dichas entradas
Label(i) = i & " " & IIf(StatusPC(i), "DISPONIBLE", "NO DISPONIBLE")
Next i
End Sub
' // Esto solo lo hago por que no deseo estar dibujando _
y posicionando cada label manualmente
Private Sub Form_Load()
Dim i As Integer
Dim SumaIzquierda As Long, TopLabel As long
Const CantLabel = 80
Const Filas = 10
ReDim StatusPC(CantLabel - 1)
BackColor = vbBlack
With Command1
.Top = 255
.Left = 255
.Caption = "Reiniciar Simulaciòn de Estados"
End With
With Label(0)
.Left = 255
.Top = Command1.Top + Command1.Height + 250
.BackColor = vbBlack
.ForeColor = vbWhite
End With
SumaIzquierda = 255
For i = 1 To CantLabel - 1
Load Label(i)
SumaIzquierda = IIf(i Mod Filas = 0, Label(i).Left + Label(i).Width + 255 + SumaIzquierda, SumaIzquierda)
TopLabel = IIf(i Mod Filas = 0, Label(0).Top, Label(i - 1).Top + Label(i - 1).Height + 25)
With Label(i)
.Top = TopLabel
.Left = SumaIzquierda
.Caption = ""
.BackColor = vbBlack
.ForeColor = vbWhite
.Visible = True
End With
Next i
Width = SumaIzquierda + Label(i - 1).Width + 255
Height = Label(Filas - 1).Top + Label(Filas).Height * 4
End Sub
P.D.: El codigo te generara los demàs Label segun se deseen.
Dulces Lunas!¡.
Primero, muchisimas gracias por andar ayudando =D, y probe ese codigo y no me funciono al 100%, pero aun así muchas gracias sigo investigando y ya pase casi todos los controles a matrices =D