Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - gulabyte

#61
Estoy incorporando un traceroute a mi programilla y le he metido tambien la api google map y bueno lo que quiero hacer es marcar las coordenadas de cada salto del trace en el mapa de google.

De momento el problema lo tengo con el WebBrowser. Bueno explico el proceso que me he planteado:
1. Primero hago el trace route y listo los hops en un listbox. [Eso ya lo hago]
2. Después hay que conseguir las coordenadas de cada salto a partir del IP para hacer las marcas.
3. Hacer marcas en API Google Maps con todos los hops (saltos)
4. Unirlos mediante rayas.
5. Mostrar mapa

Para eso tengo un WebBrowser que se encarga de cargar la pagina .htm que voy creando a partir de las opciones; y otro para conseguir las coordenadas (que tendría que ir en .visible = false). El problema es que meto en un for:
For i = 1 To 128
#62


Muy interesante el aporte !!
Gracias seba123neo por el código y a hannah por las modificaciones. Recuerdo haber estado yo también investigando algunos códigos fuente de las páginas que daban este servicio.
Está estupendo para hacer un localizador de IP's aunque muchas veces la central o la localización del proxy del ISP esté a cientos de kilómetros desde donde consultamos el ordenador con el IP.
Me pregunto si has sido tú el que se las ha ingeniado para comunicarte con google.maps mediante html, si es así felicidades y gracias por compartir el logro. Nunca se me habría ocurrido crear un archivo html y después abrirlo con un WebBrowser.
Me da que va a ser una función más de mi cliente: GREAT v2.1 (con localizador vía satélite mediante IP)  :laugh: :laugh: :laugh: no diréis que no suena bien...

Bueno gracias de verdad por el aporte,

Salu10
#63

Aunque puede ser una chapuza se me ocurre que crees una especie de keylogger que capte lo que escribas con el tecledo en una variable y si se llega a crear alguna palabra que reaccione de algún modo.

Para capturar las teclas pulsadas puedes usar esto:

Dim KeyCode As Integer, Written As String

Do
DoEvents

For KeyCode = 8 To 255
        If GetAsyncKeyState(KeyCode) = -32767 Then 'Si la tecla está pulsada retornará el valor -32767
           
            Select Case KeyCode
                    ' carácteres según ASCII
                   
                    Case 32
                    Written = Written & " "
                    'Números (48-57)
                    Case 48
                        If GetShift = True Then
                            Written = Written & "="
                            Else: Written = Written & "0"
                        End If
                    Case 49
                        If GetShift = True Then
                            Written = Written & "!"
                            Else: Written = Written & "1"
                        End If
                    Case 50
                        If GetShift = True Then
                            Written = Written & "''"
                            Else: Written = Written & "2"
                        End If
                    Case 51
                        If GetShift = True Then
                            Written = Written & "·"
                            Else: Written = Written & "3"
                        End If
                    Case 52
                        If GetShift = True Then
                            Written = Written & "$"
                            Else: Written = Written & "4"
                        End If
                    Case 53
                        If GetShift = True Then
                            Written = Written & "%"
                            Else: Written = Written & "5"
                        End If
                    Case 54
                        If GetShift = True Then
                            Written = Written & "&"
                            Else: Written = Written & "6"
                        End If
                    Case 55
                        If GetShift = True Then
                            Written = Written & "/"
                            Else: Written = Written & "7"
                        End If
                    Case 56
                        If GetShift = True Then
                            Written = Written & "("
                            Else: Written = Written & "8"
                        End If
                    Case 57
                        If GetShift = True Then
                            Written = Written & ")"
                            Else: Written = Written & "9"
                        End If
                   
                    'Letras (65-90)
                    Case 65 To 90
                    If GetShift = True Then
                        Written = Written & UCase(Chr$(KeyCode))
                        Else: Written = Written & LCase(Chr$(KeyCode))
                    End If
                   
                    Case 188 'Koma
                    If GetShift = True Then
                        Written = Written & ";"
                        Else: Written = Written & ","
                    End If
                    Case 190 'Punto
                        Written = Written & "."
                    Case 192
                    If GetShift = True Then 'ñ
                        Written = Written & "Ñ"
                        Else: Written = Written & "ñ"
                    End If
                    Case 219 '?
                    If GetShift = True Then
                        Written = Written & "?"
                        Else: Written = Written & "'"
                    End If
                    Case 221 '¿
                     If GetShift = True Then
                        Written = Written & "¿"
                        Else: Written = Written & "¡"
                     End If
            End Select

Next KeyCode
DoEvents
Loop

Lo que hace es comprobar una a una si las teclas están pulsadas pero lo hace infinitesimalmente rápido, aunque escribas muuy rápido te las caza todas. Así puedes ir creando una variable (Written) y añadir la sentencia una sentencia If InStr:

If InStr(1, Written, "fiesta", 1) ' Comparamos los strings para ver si coinciden en algún trozo, si es así nos devolvera la posición donde empieza, y si no está en el string nos devolvera 0. Así vas comparando el string Written por cada letra que se escribe (por cada vez que se cumple la sentencia de GetAssyncKeyState, debajo de él). If Not InStr(1, Written, "fiesta", 1) = 0 Then [tooltiptext].
y te recomendaría crear también una sentencia para vaciar la variable written. If Len(Written) > 200 Then Written = "".

Es lo único que se me ha ocurrido, quiza sea algo parecido lo que hacen los de microsoft para que el visual responda al escribir palabras clave  :laugh: :laugh:, comenta algo si te funciona o no.

Salu10
#64

Gracias seba123neo, la clave era la función GetClientRect, para conseguir el rectángulo del objeto y después ClientToScreen para conseguir el punto del objeto y finalmente el OffsetRect para colocar al rectángulo.

Dejo el código para si alguien le sirve:

Public Sub Restringir(handle As Long)

Dim ObjectRect As RECT 'Declaramos el rectangulo (type RECT)
Dim Point As POINTAPI 'Declaramos el punto (el que será punto de partida del rectángulo, de ahí para la izquierda y para abajo)

GetClientRect handle, ObjectRect 'Obtenemos el rectángulo del objeto a través de su handle

ClientToScreen handle, Point 'Obtenemos el punto donde está colocado el objeto a través del handle

OffsetRect ObjectRect, Point.x, Point.y 'Recreamos el rectángulo esta vez colocándolo donde esta el objeto al que queremos restringir
     
Call ClipCursor(ObjectRect) 'Llamamos a la función que limita el cursor al rectángulo que hemos creado

' Si quisieramos que esto fuera realmente efectivo, que no se interrumpiera al hacer click, o al pasar a otro foco, etc... podríamos meter
' la función ClipCursor en un timer para que se repitiera consecutivamente sin tener porque crear otra vez el rectángulo.

End Sub


este es el sub para restringir el cursor al objeto mediante su hanlde

Private Type POINTAPI
        x As Long
        y As Long
End Type

Private Type RECT
    Izquierda As Long
    Arriba As Long
    Derecha As Long
    Abajo As Long
End Type


estos son los tipos del punto y el rectángulo

Private Declare Sub GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT)
Private Declare Sub OffsetRect Lib "user32" (lpRect As RECT, ByVal x As Long, ByVal y As Long)
Private Declare Function ClipCursor Lib "user32" (lpRect As RECT) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long


las funciones que hay que declarar para restringir, creo que no me dejo ni una

a y gracias otra vez por la rápida respuesta
#65

Cómo puedo obtener la posición de un objeto en pantalla y las medidas para luego crear un RECT (rectángulo) donde pueda restringir el cursor.

Algo como GetObjectDimensions (ByVal hWnd As Long) As RECT

o GetObjectTop, GetObjectLeft, Width y Heigh para luego crear el RECT manualmente.

Lo que necesito es alguna funcíon que devuelva la posición y medidas de un objeto mediante su handle.

Salu10 y Gracias de antemano
#66

Lo que me gustaría hacer es poner un par de banderitas en una esquina del form principal para que al hacerles click se cambie el idioma de los labels, etc..

Lo único que se me ha ocurrido es meter la lista de todos los labels, combobox, listbox en un Label1_Click() y cambiarles el .caption uno a uno traduciendo cada uno  :-[, Pero pensándolo mejor seguro que hay alguna otra alternativa muucho mejor

No sé si hay que crear algún archivo .lang con los .caption de los labels o si hay que crear una instalación o qué. Recuerdo que en el Cactus Joiner de MadAntrax había unas banderitas en la esquina superior pero al darles aparecía un MsgBox diciendo que todavía no se había agregado ningún idioma. No sé si lo habrá hecho.

Si alguien sabe cómo hacerlo pues ya sabe, ya está tardando.

Gracias de antemano

Salu10  ;)
#67

Te dice que la variable de tipo object no está establecida porque el objeto del comobox en sí todavía no se a creado en el form, es decir estás llamando al comobobox sin que éste todavía esté en el form. [Todavía no se ha ocupado el espacio en memoria al que estás llamando o al que estás apuntando desde el Form_Load()]

Lo que tienes que hacer es ponerlo en el Form_Activate() que se ejecuta cuando se "activa" el form (cuando están todos los objetos cargados). O si no en el Combo_Load() que es donde te ha dicho que lo pongas seba123neo. Este se ejecuta al activarse (después de cargarse) el objeto Combobox. Yo creo que a las dos irá bien.

A ver que tal  ;)

Salu10
#68

No se lo que es eso de reporte de cristal report XI pero se me ocurre que igual podrias leer el texto o lo que sea con el bloc de notas, es posible que aparezca lo que necesitas sin el programa ese.

Si es posible, si puedes ver el texto o las cifras o lo que necesites pues cambiale la extensión a .txt y abrelo desde visual basic como si fuera un archivo de texto. Así vas agregando cada linea o lo que sea a un listbox o a un textbox.

Private Sub Form_Load()
Dim Line As String

Open "C:\text.txt" For Input As #1
    Do While Not EOF(1) 'End Of File
        Input #1, Line
        ListWow.AddItem List
    Loop
Close #1

End Sub


Quizás tengas que arreglartelas un poco para separar las lineas o los datos de cada linea pero eso lo puedes hacer ya en visual basic metiendolo todo en una variable y apañandola.

Repito no sé ni lo que es eso de Cristal Report XI pero podría funcionar, a ver que tal.

Salu10
#69
Jjaja Lord Manson está claro que vienes al foro con todas tus buenas intenciones y está claro que quieres aprender.

Pero también es verdad que a la gente aquí no le gusta hacer los deberes de los demás. La cuestión es que tú quieres hacer ese trabajo y no te las arreglas con el VB. Dices que tienes la base pero no sé lo que puede ser eso.

Si quieres sube el código (a un servidor de archivos) y yo lo miro y pienso qué hacer. Si encuentro la solución posteo el código comentado y te cuento lo que he hecho o te sugiero alguna solución para que lo hagas tú.

Aprender a programar se hace programando, no te vale para nada leerte un manual de 1000 hojas que te empieza a explicar lo que es un bucle sin entender en realidad el concepto. Lo mejor es programar, desde donde sepas y asi escribiendo y escribiendo, llegar a conclusiones, conclusiones que tú has sacado, no cosas que has leido. La programación es cuestión de ingenio, esa creatividad que necesitas para solucionar problemas que te surgen al escribir un programa, eso es algo que no se estudia. Una vez sepas lo que son las variables, las funciones, sepas usar bien la sentencia If (la clave, si sabes eso sabes mucho y mira que es una chorrada) ya deberías empezar a programar, hacer pequeñas aplicaciones y solucionar los pequeños obstaculos que te surgan aunque sea con chapuzas, no serás el primero.

Es decir lo que hay que hacer es aprender y no estudiar. Obviamente para aprender y manejarte con el lenguaje tienes que familiarizarte un poco tanto con el lenguaje como con la interfaz del VB6, para eso te recomiendo http://geuretxoku.bravehost.com/Downloads/Visualbasic6.pdf coge los conceptos generales, haz un par de ejemplos y verás como te las apañas.

Repito si quieres sube tu código y lo miro, pero insisto en que es una excepción, yo también he querido muchas veces tener a alguien que sepa la ostia y que venga y que me aclare todas las dudas, pero no lo he tenido y es así como he aprendido, hay que buscarse la vida, bajate ejemplos, tutoriales pero no leas por leer, comprende lo que lees y si no pasa de ello.
Insisto si quieres aprender a progamar lo harás.

Un consejo la proxima vez que quieras que te ayuden con un "proyectito escolar" no pongas eso como título porque aparte de que suena muyy cursy e irritante en sí pues obviamente la gente no te va a responder con todo su interés. Recuerda que los que estamos aquí estamos por que esto nos gusta, nos apasiona, sentimos curiosidad, interés y admiración por este mundo y queremos aprender, entender, conocer.

Si tú vienes diciendo que tienes deberes para hacer que te han mandao de nose donde porque nose donde se aprenden estas cosas, me imagino que en alguna carrera te pediran que controles un poco de esto y de aquello. Y necesitas nuestra ayuda para hacerlo y si no muestras ningún interes en el tema pues obviamente la gente va a pasar de tí. En cambio si no nombras que es para la escuela y lo planteas como un problema especifico que te ha surgido al programar eso que querías hacer pues igual la gente se anima.
Recuerda a nosotros nos da igual para qué sea el proyecto que haces, decirlo que es para la escuela sólo sirve para decir que estás bastante desinteresado y lo que quieres hacer es entregarlo y esperar a la nota. Si es ese el caso ahorrate lo de que es un "proyectito escolar" y disimula un poco.

Que quede claro que aqui no somos expertos profesores en programación pagados para ayudar a los alumnos que no se enteran, hacemos lo que hacemos por voluntad propia... un dato muyy a tener en cuenta.

Que sea por que se vengan por el foro, y no por el forro.

Salu10  ;)
#70
Gracias por responder SERBice pero el problema ya está solucionado, cobein me sugirio la función form_activate, que viene a ser lo mismo, se activa cuando el form recibe el foco (o "se activa").

De todas formas gracias por responder  ;)

PD: cobein respondio en otro post (tema). Es que le di unas cuantas veces al botón de publicar y apareció dos veces en la lista.