|
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 ... 7 8 [9] 10 11 ... 43
201
« en: Miércoles 15 de Diciembre de 2004, 09:40 »
Hola Orgintel.
Puedes utilizar el método print para imprimir el texto letra a letra. Controla con las propiedades CurrentX y CurrentY la posición de cada letra. Cambia estas coordenadas según tus necesidades, utiliza algún timer, etc.
También podrías utilizar un bitmap para cada una de las letras y esta vez jugar con las propiedades Left y Top.
En definitiva, dale tú vida a la cosa. Ponte a ello que no es muy complicado.
Chao.
202
« en: Miércoles 15 de Diciembre de 2004, 09:33 »
Hola. Para poder terminar un proceso en una red en otra máquina distinta a la tuya, supongo que tendrás que utilizar sockets (se podría tambien con un Exe ActiveX, imagino), comunicando dos aplicaciones: una que da la orden de cerrar determinada aplicación en una máquina y otra que corra en esa máquina y que realice la labor. Si la aplicación 'finalizadora' es la misma que ha iniciado el proceso a finalizar, Option Explicit Private Const PROCESS_QUERY_INFORMATION = &H400 Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long Private lProcId As Long Private Sub Comenzar() lProcId = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell("Ejecutable.Exe Argumentos", vbNormalFocus)) End Sub
debería haber guardado el ID de proceso para posteriormente finalizarlo. Private Sub Finalizar() Dim lRc as long, lExitC as long lRc = TerminateProcess(lProcId, lExitC) End Sub
También se podrían recuperar las tareas activas identificar la que interese y finalizarla. Option Explicit Private Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long szExeFile As String * 260 End Type Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long) Private sTareas() As String Private Sub GetProcesos() Dim lSnapShot As Long lSnapShot = CreateToolhelpSnapshot(2&, 0&) If lSnapShot <> 0 Then Dim Proceso As PROCESSENTRY32 Proceso.dwSize = Len(Proceso) Dim lRc As Long, lCta As Long lRc = ProcessFirst(lSnapShot, Proceso) Do While lRc lCta = lCta + 1 If lCta > 1 Then ReDim Preserve sTareas(2, lCta) Else ReDim sTareas(2, 1) End If sTareas(0, lCta - 1) = Proceso.th32ProcessID sTareas(1, lCta - 1) = Left(Proceso.szExeFile, InStr(Proceso.szExeFile, Chr(0)) - 1) lRc = ProcessNext(lSnapShot, Proceso) Loop CloseHandle lSnapShot End If End Sub
Son ideas, tú verás como te va. Suerte. Abur
203
« en: Miércoles 15 de Diciembre de 2004, 09:13 »
seria bueno un codigo de ejemplo para aplicacion de una factura
... y así ya de paso cortar y pegar. ¿Por qué no cuentas mejor la duda que tienes?
204
« en: Miércoles 15 de Diciembre de 2004, 09:11 »
Hola. Añade al MDIForm un PictureBox (recordar que un mdi puede contener controles con la propiedad Alignable). Luego usa un código de este estilo: Private Sub MDIForm_Resize() Picture1.Move 0, 0, Me.Width, Me.Height Picture1.Cls Picture1.AutoRedraw = True Picture1.DrawStyle = 6 Picture1.DrawMode = 13 Picture1.DrawWidth = 2 Picture1.ScaleMode = 3 Picture1.ScaleHeight = (256 * 2) Dim i1 As Integer, iY As Integer For i1 = 0 To 255 Picture1.Line (0, iY)-(Picture1.Width, iY + 2), RGB(0, 0, i1), BF iY = iY + 2 Next i1 End Sub
Puedes jugar con el color, o fácilmente hacer el degradado horizontal en vez de vertical. Chao.
205
« en: Jueves 9 de Diciembre de 2004, 15:48 »
Hola jegonzalezrubio. Los argumentos de línea de comandos pasados al programa los recibirás a través del objeto Command. El momento en que recuperas estos parámetros es: cuando los necesites, así de sencillo, aunque normalmente será al comienzo de la ejecución del programa: en un método Main o si el objeto inicial del proyecto es un formulario, en el evento Load del mismo. Por ejemplo, en el fuente de un programa, en un módulo: Option Explicit Private Sub Main() If Command$ = "" Then MsgBox "No se han pasado parámetros" Else MsgBox "Se ha pasado como parámetro" & vbcrlf & Command$ _ & vbcrlf & " y el programa intentará hacer algo con eso." End If End Sub
Cuando asociamos una extensión a una aplicación, windows lo que hace es pasar como parámetro al ejecutable asociado el archivo que se desea abrir, por lo que ese ejecutable deberá recuperar el parámetro y hacer lo que deba con ese valor. Chao.
206
« en: Jueves 9 de Diciembre de 2004, 15:12 »
Hola.
Gracias nostromo por el aporte... conviene recordar que las declaraciones de las funciones, constantes y tipos del api también están disponibles (si lo has instalado con vb, claro) en las herramientas, apareciendo como Visor de texto API.
Chao.
207
« en: Jueves 9 de Diciembre de 2004, 15:08 »
Hola ches.
No he acabado de comprender completamente tu problema... pero te recomiendo que en vez de utilizar un datagrid uses un flexgrid manejado mediante código a tu antojo. Para editar datos de una fila puedes usar una línea de edición creada mediante textbox, combobox o lo que necesites... también podrías dar la sensación de realizar la edición sobre la misma celda del grid usando un textbox desplazado en el formulario a la posición que corresponda sobre la celda del grid a editar y con sus mismas dimensiones.
Esto que te recomiendo es más laborioso, pero por supuesto muchísimo más flexible también.
Por si esto que te cuento te suena a chino y quieres un ejemplo, creo recordar, aunque no lo he mirado, que hace poco alguien posteo en el foro un ejemplo de como implementar esto.
Suerte.
208
« en: Jueves 9 de Diciembre de 2004, 15:01 »
Hola Drek.
Ahora mismo no sé cuales, pero existen funciones del api para enumerar los trabajos en las distintas colas de impresión (EnumPrinterJobs o algo así). Por supuesto primero deberás enumerar las distintas impresoras (EnumPrinters esta sí , seguro).
Si tengo tiempo (y ganas) luego busco... de todas formas me suena que en este mismo foro ya ha salido algo de esto, busca tú a ver.
Suerte.
209
« en: Jueves 9 de Diciembre de 2004, 14:45 »
Para Asa (y a quien interes, por supuesto): Puedes obtener un cuadro de diálogo para seleccionar una carpeta mediante este código: Option Explicit Private Type BROWSEINFO hOwner As Long pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfn As Long lParam As Long iImage As Long End Type Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long Public Function SeleccionarPath(Byval HWnd as long, Byal Titulo as strinh) As string Dim bInf As BROWSEINFO Dim lRc As Long Dim lPathID As Long Dim sPath As String If Titulo = "" Then Titulo = "Recuperar vía de acceso" bInf.hOwner = hWnd bInf.lpszTitle = Titulo bInf.ulFlags = BIF_RETURNONLYFSDIRS lngPathID = SHBrowseForFolder(bInf) sPath = String(512, Chr(0)) lRc = SHGetPathFromIDList(lPathID, sPath) If lRc > 0 Then SeleccionarPath = Left(sPath, InStr(1, sPath, Chr(0)) - 1) End Function
Abur.
210
« en: Jueves 9 de Diciembre de 2004, 14:36 »
Hola druida. Para conseguir estos cambios en el resultado de 'print' debes establecer las correspondientes propiedades en el objeto del que usas su método print. Por ejemplo: Printer.ForeColor = &HFF Printer.Font.Name = "Small Fonts" Printer.Font.Size = 5 Printer.Print "Este es un texto de color rojo bastante pequeño"
Esto también es aplicable al resto de los métodos gráficos. Para imprimir una imagen puedes usar el método PaintPicture. Podrías usar una función del GDI, tipo bitblt, o podrías dibujarla pixel a pixel. Básicamente esto variará dependiendo de donde tengas la imagen (en un archivo, en un control, en objeto stdPicture, etc). Espero que esto te sirva. Abur.
211
« en: Miércoles 1 de Diciembre de 2004, 18:20 »
Hola tovarich
Así por encima:
Usa el editor de vba del Word...
1-Graba una macro con las operaciones que quieres hacer. 2-Ve a herramientas > macro > editor de visual basic 3-Usa el explorador de proyectos para localizar un módulo en el que encontrarás el código de las acciones que grabaste. Ahora ya conoces el código.
Para acceder desde vb a un doc de word debes usar la automatización de forma similar a como si lo hicieras al excel. En este foro hay abundantes ejemplos de cómo hacerlo.
Suerte.
212
« en: Miércoles 1 de Diciembre de 2004, 18:16 »
Hola. Supongo que ya pronto te cuenta tú mismo de que hacías mal Realiza un bucle de este estilo: rs.MoveFirst Do until rs.Eof combolist.AddItem rs("columnaid").Value rs.MoveNext loop
Con un bucle for, la iteración debe ser desde 1 hasta rs.RecordCount y esto no excluye posicionar el siguiente registro... Suerte.
213
« en: Miércoles 1 de Diciembre de 2004, 18:11 »
Hola tiquinho.
Si lo único que te interesa es representar la expresión y NO capturarla, para mi la solución más sencilla sería usar un picturebox con distintos tamaños de font, jugando un poco con el CurrentY, lo que pretendes debe estar chupado... puede ser posible con un richtextbox, pero así de buenas a primeras, si pudiese me quedaría con el picturebox.
A ver si te sirve la sugerencia.
Chao.
214
« en: Miércoles 1 de Diciembre de 2004, 18:06 »
Hola. Lo que radical pretende hacer puede ser muy sencillo o complicarse dependiendo de lo siguiente: Si cada línea de texto en el textbox acaba en dos carácteres Cr y Lf (vbCrLf) y eso es lo que hace que se produzca un salto de línea, la cosa sería fácil, pero si el número de líneas viene dado por un ancho de texto mayor que el ancho del TextBox la cosa se lia un poco más. Y ya si se dan las dos situaciones juntas, puedes volverte loco y te compensará más usar otro control o repasar la lógica de lo que quieres hacer. Para el primer caso bastaría con algo de este estilo: 'Eliminar la línea 5, por ejemplo Const ELIMINAR_LINEA_N = 5# Dim var1 As Variant var1 = Split(Text1.Text, vbCrLf) Dim i1 As Integer, s1 As String For i1 = 0 To UBound(var1) - 1 If ELIMINAR_LINEA_N <> i1 + 1 Then _ s1 = s1 & var1(i1) & vbCrLf Next i1 Text1.Text = s1
Si se da otra situación, tendrías que usar la función TextWidth del TextBox para ir calculando según el texto y su ancho en el control la división por líneas que quedaría (no sé si esto se entiende...). El tema se complica un poco más, y la verdad que estoy a punto de marchar a casa y no tengo tiempo ni ganas de ponerme... Espero que esto te sirva. Suerte. Abur.
215
« en: Lunes 29 de Noviembre de 2004, 17:33 »
Hola FABIANGARCIA.
La solución te la proporciona la función del api SetWindowPos. Busca en este mismo foro que hay temas abondo.
Suerte.
216
« en: Lunes 29 de Noviembre de 2004, 17:30 »
Kaixo FRIJU.
Poca o nula experiencia puedo aportar en el asunto, pero otros lo hacen por mi: en el foro hay varios temas hablando de esto.
Por lo demás, según creo la cosa estriba en conseguir el font adecuado a tu caso EAN/UCC 128 (en principio lo que hay por ahí del EAN128 es de pago, y ya comprenderás lo que quiero decir con 'en principio') , 29 , etc.
Una vez que tienes el font, imprime/visualiza el código y listo.
En cuanto a los lectores, ellos mismos te proporcionarán según modelo un modo de transmitir el código que leen.
Por otro lado, en internet sí que hay abundantes especificaciones sobre códigos de barras, formas de interpretar códigos, resolución de dígitos de verificación, etc.
Suerte. Agur.
217
« en: Lunes 29 de Noviembre de 2004, 17:20 »
Esto último que cuentas es sólo cierto en parte: sólo en caso de que estemos hablando de formularios mostrados con un 'formulario propietario' (2º parámetro del método Show) o en caso de que los formularios sean modales.
Chao.
218
« en: Lunes 29 de Noviembre de 2004, 14:58 »
Como muy bien dice o colega tiquinho, busca en este mismo foro. Usa como palabra a buscar BitBlt.
Chao.
219
« en: Lunes 29 de Noviembre de 2004, 14:55 »
Hola. No he comprendido muy bien el hilo de esta conversación y no sé si con lo que dijo Cyclop has conseguido resolver tu problema... pero cuento un pequeño asunto que puede dar algún que otro quebradero de cabeza y que enlaza en parte directamente con lo que dijo Cyclop: Si cuando nos referimos a algún miembro de un formulario, control de usuario, etc, lo hacemos directamente a través del nombre de objeto en el proyecto, dependiendo de lo que hagamos puede que no estemos seguros de a qué instancia del objeto nos referimos. Por este motivo, lo deseable es instanciar siempre los objetos a través de la correspondiente variable de objeto. ESTO NO ME GUSTA . . Form1.Text1.Text = "Un texto" . .
ESTO ME GUSTA MÁS Dim frm1 As Form1 Set frm1 = Form1 . . frm1.Text1.Text = "Un texto" . . set frm1 = Nothing
Podría parecer lo mismo... pero no lo es. Chau.
220
« en: Lunes 29 de Noviembre de 2004, 14:42 »
Kaixo. No sé si a estas alturas te servirá de mucho, pero ... El error tampoco sé a qué puede deberse, pero tal vez tenga algo que ver con esta nota: Nota Cuando utilice el método OpenURL, establezca la propiedad URL antes que las propiedades Password y UserName. Si establece la propiedad URL en último lugar, las propiedades UserName y Password estarán establecidas a "".
Al no estar establecida previamente una url, puede que con el usuario y la contraseña pase algo de esto... prueba así a ver: INet1.URL="FTP://AquiHayUnaIP" INet1.UserName = "red" Inet1.Password = "red1" Inet1.RemotePort = 21 INet1.OpenURL INet1.Execute "Type Bynari" INet1.Execute "PUT archivo1 archivo2"
Sobre lo del tipo binario... en el código anterior puedes encontrar la solución: ejecuta el comando Type bynari. Fíjate También en este ejemplo de la ayuda: Dim b() As Byte Dim strURL As String ' Establece strURL a una dirección válida. strURL = "FTP://ftp.GreatSite.com/China.exe" b() = Inet1.OpenURL(strURL, icByteArray) Open "C:\Temp\China.exe" For Binary Access _ Write As #1 Put #1, , b() Close #1
Espero que esto te sirva de algo. Agur.
221
« en: Viernes 19 de Noviembre de 2004, 09:59 »
Kaixo. Usando un control Inet supongo que se podría hacer utilizando el comando FTP 'dir' y/o los comandos 'ls' o 'mls' para mostrar el contenido de uno o varios directorios respectivamente. Para recuperar esta información, fíjate en lo que dice la ayuda del control. En este ejemplo se utiliza el método GetChunk en el evento StateChanged para obtener un bloque de datos. Se emplea una instrucción Select Case para determinar lo que se debe hacer en todos los estados posibles. En el ejemplo se supone que en el formulario hay un control TextBox llamado txtData.
Private Sub Inet1_StateChanged(ByVal State As Integer) ' Recupera la respuesta del servidor con el método ' GetChunk cuando State = 12. En este ejemplo se ' supone que los datos son texto.
Select Case State ' ... No se muestran los demás casos.
Case icResponseReceived ' 12 Dim vtData As Variant ' Variable de datos. Dim strData As String: strData = "" Dim bDone As Boolean: bDone = False
' Obtiene el primer bloque. vtData = Inet1.GetChunk(1024, icString) DoEvents Do While Not bDone strData = strData & vtData DoEvents ' Obtiene el bloque siguiente. vtData = Inet1.GetChunk(1024, icString) If Len(vtData) = 0 Then bDone = True End If Loop
txtData.Text = strData End Select End Sub
A ver si esto te sirve. Por cierto, este control también permite definir el puerto a usar (joder, parece que esté haciendo propaganda del control... que no, hombre, que no, sólo para que lo tengas en cuenta). Agur
222
« en: Viernes 19 de Noviembre de 2004, 09:49 »
Hola juravi.
El texto para un error 20354 es 'Error definido por la aplicación o el objeto', lo que quiere decir que en algún objeto que estas usando (probablemente mediante automatización) se ha producido un error inherente al propio objeto y ajeno a vb.
Con los datos que das no se puede hacer nada... Revisa tu código y algun manual o ayuda de la aplicación externa que usas.
Suerte.
223
« en: Viernes 19 de Noviembre de 2004, 09:43 »
Hola Sirespi. Sagutxo da una opción adecuada... Con un tipo double puedes almacenar números desde 1,79769313486232E308 a -4,94065645841247E-324 para valores negativos y desde 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos. En una variable double ocupa en almacenamiento 8 bytes, un long tan sólo 4. A una variable double le puedes asignar tranquilamente el valor 1. Además de esto, sería muy buena idea utilizar como incremento para el contador un valor decimal. Para hayar la cuenta final, tan sólo habría que multiplicar el contador por la unidad seguida de tantos ceros como decimales tenga el incremento: Private dContador As double Private Sub SumaUno() dContador = dContador + 0.001 End Sub Private Sub Resultado MsgBox "Cuenta: " & dContador * 1000 End Sub
Ten en cuenta que aunque utilizaras más variables, al querer sumar el contenido de una con el valor de la siguiente multiplicado por su valor máximo podrías obtener un desbordamiento de igual forma. Tendrías que usar variables (una matriz dinámica sería lo tal) de tipos más pequeños y luego mediante una función operar entre cada una para ir 'montando' el número en un string. Chao.
224
« en: Viernes 19 de Noviembre de 2004, 09:27 »
Hola Jose Arriagada. Cosas curiosas... Prueba asignado a la variable un valor con decimales: Dim xValor as Double xValor = 0.0
Chao.
225
« en: Viernes 19 de Noviembre de 2004, 09:24 »
Hola.
Sobre el uso de temporizadores mediante función api: [URL]http://foros.solocodigo.com/index.php?showtopic=8455[/URÑ]
Tal vez resulte más eficiente para facturar tiempo acorde con la realidad recuperar la hora del sistema en una variable al comenzar y en otra al finalizar, para luego con Datediff hayar la diferencia entre las dos variables. Será más exacto y no ocuparás tiempo con un timer funcionando por ahí.
Chao.
Páginas: 1 ... 7 8 [9] 10 11 ... 43
|
|
|