|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Jose Arriagada
Páginas: 1 ... 13 14 [15]
351
« en: Jueves 28 de Noviembre de 2002, 22:00 »
La solucion puede ser de maneras distintas: 1). Suponiendo que leeras un dato del tipo: i). Caracter: Puedes definir el largo a recepcionar en tiempo de diseño, usando la propiedad maxlength del control text ii) Numerico o fecha: Puedes usar el control masked (si no lo tienes, puede cargarlo en Proyecto->Componentes->Examinar y busca el archivo MSMASK23.OCX en la carpeta System) y en la propiedad format seleccionas el tipo de format y en la propiedad mask le das la mascara a leer: por ejemplo: si son 6 numeros, puedes colocar ###,### o si es fecha ##:##:##
2).- Puedes colocar un text y colocar el largo en maxlength y el siguiente codigo en keypress
Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then 'si quieres leer un numero usa If IsNumeric(Text1) Then 'colocar codigo Else Text1.Text = "" Text1.SetFocus End If 'si quieres leer fecha, usa el siguiente codigo que lo reemplazas por el anterior ' If IsDate(Text1) Then ' 'codigo para la fecha ' Else ' Text1.Text = "" ' Text1.SetFocus ' End If End If End Sub
Espero te sirva
353
« en: Jueves 28 de Noviembre de 2002, 21:05 »
Adjunto: - Iconos que requieres (espero que sean estos) - Bajate el MicroAngelo que es un programa para hacer y editar iconos, es lo mejor para solucionar este y otros problemas que tengas con iconos.
354
« en: Jueves 28 de Noviembre de 2002, 20:34 »
El codigo que te adjunto, lo debes poner completo en un form: Para ello, agrega un combobox y ponle de nombre cboDSNList y te entregara todos los DNS de tu equipo.
Solo tienes que agregar el codigo que requieras para buscar un DNS en particular, eso es pega facil, espero te sirva.
Option Explicit Private Declare Function SQLDataSources Lib "ODBC32.DLL" (ByVal henv&, ByVal fDirection%, ByVal szDSN$, ByVal cbDSNMax%, pcbDSN%, ByVal szDescription$, ByVal cbDescriptionMax%, pcbDescription%) As Integer Private Declare Function SQLAllocEnv% Lib "ODBC32.DLL" (env&) Const SQL_SUCCESS As Long = 0 Const SQL_FETCH_NEXT As Long = 1
Private Sub Form_Load() GetDSNsAndDrivers End Sub
Sub GetDSNsAndDrivers() Dim i As Integer Dim sDSNItem As String * 1024 Dim sDRVItem As String * 1024 Dim sDSN As String Dim sDRV As String Dim iDSNLen As Integer Dim iDRVLen As Integer Dim lHenv As Long
On Error Resume Next If SQLAllocEnv(lHenv) <> -1 Then Do Until i <> SQL_SUCCESS sDSNItem = Space$(1024) sDRVItem = Space$(1024) i = SQLDataSources(lHenv, SQL_FETCH_NEXT, sDSNItem, 1024, iDSNLen, sDRVItem, 1024, iDRVLen) sDSN = Left$(sDSNItem, iDSNLen) sDRV = Left$(sDRVItem, iDRVLen) If sDSN <> Space(iDSNLen) Then cboDSNList.AddItem sDSN End If Loop End If End Sub
355
« en: Jueves 28 de Noviembre de 2002, 20:28 »
Te adjunto rutinas que hacen ambas operaciones: PROBADAS Y ARCHIPROBADAS.
Public Function SumarHoras(ByVal sH1 As String, ByVal sH2 As String) As String 'Obtengo las horas H1 = CDbl(Mid(sH1, 1, 2)) H2 = CDbl(Mid(sH2, 1, 2)) 'Obtengo los minutos m1 = CDbl(Mid(sH1, 4, 2)) m2 = CDbl(Mid(sH2, 4, 2)) 'Sumo los minutos primero SumaMinutos = m1 + m2 If SumaMinutos >= 60 Then Minutos = SumaMinutos - 60 Delta = 1 Else Minutos = SumaMinutos Delta = 0 End If Horas = H1 + H2 + Delta SumarHoras = Format(Horas, "00") & ":" & Format(Minutos, "00") End Function
Public Function RestarHoras(ByVal sH1 As String, ByVal sH2 As String) As String 'Obtengo las horas H1 = CDbl(Mid(sH1, 1, 2)) H2 = CDbl(Mid(sH2, 1, 2)) 'Obtengo los minutos m1 = CDbl(Mid(sH1, 4, 2)) m2 = CDbl(Mid(sH2, 4, 2)) 'Primero comparo los minutos If m1 < m2 Then dMin = 60 - m2 + m1 dHora = 1 Else dMin = m1 - m2 dHora = 0 End If Horas = H1 - H2 - dHora RestarHoras = Format(Horas, "00") & ":" & Format(dMin, "00") End Function
356
« en: Jueves 28 de Noviembre de 2002, 20:14 »
Nuevamente yo:
Parece que tenemos un serio problema de logica matematica o de programacion estimado amigo(a).
La funcion que te entregue solo tiene un inconveniente, SOLO SUMA HORAS, y tiene un problema de escritura El la funcion donde dice:
'Obtengo las horas H1 = CDbl(Mid(sH1, 1, 2)) H2 = CDbl(Mid(sH1, 1, 2))
Debe decir: 'Obtengo las horas H1 = CDbl(Mid(sH1, 1, 2)) H2 = CDbl(Mid(sH2,1,2))
Si haces una depuracion al momento de la ejecucion, hubieses detectado el problema.
357
« en: Jueves 28 de Noviembre de 2002, 14:37 »
Amigos:
Tengo el siguiente drama: - Se como abrir un documento word predefinido que contiene marcadores, los cuales lleno con mis variables. - Se como enviar a imprimir el documento Todo esto en background.
Pero no se como terminar la aplicacion word, una vez que doy la orden de imprimir. Ya que cuando termino la aplicacion VB, el word queda abierto
Alguien sabe como cerrar el word con o sin los cambios?
Gracias Amigos
358
« en: Jueves 28 de Noviembre de 2002, 14:30 »
Hay miles de sitios donde encontrar los iconos, aparte del que te indique ( www.lawebdelprogramador.com/icocur.php), pero parece que el lindo los quiere en bandeja, asi es que hay te los envio.
359
« en: Miércoles 27 de Noviembre de 2002, 21:56 »
Tienes dos formas de hacerlo: a). Usando un treeview y un command Al treeview coloca la propiedad checkboxes=true Private Sub Command1_Click() 'Recorro el listado para ver si hay algun nodo marcado For i = 1 To Lista.Nodes.Count If Lista.Nodes(i).Checked = True Then 'Obtengo la clave original, ya que lo habiamos agregado un caracter C al inicio sClave = Mid(Lista.Nodes(i).Key, 2, Len(Lista.Nodes(i).Key) - 1) sTexto = Trim(Lista.Nodes(i).Text) 'Aqui colocas el codigo para guardar el registro marcado End If Next i End Sub Private Sub Form_Load() For i = 1 To 10 'Las claves del treeview tienen que comenzar con un caracter Clave = "C" & i 'Aqui lo puedes reemplazar por su codigo unico que identifique a la persona Texto = "Posicion " & i 'Aqui puedes poner el nombre de la persona 'Insertamos el nodo Set Nodo = Lista.Nodes.Add(, , Clave, Texto) Next i End Sub b). la otra forma es usa dos treeview (uno de origen y otro de destino) y botones de traspaso que permiten mover uno nodo de un treeview a otro. Si quieres este ejemplo, ya que es mas largo, escribeme a jose_arriagada@hotmail.com
360
« en: Miércoles 27 de Noviembre de 2002, 21:45 »
Utiliza el siguiente ejemplo:
Private Sub Command1_Click() 'Asumo que las casillas text1 y text1 tienen la capacidad 'de verificar si lo ingresado esta en formato hora, y por tanto 'al presionar el boton Command1, los valores estan correctos Hora1 = Format(Text1, "hh:mm") Hora2 = Format(Text2, "hh:mm") Text3 = SumarHoras(Hora1, Hora2) End Sub
Public Function SumarHoras(ByVal sH1 As String, ByVal sH2 As String) As String 'Obtengo las horas H1 = CDbl(Mid(sH1, 1, 2)) H2 = CDbl(Mid(sH1, 1, 2)) 'Obtengo los minutos M1 = CDbl(Mid(sH1, 4, 2)) M2 = CDbl(Mid(sH2, 4, 2)) 'Sumo los minutos primero SumaMinutos = M1 + M2 If SumaMinutos > 60 Then Minutos = SumaMinutos - 60 Delta = 1 Else Minutos = SumaMinutos Delta = 0 End If Horas = H1 + H2 + Delta SumarHoras = Horas & ":" & Minutos End Function
Espero te sirva
361
« en: Miércoles 27 de Noviembre de 2002, 21:27 »
Espero te sirva el ejemplo
362
« en: Miércoles 27 de Noviembre de 2002, 21:26 »
Te envio ejemplo, espero te sirva
363
« en: Miércoles 27 de Noviembre de 2002, 21:24 »
Si usas el progressbar dentro del mismo form, siempre tendras el problema que el progressbar no se visualizara hasta el final del proceso. Lo que te recomiendo, es colocar el progressbar en un form MDI principal, y lo llamas desde el form que ejecuta el proceso.
Para ello, cuando lo pongas en tiempo de diseño, le pongas la propiedad visible=false, y al comenzar el proceso lo cambias a true y al terminar que vuelva a false.
Ahora la pregunta del millon, como lo haces para que avance el progress.
Cuando te conectes, tienes dos alternativas: a) No mostrar estado de avance de conexion. b). Dar un time de conexion y ese mismo valor al progressbar.max, y usar un control timer para mostrar el avance durante ese time. No te lo recomiendo, a menos que sepas usar time y desactivarlo despues (es decir, en tiempo de ejecucion)
Una vez realizada la conexion, la primera pregunta que debes hacer a la base de datos, es la cantidad de registros que extraeras de acuerdo a tu filtro en la consulta.
Usa : select count(*) as Cantidad from <tabla> where <condicion) Y cuando tengas el valor lo traspasas al progressbar.max y utilizas un contador para ir viendo en que posicion vas, y que porcentaje del total es:
te doy un pseudo codigo para que lo adaptes.
Sentencia="select count(*) as cantidad from MiTabla where Condicion" Respuesta=Conexion.Sentencia progressbar.visible=true progressbar.max=Respuesta->Cantidad Maximo=Respuesta->Cantidad Contador=0 while not respuesta.eof Contador=Contador+1 progressbar.value=int(Contador/Maximo)*100 ** colocar el codigo de tu proceso ** avanzar al siguiente registro wend
364
« en: Miércoles 27 de Noviembre de 2002, 21:11 »
Te envio un codigo de ejemplo, espero te sirva
365
« en: Miércoles 27 de Noviembre de 2002, 21:07 »
Te envio archivo con codigo, espero te sirva.
366
« en: Miércoles 27 de Noviembre de 2002, 21:04 »
Conocer mi dirección IP (sin ActiveX)
Para conocer la dirección IP de nuestra máquina (sin usar ningún ActiveX) :
Declaramos las constantes y llamadas al API necesarias :
Private Const MAX_WSADescription = 256 Private Const MAX_WSASYSStatus = 128 Private Const ERROR_SUCCESS As Long = 0 Private Const WS_VERSION_REQD As Long = &H101 Private Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD &H100 And &HFF& Private Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF& Private Const MIN_SOCKETS_REQD As Long = 1 Private Const SOCKET_ERROR As Long = -1
Private Type HOSTENT hName As Long hAliases As Long hAddrType As Integer hLen As Integer hAddrList As Long End Type
Private Type WSADATA wVersion As Integer wHighVersion As Integer szDescription(0 To MAX_WSADescription) As Byte szSystemStatus(0 To MAX_WSASYSStatus) As Byte wMaxSockets As Integer wMaxUDPDG As Integer dwVendorInfo As Long End Type
Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long Private Declare Function WSAStartup Lib "WSOCK32.DLL" _ (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long Private Declare Function gethostname Lib "WSOCK32.DLL" _ (ByVal szHost As String, ByVal dwHostLen As Long) As Long Private Declare Function gethostbyname Lib "WSOCK32.DLL" _ (ByVal szHost As String) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
Y luego introducimos las funciones necesarias :
Public Function HiByte(ByVal wParam As Integer) HiByte = wParam &H100 And &HFF& End Function
Public Function LoByte(ByVal wParam As Integer) LoByte = wParam And &HFF& End Function
Public Function SocketsInitialize() As Boolean
Dim WSAD As WSADATA Dim sLoByte As String Dim sHiByte As String
If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then //*MsgBox "The 32-bit Windows Socket is not responding." SocketsInitialize = False Exit Function End If
If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then //*MsgBox "This application requires a minimum of " & _ //* CStr(MIN_SOCKETS_REQD) & " supported sockets."
SocketsInitialize = False Exit Function End If
If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or _ (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR And _ HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then
sHiByte = CStr(HiByte(WSAD.wVersion)) sLoByte = CStr(LoByte(WSAD.wVersion))
//*MsgBox "Sockets version " & sLoByte & "." & sHiByte & _ //* " is not supported by 32-bit Windows Sockets."
SocketsInitialize = False Exit Function
End If
//*must be OK, so lets do it SocketsInitialize = True End Function
Public Sub SocketsCleanup() If WSACleanup() <> ERROR_SUCCESS Then //*MsgBox "Socket error occurred in Cleanup." End If End Sub
Public Function GetIPAddress() As String
Dim sHostName As String * 256 Dim lpHost As Long Dim HOST As HOSTENT Dim dwIPAddr As Long Dim tmpIPAddr() As Byte Dim i As Integer Dim sIPAddr As String
If Not SocketsInitialize() Then GetIPAddress = "" Exit Function End If
//*GetHostName devuelve el nombre del local host en el buffer especificado por el parámetro //*name. El nombre se devuelve en un string acabado en null. El formato del nombre depende del //*driver de Windows Sockets - puede ser un simple nombre o puede ser un nombre de dominio //*plenamente cualificado. De todas formas, está garantizado que el nombre puede ser tratado //*por las funciones GetHostByName y WSAAsyncGetHostByName.
//*En esta aplicación, si el nombre no ha sido configurado, GetHostName devolverá //*un nombre que GetHostByName y WSAAsyncGetHostByName pueden resolver.
If gethostname(sHostName, 256) = SOCKET_ERROR Then GetIPAddress = "" //*MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & _ //* " has occurred. Unable to successfully get Host Name." SocketsCleanup Exit Function End If
//*GetHostByName devuelve un puntero a la estructura HOSTENT - una estructura creada por //*Windows Socktes. Dicha estructura contiene el resultado de una búsqueda con éxito del host //*especificado en el parámetro name.
//*La aplicación nunca debe intentar modificar esta estructura ni ninguno de sus componentes. //*Sólo hay una copia de la estructura por cada thread y la aplicación puede copiar cualquier //*información que necesite antes de llamar a otra función de Windows Sockets.
//*La función GetHostByName no puede resolver direcciones IP en formato string. //*Usa la función Inet_Addr para convertir un string con una dirección IP y luego emplea la //*función GetHostByAddr para obtener los contenidos de la estructura HOSTENT. sHostName = Trim$(sHostName) lpHost = gethostbyname(sHostName)
If lpHost = 0 Then GetIPAddress = "" //*MsgBox "Windows Sockets are not responding. " & _ //* "Unable to successfully get Host Name." SocketsCleanup Exit Function End If
//*para extraer la dirección IP devuelta, tenemos que hacer una copia de la estructura //*HOST y de sus componentes CopyMemory HOST, lpHost, Len(HOST) CopyMemory dwIPAddr, HOST.hAddrList, 4
//*creamos un array para recoger el resultado ReDim tmpIPAddr(1 To HOST.hLen) CopyMemory tmpIPAddr(1), dwIPAddr, HOST.hLen
//*y con el array, construimos la dirección añadiendo un punto entre los miembros For i = 1 To HOST.hLen sIPAddr = sIPAddr & tmpIPAddr(i) & "." Next
//*la rutina añade un punto al final del string, lo quitamos GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)
SocketsCleanup
End Function
La función GetIPAddress nos devuelve un string con la dirección IP.
Espero te sirva
367
« en: Miércoles 27 de Noviembre de 2002, 21:00 »
Te envio un ejemplo, espero te sirva
368
« en: Miércoles 27 de Noviembre de 2002, 20:58 »
Utiliza este codigo en un control command Private Sub Command1_Click() 'El archivo excel en blanco debe existir Archivo = App.Path & "BDATOS.XLS" 'Se abre la aplicacion EXCEL en background Set Pxls = CreateObject("Excel.Application") Pxls.Workbooks.Open Archivo Pxls.Visible = False 'Se activa la hoja para escribir Pxls.Worksheets("Hoja1").Activate 'Suponemos que la grilla contiene menos de 28 filas. Si es mas, debes cambiar el 'codigo para activar las celdas correspondientes 'Recorro la grilla por filas For i = 1 To MSFlexGrid1.Rows - 1 MSFlexGrid1.Row = i 'Obtengo el caracter de fila para posicionar en la planilla excel sCaracter = Char(64 + i) 'Recorro la grilla por columnas For j = 1 To MSFlexGrid1.Cols - 1 MSFlexGrid1.Col = j xValorCelda = MSFlexGrid1.Text sCelda = sCaracter & j 'Registro el valor en la celda de la planilla Pxls.Worksheets("Hoja1").Range(sCelda).Value = xValorCelda 'Para leer de una celda desde la planilla, el codigo seria 'xValorCelda = Pxls.Worksheets("Hoja1").Range(sCelda).Value Next j Next i 'Cierro la planilla aceptando los cambios Pxls.ActiveWorkbook.Close SaveChanges:=True 'Si quiere Cerrar la planilla sin aceptar los cambios, entonces deberia escribir 'Pxls.ActiveWorkbook.Close SaveChanges:=False End Sub Espero te sirva, por cualquier duda, escribeme a jose_arriagada@hotmail.com
370
« en: Miércoles 27 de Noviembre de 2002, 20:05 »
Agrega esta funcion en una .BAS
Public Function Es_Rut(ByVal X As String, ByVal Y As Integer) As Boolean ' Funcion que recibe el string con el Rut y lo analiza ' Y=0 no entrega mensaje ' Y=1 mensaje de RUT ' Y=2 mensaje de ficha ' Si es rut entrega Es_Rut=True ' Si no es rut entrega Es_Rut=False X = Trim(X) xlargo = Len(X) xposicion = InStr(X, "-") If xposicion <> 0 Then xnumero = Format(Mid$(X, 1, xposicion - 1), "00000000") xdv = Mid$(X, xposicion + 1, xlargo - xposicion + 1) If IsNumeric(xnumero) Then If Len(xdv) = 1 Then If IsNumeric(dv) Then xBandera = 1 Else If UCase(dv) = "K" Then xBandera = 1 Else xBandera = 0 End If End If Else xBandera = 0 End If Else xBandera = 0 End If If xBandera = 1 Then 'posiciones : 8 7 6 5 4 3 2 1 'multiplicar por: 3 2 7 6 5 4 3 2 xpos8 = CInt(Mid(xnumero, 1, 1)) xpos7 = CInt(Mid(xnumero, 2, 1)) xpos6 = CInt(Mid(xnumero, 3, 1)) xpos5 = CInt(Mid(xnumero, 4, 1)) xpos4 = CInt(Mid(xnumero, 5, 1)) xpos3 = CInt(Mid(xnumero, 6, 1)) xpos2 = CInt(Mid(xnumero, 7, 1)) xpos1 = CInt(Mid(xnumero, 8, 1)) xsuma = xpos8 * 3 + xpos7 * 2 + xpos6 * 7 + xpos5 * 6 + xpos4 * 5 + xpos3 * 4 + xpos2 * 3 + xpos1 * 2 xentero = Int(xsuma / 11) xValor = xsuma - xentero * 11 xresto = 11 - xValor Select Case xresto Case 0 To 9: dv = CStr(xresto) Case 10: dv = "K" Case 11: dv = "0" End Select If UCase(xdv) = dv Then Es_Rut = True Else Es_Rut = False If Y <> 0 Then If Y = 1 Then msg = "El rut correcto debe ser " & Format(CDbl(xnumero), "#,##0") & "-" & dv Else msg = "La ficha correcta debe ser " & Format(CDbl(xnumero), "#,##0") & "-" & dv End If MsgBox msg, vbInformation, "Advertencia" End If End If Else Es_Rut = False End If Else Es_Rut = False End If End Function
371
« en: Miércoles 27 de Noviembre de 2002, 20:03 »
Te envio un codigo de ejemplo, espero te sirva
372
« en: Miércoles 27 de Noviembre de 2002, 19:34 »
Inserta este codigo en el form:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Select Case UnloadMode Case vbFormCode: 'MsgBox "Opcion Cancelar" Case vbAppTaskManager: 'MsgBox "Case 2" Case vbAppWindows: 'MsgBox "case 3" Case Else Beep Cancel = True End Select End Sub
373
« en: Miércoles 27 de Noviembre de 2002, 19:26 »
Tengo alrededor de 1.000 iconos clasificados por temas. Enviame un e-mail a: jose_arriagada@hotmail.com con tu direccion y te envio lo que necesitas
Páginas: 1 ... 13 14 [15]
|
|
|