|
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 - Brroz
Páginas: 1 ... 36 37 [38] 39 40 ... 43
926
« en: Lunes 8 de Septiembre de 2003, 09:58 »
Kaixo! Friju
En tiempo de diseño: selecciona el formulario, en la ventana de propiedades (F6), elige desde la propiedad 'Icon' el icono que desees pulsando el botón con '...' o escribe directamente la ruta y nombre de archivo. En tiempo de Ejecución: Form1.Icon = LoadPicture("C:RutaArchivo.ico")
Suerte.
927
« en: Lunes 8 de Septiembre de 2003, 09:02 »
Fíjate en este código. Usando la propiedad List conseguiras lo que buscas:
Private Sub Form_Load() With ListBox1 .AddItem "Columna_0-Fila_0", ListBox1.ListCount .List(ListBox1.ListCount - 1, 1) = "Columna_1-Fila_0" .AddItem "Columna_0-Fila_1", ListBox1.ListCount .List(ListBox1.ListCount - 1, 1) = "Columna_1-Fila_1" End With End Sub
Suerte.
928
« en: Lunes 8 de Septiembre de 2003, 08:45 »
Prueba entonces con los CONTROLES MAPI MapiSession/MapiMessages a ver que tal te va. Lo de MailTo, realmente es una solución poco efectiva.
Suerte.
929
« en: Lunes 8 de Septiembre de 2003, 08:43 »
En la mayoría de los SQL, el carácter comodín es '%'... haciendo la concatenación con '*' buscas una cadena del tipo " Cadena en la que busco* ". La comparación funciona así:
%Cadena% -> 'Cadena' contenida en el texto.
%Cadena -> 'Cadena a la derecha del texto (que el valor del campo termine en 'Cadena').
Cadena% -> Que el texto comience por 'Cadena'.
Podrías probar usando el comodín de esta forma para buscar al comienzo y al final del campo:
...Find "LEFT(CampoMemo, Int(Longitud campo / 2)) LIKE " & cadena_a_buscar1 & "%" AND RIGHT(CampoMemo, Int(Longitud campo / 2)) LIKE %" & cadena_a_buscar2
Suerte.
930
« en: Lunes 8 de Septiembre de 2003, 08:33 »
Hola Carlos.
Puedes utilizar el objeto Printer.
Básicamente tendrás que controlar las propiedades CurrentX y CurrentY para indicar las coordenadas en las que imprimir, Font, Orientation, etc, etc... Para imprimir usa el método Print, para incluir imágenes PaintPicture y cuando tengas el listado completo: EndDoc para que comience la impresión.
Suerte.
931
« en: Lunes 8 de Septiembre de 2003, 08:28 »
Para cambiar el icono que se visualizar al iniciar el arrastre debes usar la propiedad 'DragIcon' del ListBox asignándole el icono que más te convenga. Por ejemplo, para cambiar de icono en tiempo de ejecución, añade un control ListImage al form e incluye iconos para representar la operación drag, otro para drop y otro para indicar que drop no está permitido. Fíjate en el ejemplo:
'Arrastre sobre el formulario Private Sub Form1_DragOver(Source As Control, x As Single, y As Single, State As Integer) If Source.Name <> "List1" Then Exit Sub Source.DragIcon = ImageList1.ListImages("CLAVE_ICONO_NODROP").Picture End Sub
'Arrastre sobre el treeview Private Sub TreeView1_DragOver(Source As Control, x As Single, y As Single, State As Integer) If Source.Name <> "List1" Then Exit Sub Dim nod1 As Node Set nod1 = TreeView1.HitTest(x, y) If nod1 Is Nothing Then Source.DragIcon = ImageList1.ListImages("CLAVE_ICONO_NODROP").Picture Exit Sub End If If nod1.Key = "Valor_Clave_comparación" Then ImageList1.ListImages("CLAVE_ICONO_NODROP").Picture Else ImageList1.ListImages("CLAVE_ICONO_DROP").Picture End If Set nod1 = Nothing End Sub
'Colocar sobre el treeview Private Sub TreeView1_DragDrop(Source As Control, x As Single, y As Single) If Source.Name <> "List1" Then Exit Sub Dim nod1 As Node Set nod1 = TreeView1.HitTest(x, y) If nod1 Is Nothing Then Exit Sub If nod1.Key <> "Valor_Clave_comparación" Then TreeView1.Nodes.Add nod1.Key, tvwChild, , Source.List(Source.ListIndex) End If Set nod1 = Nothing End Sub
A ver si esto te va bien. Suerte.
932
« en: Viernes 5 de Septiembre de 2003, 13:02 »
Creo que el problema lo tienes porque destruyes la referencia al objeto cConexion (set cn = Nothing) antes de tiempo. Si defines 'cn' a nivel de módulo y destruyes la referencia al objeto con el evento 'Terminate' de la clase en vez de al finalizar la función, tu problema debe quedar resuelto.
Suerte.
933
« en: Viernes 5 de Septiembre de 2003, 10:16 »
Hola SpeedCAD.
El ejemplo siguiente muestra cómo hacer una operación de arrastre de forma manual. El código por si solo no tiene mucho sentido, pero ya lo completarás tu adaptándolo a tus necesidades. Ahí va:
En un Form añado un ListBox y un TreeView a los que pongo la propiedad DragMode y OLEDropMode , respectivamente, como manual.
******************************************** Option Explicit Private indDrag As Boolean
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) On Error Resume Next If indDrag Then indDrag = False List1.Drag vbCancel End If End Sub
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If List1.ListIndex > -1 Then indDrag = True End Sub
Private Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) On Error Resume Next indDrag = False List1.Drag vbCancel End Sub
Private Sub List1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Not indDrag Then Exit Sub If Button = 1 Then List1.Drag vbBeginDrag End Sub
Private Sub TreeView1_DragOver(Source As Control, X As Single, Y As Single, State As Integer) If Source.Name <> "List1" Then Exit Sub End Sub
Private Sub TreeView1_DragDrop(Source As Control, X As Single, Y As Single) If Source.Name <> "List1" Then Exit Sub TreeView1.Nodes.Add , , , Source.List(Source.ListIndex) List1.Drag vbEndDrag indDrag = False End Sub
*********************************************
Ten encuenta detalles como definir el icono para el arrastre (propiedad DragIcon), controlar el arrastre sobre otros controles, ver sobre qué nodos permites colocar y cambiar de icono según se permita o no, etc.
Otra forma de realizar una operación de arrastrar/colocar es de forma automática.
Espero que todo esto te sea de utilidad. Suerte.
934
« en: Viernes 5 de Septiembre de 2003, 09:38 »
Creo que entonces podrías usar los servicios de mensajería MAPI. También existe otra forma de enviar correos de la que ahora mismo no recuerdo bien su uso. Era algo así como 'Shell "MailTo: Direccion@correo.es;Subject:xxxxx;Text:dasdasd "'. Le podía especificar Subject, text, etc. El inconveniente es que el correo no se envía de forma automática (por lo menos yo nunca fuí capaz), sino que se abre una pantalla del editor de correos que tengas configurado, eso sí, con los datos especificados en el 'MailTo'. Tal vez probando e investigando algo de esto consigas lo que buscas, sino... MAPI. Desde luego lo ideal sería detectar el cliente de correo instalado en el pc y usar clases adecuadas a cada caso... Chao.
935
« en: Viernes 5 de Septiembre de 2003, 08:57 »
Prueba a ver si te vale esto:
Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer) On Error Resume Next If KeyCode < 32 Or KeyCode = 35 Or KeyCode = 36 Or KeyCode = 46 Then Exit Sub Dim int1 As Integer int1 = Len(Combo1.Text) Dim int2 As Integer, strW As String For int2 = 0 To Combo1.ListCount - 1 strW = Combo1.List(int2) If UCase(Left(strW, int1)) = UCase(Combo1.Text) Then Combo1.ListIndex = int2 Combo1.SelStart = int1 Combo1.SelLength = Len(Combo1.Text) - int1 Exit For End If Next int2 End Sub
Suerte.
936
« en: Viernes 5 de Septiembre de 2003, 08:37 »
Hola wallace. Si no entiendo mal, tú problema es que quieres eliminar un registro/s de un grupo que identifican a un usuario... Puedes utilizar la/s correspondiente/s sentencia/s SQL (sql/400, por supuesto).
Si quieres eliminar todos los registros del usuario 4038 y el campo es CARÁCTER: DELETE From Tabla1 WHERE LEFT(CampoX, 4) = '4038'
Si quieres eliminar todos los registros del usuario 4038 y el campo es NUMÉRICO: DELETE From Tabla1 WHERE LEFT(DIGITS(CampoX), 4) = '4038'
Si quieres eliminar el último de los registros y SABES CÚAL ES EL MAYOR nº DE FOLIO (con campos numéricos): DELETE From Tabla1 WHERE LEFT(DIGITS(CampoX), 4) = '4038' AND RIGHT(DIGITS(CampoX), 3) = '006'
Si quieres eliminar el último de los registros y NO SABES CÚAL ES EL MAYOR nº DE FOLIO (con campos numéricos): 'Primero obten en un recordset los registros ordenados del usuario: Set rs1 = cmd1.Execute("SELECT From Tabla1 WHERE LEFT(DIGITS(CampoX), 4) = '4038' ORDER BY CampoX 'Posiciónate en el último registro (si los hubiera, claro): rs1.MoveLast 'Ahora elima el registro: cmd1.Execute "DELETE FROM Tabla1 WHERE CampoX =" & rs1.Fields("CampoX").Value
Espero que con estos ejemplos arregles. Suerte.
937
« en: Viernes 5 de Septiembre de 2003, 08:17 »
Si tienes instalado Outlook/Exchange, puedes incluir una referencia a la biblioteca de tipos correspondientes (o crear los objetos mediante CreateObject). También podrías utilizar los servicios MAPI fácilmente usando los controles MapiSession/MapiMessages.
En este mismo foro, creo que podrás encontrar varios ejemplos de cómo implementar la mensajería.
Suerte.
938
« en: Viernes 5 de Septiembre de 2003, 08:09 »
Hola Bea. ¿Las imágenes no tendrán el atributo de sólo lectura, verdad?
Mira a ver si es eso.
Suerte.
939
« en: Jueves 4 de Septiembre de 2003, 11:21 »
Hombre... así sin saber más, podría ser un problema de DUPLICIDAD de CLAVES.
Suerte.
940
« en: Jueves 4 de Septiembre de 2003, 10:12 »
Podrías utilizar algo tal que así:
Para el ejemplo, crea un formulario y añádele dos 'CommandButton', uno para crear la clave en el registro y otro para comprobarla. Luego añade este código al form.
******************************************************************************** Option Explicit Private Const HKEY_LOCAL_MACHINE = &H80000002 Private Const REG_SZ = 1 Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Private Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Const NUMERO_DESPISTE = 32 'Por ejemplo Private Const DIAS_PLAZO = 30 'También por ejemplo Private Sub Command1_Click() RegistrarClaveSetup ValorClaveSetup() End Sub Private Sub Command2_Click() ChkClaveSetup End Sub Private Function ValorClaveSetup() As Long ValorClaveSetup = (Year(Now) + NUMERO_DESPISTE) * 10000& _ + (Month(Now) + NUMERO_DESPISTE) * 100& + Day(Now) + NUMERO_DESPISTE End Function Private Sub RegistrarClaveSetup(ByVal Clave As String) Dim lngRc As Long, lngResult As Long lngRc = RegOpenKey(HKEY_LOCAL_MACHINE, "Software", lngResult) lngRc = RegCloseKey(lngResult) lngRc = RegCreateKey(lngResult, "SoftwareDeBea", lngResult) lngRc = RegCreateKey(lngResult, "AplicacionDeBea", lngResult) lngRc = RegSetValue(lngResult, "", REG_SZ, Clave, 0) End Sub Private Sub ChkClaveSetup() Dim strClave As String Dim intDia As Integer, intMes As Integer, intAnho As Integer strClave = RecuperarClaveSetup If Len(strClave) <> 8 Then MsgBox "Clave no válida" Exit Sub End If intAnho = Val(Left(strClave, 4)) - NUMERO_DESPISTE intMes = Val(Mid(strClave, 5, 2)) - NUMERO_DESPISTE intDia = Val(Right(strClave, 2)) - NUMERO_DESPISTE If DateDiff("d", Now, intDia & "/" & intMes & "/" & intAnho) <= DIAS_PLAZO Then MsgBox "Dentro del plazo" Else MsgBox "Plazo expirado" End If End Sub Private Function RecuperarClaveSetup() As String Dim lngRc As Long, lngResult As Long, strValor As String lngRc = RegOpenKey(HKEY_LOCAL_MACHINE, "Software", lngResult) lngRc = RegCloseKey(lngResult) lngRc = RegOpenKey(lngResult, "SoftwareDeBea", lngResult) strValor = String(255, 0) lngRc = RegQueryValue(lngResult, "AplicacionDeBea", strValor, 255) lngRc = RegCloseKey(lngResult) RecuperarClaveSetup = Left(strValor, InStr(1, strValor, Chr(0)) - 1) End Function ********************************************************************************
Bueno, el ejemplo básicamente recupera la fecha actual y la pone como aaaammdd tras sumarle un número (NUMERO_DESPISTE) a cada parte para que el valor en el registro no parezca una fecha (te podrías currar otro camuflage...). Escribes el valor camuflado en el registro en 'HKEY_LOCAL_MACHINE/SOFTWARE/SOFTWAREDEBEA/APLICACIONDEBEA'. Luego cuando quieras recuperas ese valor y le restas el número para convertirlo otra vez a fecha. Utilizas 'DateDiff' para conocer los días que han pasado.
Esto así a grandes rasgos... Examina el código y adáptalo a tus necesidades. También te tengo que decir que este método es un poco ingenuo y tal vez relativamente fácil de crackear, pero puede ser efectivo. Un consejo es que cambies los nombres de variables, funciones, métodos, etc., para que no parezca que son lo que son...
Suerte.
941
« en: Jueves 4 de Septiembre de 2003, 08:18 »
Hola agfed.
El error que te da 'LineInput' se debe a que lo escribí mal (disculpas), debería ser 'Line Input'.
Aunque trabajes con archivos binarios el código debe de funcionar igual, si quisieras podrías abrirlos en modo binario (Open "Archivo" For Binary Access) y realizar la comparación de modo parecido utilizando el método 'Get' en lugar de 'Line Input'.
Suerte.
942
« en: Jueves 4 de Septiembre de 2003, 08:12 »
Hola agfed. Creo que el método find debería funcionar sin problemas con cualquier tipo de datos que tengan los campos, incluso con campos memo, que a todos los efectos son campos de texto de longitud variable. Otra cosa distinta es acertar con el valor por el que quieres realizar la búsqueda, es decir, no es lo mismo buscar por una palabra que por un texto de gran tamaño, donde signos de puntuación, tildes, mayúsculas/minúsculas, pueden hacer que no encuentres un registro coincidente. Para evitar en la medida de lo posible esto, podrías usar un filtro de este estilo:
Recordset1.Find "UCASE(CampoMemo) LIKE(UCASE('%Cadena a buscar en el campo%'))
Suerte.
943
« en: Miércoles 3 de Septiembre de 2003, 14:04 »
Para reducir el tamaño de una imagen puedes utilizar el api 'StretchBlt'.
Imagina un formulario con dos PictureBox: Picture1 con la imagen origen y Picture2 en donde dibujaremos la copia reducida. Ahora copiaríamos por ejemplo a una imagen de 60x60 (en pixels ojo)
'A nivel de módulo. Public Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
'Por ejemplo al cargar el form
Private Sub Form_Load
Dim lngRc As Long lngRc = StretchBlt(Picture2.hdc, 0, 0, 60, 60, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, &HCC0020)
End Sub
A ver si con esto te vas arreglando... de todas formas no considero completa mi respuesta, ya que lo que hace esta api es copiar (SRCCOPY = &HCC0020) el mapa de bits a un DC según el tamaño y coordenadas que le especifiques. Ahora la cuestión es guardar el mapa de bits. Supongo que abrá que crear un DC compatible o un mapa de bits, o algo así y aplicarle 'Strechblt', ya que si intentas utilizar 'SavePicture' con Picture2, te llevarás una desagradable sorpresa.
En fin...espero que esto te sirva de ayuda. Suerte.
944
« en: Miércoles 3 de Septiembre de 2003, 09:11 »
Hombre, ahora que caigo, ya sé que es lo quieres hacer... Lo sé por tu anterior tema 'compara archivos o usar campos binarios': quieres comparar dos tablas de una base de datos para saber si contienen los mismos datos.
Vale, te diré que bien podías haberlo especificado respondiendo al tema anterior. Te di una solución para comparar 'Archivos', como tu decías, si no era eso lo que necesitabas, podrías haberlo dicho y no dejar el tema abierto. En fin...
Podrías usar una sentencias SQL para comparar las dos tablas, o código que las recorriera buscando diferencias, pero como no tengo ganas de escribir tanto, pues mi recomendación es que exportes las tablas a archivos de texto y que uses el código que te escribí en el tema anterior. Ale.
Chao.
945
« en: Miércoles 3 de Septiembre de 2003, 08:50 »
¿Podrías especificar un poco mejor que es lo que necesitas?
- Comparar dos campos memo de dos tablas distintas.
- Comparar dos campos memo en la misma tabla.
- Seleccionar registros por el valor de uno o varios campos memo.
- Seleccionar registros por el valor de uno o varios campos memo que contengan una serie a buscar.
En todo caso trata el campo memo como si fuera un campo tipo texto. Puedes asignarlo a una variable de tipo string con la limitación de 2^31 caracteres para cadenas de longitud variable y de 2^16 para cadenas de longitud fija.
Suerte.
946
« en: Miércoles 3 de Septiembre de 2003, 08:34 »
En tiempo de diseño, si pulsas con el botón derecho del ratón sobre el control y eliges propiedades, te aparecerá un formulario.
Desde la pestaña 'General' : Defines la conexión. Tienes tres formas distintas (realmente vienen a ser dos): Puedes usar un origen de datos ODBC ya existente o crear uno nuevo, generar una cadena de conexión para usar un proveedor OleDb o usar un archivo datalink (*.UDL) que te hayas creado previamente (lo cual viene a ser lo mismo que lo anterior pero usando un archivo que podrás modificar a posteriori sin necesidad de volver a compilar el programa). Para generar una cadena de conexión, básicamente sigue los pasos del asistente: eliges el proveedor OleDb (en tu caso Microsoft Jet) y en la pestaña 'Conexión', en origen de datos, introduce la ruta y nombre de la base de datos. Para crear un archivo datalink, pulsa con el botón derecho del ratón sobre el escritorio y elige 'Nuevo...' , 'Microsoft DataLink', te aparecerá un formulario similar al que te aparecería generando la cadena de conexión desde las propiedades del control.
Desde la pestaña 'Origen del registro': Pues eso, eliges el origen para los datos que gestionará el control. Si quieres enlazar el control con una tabla, elige un comando 'adCmdTable' y selecciona la tabla que deseas. Si usas una sentencia SQL, entonces selecciona un comando 'adCmdUnknow'.
Con esto básicamente tienes el control data conectado a la base de datos.
Para conectar a un datagrid, lo seleccionas, te vas a la ventana de propiedades (F6) y eliges para la propiedad 'DataSource' el control data. Pulsa con el botón derecho sobre el datagrid y selecciona 'RecuperarCampos' (en tiempo de ejecución usa el método 'Rebind').
Para enlazar textbox a los campos, pues haces lo mismo que con el datagrid y en la propiedad 'DataField' eliges el campo que te interesa.
Con esto básicamente creo que podrás comenzar a funcionar.
Suerte.
947
« en: Martes 2 de Septiembre de 2003, 11:55 »
Prueba programando el evento change de la hoja. Así de sencillo.
Suerte.
948
« en: Martes 2 de Septiembre de 2003, 10:52 »
Efectivamente, disculpas, tienes razón... se me olvidaba que estas utilizando un control iNet. La solución que te daba sería válida siempre que pudieras tener acceso a esa carpeta como recurso compartido, asignándola a una letra de unidad, o refiriéndose a la ruta directamente (ServidorRuta).
De otra forma, como muy bien indicas abría que utilizar el comando FTP 'dir' y/o los comandos 'ls' o 'mls' para mostrar el contenido de uno o varios directorios respectivamente.
Suerte.
949
« en: Martes 2 de Septiembre de 2003, 09:43 »
En tu ejemplo incluyes esta línea:
gobjFTP.Execute , "RMDIR " & ruta
La vía de acceso que debes especificar es 'ruta'.
A ver si ahora... Chao.
950
« en: Martes 2 de Septiembre de 2003, 08:50 »
Podrías hacer algo de este estilo:
Private Sub BorrarFilesRtvDires(Byval ViaDeAcceso As String, Directorios() As String)
Dim strDir as String strDir = Dir(ViaDeAcceso) Dim lng1 As Long Do Until strDir = "" If (GetAttr(ViaDeAcceso & strDir) And vbDirectory) = vbDirectory Then lng1 = lng1 + 1 ReDim Preserve Directorios(lng1) Directorios(lng1) = strDir Else Kill ViaDeAcceso & strDir End If Dir Loop
End Sub
Esta sub borraría los archivos del directorio que le especifiques y devolvería como elementos de la matriz 'Directorios' las carpetas que contenga (fíjate que es un argumento 'ByRef' ). Empleándolo recursivamente, podrías eliminar todos los archivos y carpetas. ¡Úsalo con tiento!
Suerte.
Páginas: 1 ... 36 37 [38] 39 40 ... 43
|
|
|