|
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 [2] 3 4 ... 43
26
« en: Jueves 31 de Marzo de 2005, 10:40 »
Hola.
Solicito, disculpa la intromisión en el tema, pero me gustaría preguntarle a Widark o a alguien que lo sepa y pase por aquí... ¿qúe es eso del Splash?
Obrigado.
27
« en: Jueves 31 de Marzo de 2005, 10:37 »
Hola.
Me parece recordar que el api del gdi proporciona alguna función para rotar imágenes. Siendo así, lo único que se necesita es pintar el texto en el correspondiente DC y rotar la imagen.
Chao.
28
« en: Jueves 31 de Marzo de 2005, 10:29 »
Buenas... Hoy intentando contestar un tema a 'cangri' en el foro de VB, me encontré con este error tras pulsar el botón 'responder': Forbidden You don't have permission to access /index.php on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. -------------------------------------------------------------------------------- Apache/1.3.33 Server at foros.solocodigo.com Port 80
La respuesta no se almacenó. Probé de nuevo después de un rato y reiniciar el pc (truco del informático) y por supuesto seguía ocurriendo lo mismo. También es significativo que cuando pulsé para responder a la discusión se me pedía identificarme de nuevo diciéndome que no tengo permiso para responder. Curiosamente una vez identificado nuevamente parecía sí querer permitirmelo. El mensaje es bastante explícito. ¿Existen temas que necesiten para ser respondidos de algún tipo de permiso especial? Chao.
29
« en: Jueves 31 de Marzo de 2005, 09:41 »
Hola saroaes21.
No sé cómo hacer tal cosa con un formulario, pero supongo que si en lugar de un form usas un control ocx, sí podrás hacerlo (el cómo es cosa de html).
Suerte.
30
« en: Jueves 31 de Marzo de 2005, 09:38 »
Hola roy. Private Sub DataGrid1_SelChange(Cancel As Integer) Dim lIdx As Long, lFrom As Long, lTo As Long lIdx = DataGrid1.SelBookmarks.Count If lIdx = 2 Then lFrom = DataGrid1.SelBookmarks(0) lTo = DataGrid1.SelBookmarks(1) Dim iStep As Integer If lTo < lFrom Then lTo = lTo + 1 lFrom = lFrom - 1 iStep = -1 Else lTo = lTo - 1 lFrom = lFrom + 1 iStep = 1 End If For lIdx = lFrom To lTo Step iStep DataGrid1.SelBookmarks.Add lIdx Next lIdx End If End Sub
Chao.
31
« en: Jueves 17 de Marzo de 2005, 15:44 »
Oye... que acabo de caer da burra fijándome bien: utilizas un flexgrid jerárquico y el ejemplo es para uno corriente y moliente. Supongo que te sirve igual... pero si no es así, avisa.
chau.
32
« en: Jueves 17 de Marzo de 2005, 15:37 »
Vale. No sé cómo es la vista que obtienes en la consulta, pero suponiendo que obtienes dos campos por registro: nombre y valor para el día y que los registros están ordenados de esta forma: reg 1 = lunes, reg 2 = martes, reg 3= mierc ... reg 5 =viernes, reg 6 = lunes, ... La cosa podría hacerse así: Suponiendo que el recordset se llame rs1 y que el Grid se llame flx1 flx1.Clear flx1.FixedRows = 1 flx1.FixedCols = 0 flx1.Rows = 50 / 5 flx1.Cols = 6 flx1.TextMatrix(0, 0) = "Nombre" flx1.TextMatrix(0, 1) = "Lunes" flx1.TextMatrix(0, 2) = "Martes" flx1.TextMatrix(0, 3) = "Miércoles" flx1.TextMatrix(0, 4) = "Jueves" flx1.TextMatrix(0, 5) = "Viernes" Dim i1 As Integer, lCta As Long rs1.MoveFirst Do Until rs1.EOF lCta = lCta + 1 flx1.TextMatrix(lCta, 0) = rs1.Fields(0).Value flx1.TextMatrix(lCta, 1) = rs1.Fields(1).Value For i1 = 2 To 5 rs1.MoveNext flx1.TextMatrix(lCta, i1) = rs1.Fields(1).Value Next i1 rs1.MoveNext Loop
Por supuesto que este código puede cascar o producir resultados inesperados si la secuencia de los registros no es como comentaba... pero bueno, esas son cosas que deberás ir ajustando. De todas formas, te recomendaría intentar usar una (o varias) sentencias SQL que devolvieran una vista de los datos tal y como la necesitas (la cosa sería por lo menos 4 veces más rápida). Suerte.
33
« en: Jueves 17 de Marzo de 2005, 15:22 »
Hola solitario_lobo.
No conozco el control que comentas... porque supongo que no te estás refiriendo a un control MonthView, ni a un DatePicker, claro.
Si no te refieres a ninguno de los anteriores, lo mejor es que intentes localizar aluna información al respecto por parte de la casa desarrolladora del control.
Si por el contrario, sí te refieres a uno de esos controles que citaba, copia al directorio del sistema y registra el archivo MSCOMCT2.OCX.
Suerte.
34
« en: Jueves 17 de Marzo de 2005, 15:15 »
Hola pepo.
Ante lo que cuentas y el código que posteas se podrían hacer varias consideraciones.
1 - La ejecución siempre será más rápida usando vba desde el propio libro, por el mismo motivo que siempre será más rápido el acceso a una variable local que a una propiedad encapsulada en una clase dentro del mismo ejecutable, que a su vez será más rápido que el acceso a otra propiedad de otra clase en algun otro servidor.
2 - En lugar de setear variables de objeto de la clase cell (cosa que supongo, porque no veo la declaración... seguramente sean variant si es que no hay un Option Explicit por ahí) será mucho más efectivo almacenar los valores en variables double, por ejemplo.
3 - Utiliza como índices para las celdas distintas variables: unas con el valor de la variable del bucle + 1 y otras con -1, para evitar realizar varias sumas y restas en cada iteración (es decir, si tienes 'i + 1' tres veces en el bucle, usa una variable asignándole el valor i +1 y utiliza la variable en lugar de la operación.
Sólo con observar los puntos 2 y 3 supongo que verás como va mejorando el rendimiento del método.
Chao.
35
« en: Jueves 17 de Marzo de 2005, 15:01 »
Hola solcito. La verdad es que no consigo comprender como deseas visualizar los datos. Por lo que entendí, dices que no te vale una vista de este estilo: Persona_________ Lunes____Martes__Miercoles__Jueves__Viernes__ Juan perez________8:00_____8:15_____8:04_____8:05____8:06
y tampoco esta: Persona________Día__________Hora__ Juan pérez_____LUNES_______8:00 _______________MARTES______8:15 _______________MIÉRCOLES___8:04 _______________JUEVES______8:05 _______________VIERNES_____8:06
Tal vez pudieras describir más la vista que necitas... Chao.
36
« en: Jueves 17 de Marzo de 2005, 14:45 »
Hola roxiii.
Revisando este tema, se me olvidaba decirte (por si no lo sabías ya) lo siguiente como complemento:
Para registrar un exe activeX llama al programa pasándole como parámetro /Register para registrar o /Unregister para desregistrar.
Chao.
37
« en: Miércoles 16 de Marzo de 2005, 15:21 »
Hola.
No veo mucho sentido en la práctica a lo que pretendes... sería mucho más sencillo (y económico en almacenamiento) agregar todos los archivos comprimidos en un zip o similar.
De todas formas el asunto podría hacerse siguiendo estos pasos:
1 - Copia el ejecutable principal, por ejemplo PPAL.EXE, con por ejemplo nombre CONTENEDOR.EXE.
2 - Abre CONTENEDOR.EXE en modo binario.
3 - Escribe al final de CONTENEDOR.EXE el nombre del archivo que vas a añadir (PPAL.EXE)
4 - Escribe al final de CONTENEDOR.EXE el tamaño en bytes que tenga el nombre de archivo (PPAL.EXE = 8 bytes), empaquetado en 2 bytes debería sobrar.
5 - Escribe al final de CONTENEDOR.EXE el tamaño en bytes que tenga PPAL.EXE (empaquetado en 4 bytes debería llegar).
6 - Abre el archivo AÑADIR_1.EXE también en modo binario y escribe en CONTENEDOR.EXE los bytes correspondientes.
7 - Escribe al final de CONTENEDOR.EXE el nombre del archivo que acabas de añadir (AÑADIR_1.EXE)
8 - Escribe al final de CONTENEDOR.EXE el tamaño en bytes que tenga el nombre de archivo (AÑADIR_1.EXE = 12 bytes), empaquetado en 2 bytes debería sobrar.
9 - Escribe al final de CONTENEDOR.EXE el tamaño en bytes que tenga AÑADIR_1.EXE (empaquetado en 4 bytes debería llegar).
10 - Repite los pasos 7, 8 y 9 con cuantos archivos desees añadir.
Por supuesto PPAL.EXE (ahora ya CONTENEDOR.EXE) debe estar preparado para hacer lo siguiente.
1 - Abrirse a si mismo en modo binario.
2 - Leer 4 bytes de CONTENEDOR.EXE desde el offset LOF - 4 para obtener el tamaño del archivo a extraer.
3 - Leer 2 bytes de CONTENEDOR.EXE desde el offset LOF - 6 para obtener el tamaño del nombre del archivo.
4 - Leer n=Tamaño_nombre_archivo bytes de CONTENEDOR.EXE desde el offset LOF - 6 - Tamaño_nombre_archivo para obtener el nombre de archivo original.
5 - Abrir el archivo cuyo nombre obtuviste en el paso anterior en modo binario.
6 - Leer de CONTENEDOR.EXE tantos bytes como tenga el tamaño de archivo obtenido en el punto 2, desde el offset offset_anterior - tamaño archivo.
7 - Escribe los bytes que leiste en el punto anterior en el nombre de archivo.
8 - Imagino que ya habrás pillado la mecánica del asunto... sigue hasta que el offset sea = 0.
Suerte.
38
« en: Miércoles 16 de Marzo de 2005, 14:39 »
Hola MindEye.
Es que resulta que esas propiedades a las que te refieres son de sólo lectura en tiempo de ejecución.
Se me ocurren dos posibles soluciones:
1 - Usar dos textbox y hacer visible/invisible uno u otro según te interese. 2 - Currarte algo parecido a un textbox dibujándolo tú todo.
La primera solución es sin duda poco deseable, pero es lo más sencillo frente a hacer un ocx con una área en la que poder escribir o mostrar y modificar texto, con el correspondiente engorro que supone tener que controlar y dibujar la posición del cursor, texto seleccionado y cosas por el estilo.
Suerte.
39
« en: Martes 15 de Marzo de 2005, 15:16 »
Hola az8.
Sobre el tema del control remoto: Necesitarás tener instalado software en los equipos que quieres controlar (y por supuesto en el que los controle). Si este soft lo quieres desarrollar tú, creo que lo más factible sería comunicarse con los programas que apagarán el sistema localmente mediante sockets. Ponlos a la escucha y cuando tu les envíes la correspondiente señal, pos que se apaguen. ... Por el foro hay abundantes ejemplos de uso del winsock.
Sobre el otro tema: Cosas parecidas a lo que quieres las hay a tutiplen por el foro (aunque estén por separado). Usa el buscador porque no siempre hay que esperar el chollo ya hecho.
Suerte.
40
« en: Martes 15 de Marzo de 2005, 15:08 »
Hola misiodan
No explicas qué es lo que seleccionas para guardar, ¿varias filas?,¿varias columnas?,¿una celda?...
Segun lo que quieras usa las propiedades del datagrid:
- SelBookmarks. Para conocer las filas seleccionadas.
- SelStartCol y SelEndCol. Para conocer respectivamente la primera y la última colunma seleccionada.
- Row. Permite conocer la fila actual del recordset.
- Col. Permite conocer la coluna seleccionada actual (en el 'registro', no en el encabezado) del grid.
- Columns. Da información sobre cualquier columna.
Supongo que el grid estará enlazado a un control data.
- Recordset. Usa esta objeto del control para manejarte a gusto por los datos.
Hala, a practicar.
Suerte.
41
« en: Martes 15 de Marzo de 2005, 14:48 »
Hola. Yo creo los accesos directos con esta función: Private Function CrtShortCut(ByVal Link As String, ByVal Cmd As String) As Boolean On Error GoTo Err_links Dim objWS As Object Set objWS = CreateObject("WScript.Shell") Dim objSC As Object Set objSCsc = objWS.CreateShortCut(Link) objSC.TargetPath = Cmd objSC.Save CrtShortCut = True Exit_Links: Set objSC = Nothing Set objWS = Nothing Exit Function Err_links: MsgBox "Erro ó crea-lo acceso directo '" & Link & "'." & String(2, vbCrLf) _ & "(" & Err.Number & ") " & Err.Description , vbCritical, "Instalar TTPP" Resume Exit_Links End Function
La llamo pasándolo como parámetros la ruta y nombre del archivo lnk y el destino: CrtShortCut "C:\Ruta\MiArchivo.lnk" , "C:\Ruta\Programa.exe"
y me funciona. Chao.
42
« en: Sábado 12 de Marzo de 2005, 13:30 »
Puede que no fuera tan pesao si la ayuda proporcionada fuera buena
Mira chaval, me parece que te equivocas de foro. Si tanto te interesa el fusión: cómpratelo. Si no quieres comprarlo pues búscate la vida en la mula o por ahí..., y si no, aprende a programar con componentes, pero no vengas con historias y quejas por aquí, porque ya te dije que te equivocabas de foro. Por otra parte, yo no soy quién para decirte a ti nada, que no soy moderador ni ná, pero nunca me corto en decir lo que pienso cuando me apetece (al igual que tú, supongo) así que te digo que sí... que eres pesao, pero pesao, pesao de cojones y que en lo que a mi respecta me importa bien poco cualquier urgencia que puedas tener. Suerte.
43
« en: Sábado 12 de Marzo de 2005, 09:01 »
Hola Amenoar.
Tal vez te sirva el método Delete del objeto ActiveChart (clase Chart). O tal vez, sin ser tan radical, prueba con Deselect.
Ya nos contarás. Chao.
44
« en: Sábado 12 de Marzo de 2005, 08:55 »
Hola elmango80. Nuevamente la solución es usar un thread distinto. Usa un nuevo proceso para realizar la lectura del puerto: Crea un programa independiente para atender la lectura del puerto. Luego llama una función de este estilo pasándo como parámetro la ruta y nombre de tal ejecutable: Option Explicit Private Const STILL_ACTIVE = &H103 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 GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Sub LeerPuerto(Byval ExeLeerPuerto as string) On Error GoTo Err_Sinc Dim l1 As Long, lRc As Long l1 = OpenProcess(PROCESS_QUERY_INFORMATION, False _ , Shell(ExeLeerPuerto, vbMinimizedNoFocus)) Do GetExitCodeProcess l1, lRc Sleep 100 DoEvents Loop While lRc = STILL_ACTIVE MsgBox "Finalizó la lectura del puerto" Exit Sub Err_Sinc: MsgBox "Fallo al intentar arrancar lectura del puerto." & String(2, vbCrLf) _ & "(" & Err.Number & ") " & Err.Description, vbCritical, "Sincronizar" End Sub
Si quieres también puedes eliminar el ciclo y una vez lanzado el programa olvidarte. Eso sí, si necesitas comunicación entre los dos programas... tendrás que currártelo. Mira si quieres este post por si te sirve http://foros.solocodigo.com/index.php?showtopic=13730 aunque roxiii aún no lo ha cerrado... Suerte.
45
« en: Sábado 12 de Marzo de 2005, 08:44 »
Hola avaguin.
Si no das más datos, malamente se podrá saber a que se debe lo que te ocurre, pero digo yo que probablemente utilices en tu proyecto unos cuantos ocx. Si esto es así, supongo que si los creas y compilas como un proyecto aparte, esto dejará de sucederte.
Suerte.
46
« en: Sábado 12 de Marzo de 2005, 08:41 »
este masipm es más pesao que la música de los caballitos
47
« en: Sábado 12 de Marzo de 2005, 08:40 »
Hola jodijo5.
Utiliza la función del api ExitWindowsEx
Chao.
48
« en: Sábado 12 de Marzo de 2005, 08:33 »
Hola Miguel Angel Rodríguez. Lo primero que debes hacer es obtener la ecuación de la recta coreespondiente entre los dos puntos. Una vez que la tienes haz un bucle que recorra los valores para x (o y, claro) en el intervalo entre los dos puntos. Obten el valor de y para cada x mediante la ecuación punto pendiente de la recta y mueve la carta a la posición. Algo así: Option Explicit Private Function Pendiente( _ Byval x1 as Double, byval y1 as Double _ ,byval x2 as Double,Byval y2 as Double) As Double If x2 - x1 <> 0 Then Pendiente = (y2 - y1) / (x2 - x1) Else Pendiente = 1 End If End Function Private Function PuntoPendiente_Get_Y( _ Byval x1 as Double, byval y1 as Double _ ,byval x2 as Double,Byval y2 as Double , Byval X as Double) As Double Dim d1 As Double, d2 As Double d1 = Pendiente(x1, y1, x2, y2) d2 = -d1 * x1 + y1 PuntoPendiente_Get_Y = d2 + d1 * X End Function Private Sub Mover(Byval Index as integer, Byval DestX as Double, Byval DestY As Double) Dim dFromX As Double, dFromY as Double dFromX = imgcarta(index).left + imgcarta(index).width /2 dFromY = imgcarta(index).top + imgcarta(index),Height / 2 Dim dX as double For dX = dFromX To DestX imgCarta(index).Move dX _ , PuntoPendiente_Get_Y(dFromX, dFromY, DestX, DestY, dX) Next dX End Sub
La esencia del tema sería algo así, ahora bien, puedes optimizar este código muchísimo más (creando estructuras para no pasar tantas variables, hallando el valor de la pendiente de la recta al principio para hacerlo una sola vez, etc.), pero eso ya es cosa tuya. Temas a estudiar: - Ecuación de la recta que pasa por dos puntos. - Pendiente de una recta. - Ecuación punto pendiente de la recta. Suerte. Se me esquecía: - También tendrás que buscarte la vida para suavizar el movimiento de la carta y evitar un efecto de flickeo. Debes incluir en el bucle un DoEvents o un Refresh para que se pueda actualizar la imagen que visualices o en tu caso para que se redibuje el control (yo me buscaría la vida para hacerlo con imágenes).
49
« en: Sábado 12 de Marzo de 2005, 08:05 »
Hola solcito. CursorLocation = adUseClient
Tener el cursor sql 'del lado del cliente' es lo que hace funcionar la prodiedad recordcount (Esto teniendo en cuenta que hay proveedores de datos que no soportan esta propiedad). Si usas una llamada a un procedimiento almacenado mediante el método execute del recordset, mucho me temo que no te va funcionar la propiedad recordcount... pero siempre hay solución: usa una sentencia SQL del tipo "SELECT COUNT(*) FROM Tabla" para obtener la cuenta de registros de tu selección. Chao.
50
« en: Miércoles 9 de Marzo de 2005, 16:57 »
Hola m@gnus.
No te he comprendido, pero... Una vez tengas ciertos valores que 'quieres pasar' a otro grid, ejecuta la correspondiente sentencia SQL que inserte los registros y luego refresca el grid... o algo así.
Chao.
Páginas: 1 [2] 3 4 ... 43
|
|
|