• Martes 13 de Mayo de 2025, 17:17

Mostrar Mensajes

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 - Nebire

Páginas: 1 ... 13 14 [15] 16 17 ... 29
351
Cita de: "eldelpuerto"
...Me gustaria darle un click con el boton del medio (o rueda) en cualquier objeto de cualquier form de un proyecto y que me saliera un mensaje dicendome como se llama el objeto, tipo de objeto que es, form al que pertenece..etc.. o sea poder saber sus propiedades...
Esto es imposible...
Si yo creo un control Activex, que tiene pongamos 3 cajas de texto, 2 picturebox 2 label y 3 shapes, lo más que podrás encontrar es el nombre del control, ya no sabrás si yo he usado un label o si hice un 'print' directamente, tampoco sabrás si son realmente shapes o si son métodos gráficos y las cajas de texto o lo picturebox, pasa lo mismo, podrás sospechar que es esto o aquello pero nada más.
De igual forma todos los objetos que no tienen un controlador de ventana, tampoco podrás obtener info directamente.
Siempre puede haber controles no visibles, ocultos o suplantando a otros de modo que se puede afirmar que es imposible en la práctica, en teoría posible es posible, otra cosa es lo que necesites hacer para descubrirlo y se merece la pena el tiempo invertido. Esto es, si eres capaz de desemsamblar cualquier código y entenderlo perfectamente es en ese caso que digo que es teóricamente posible.

La razón de esto es que el código es privado, no es código libre por tanto no se han construído las herramientas específicamente para eso, sino que en lo posible contribuyen a que un autor aísle y pueda ocultar sus objetos. Además cualquier técnica con dicho fin es un delito en toda regla hoy por hoy. con esto quiero indicarte que te andes con ojo, limítate a controlar tu software o cualquiera que sea libre, no serías el primero que tiene problemas ni el último...

Para los demás podrás usar las API, por ejemplo FindWindows... y familia.

352
Visual Basic 6.0 e inferiores / Re: duda con Qbasic
« en: Viernes 6 de Marzo de 2009, 09:38 »
Je,je,je...  :D
... era una excusa para ilustrarle un ejemplo de como controlar condiciones en medio del meollo....

Tú crees que veremos algunas líneas de 'su código' ...?  B)

353
Visual Basic 6.0 e inferiores / Re: duda con Qbasic
« en: Miércoles 4 de Marzo de 2009, 23:37 »
Cita de: "josemartinez1"
10 INPUT "Introduce un número ", x
20 r = x MOD 2
30 IF r = 0 THEN
40 PRINT "El numero introducido es par, porque al dividirlo entre 2, nos da de resto 0"
50 ELSE
60 PRINT "El numero introducido es impar, porque al dividirlo entre 2, nos da de resto 1"
70 END IF

mira esto ejecutalo en Qbasic  es una de las clases que eh echo pero como te digo aun me faltan estas

calcular un peso a dolar y un dolar a euro


salu2

Veamos, si preguntas por unos problemas a qué viene ese código..?
Los números de línea no son necesarios, por favor elimínalos. Los números de línea son etiquetas tal como las que uso de modo alfanumérico en el ejemplo que te adjunto, cuando son alfanuméricas deben llevar 2 puntos tras la etiqueta.

Te resuelvo el problema del cambio de moneda, el resto es bastante más trabajoso y además es un problema que te han planteado de modo que tendrás que pensar en ello...
Seguro que conoces el lenguaje ????

El ejemplo incluye 4 opciones para el menú aparte de la opción de salir.
Código: Text
  1.  
  2. DIM cambio AS SINGLE
  3. DIM pesos AS SINGLE
  4. DIM dolares AS SINGLE
  5.  
  6. cambio = 1.33  ' valor inicial para probar....
  7.  
  8.  
  9. Principal: ' bucle principal
  10.    DO
  11.      GOSUB Menu
  12.      INPUT opcion
  13.  
  14.      SELECT CASE opcion
  15.          CASE 1
  16.             GOSUB DolarPeso
  17.          CASE 2
  18.             GOSUB PesoDolar
  19.          CASE 3
  20.             GOSUB EstablecerCambio
  21.          CASE 4
  22.             GOSUB MostrarCambio
  23.          CASE 5
  24.             END
  25.          CASE ELSE
  26.             PRINT "La opci¢n: "; opcion; " no est  contemplada en el men£... pulse un n£mero del 1 al 5."
  27.      END SELECT
  28.      LOCATE 15, 10: INPUT "...pulse una tecla para continuar...", espera 'espera que se pulse una tecla permitiendo mientras ver el resultado
  29.    LOOP WHILE opcion <> 5
  30.  
  31. END
  32.  
  33.  
  34. Menu:  'Men£ principal
  35.   CLS
  36.   LOCATE 2, 10: PRINT "Elija una de las opciones siguientes (1-5):"
  37.  
  38.   LOCATE 4, 15: PRINT "1 - Cambiar de D¢lar a Pesos"
  39.   LOCATE 5, 15: PRINT "2 - Cambiar de Pesos a D¢lar"
  40.   LOCATE 6, 15: PRINT "3 - Establecer un nuevo tipo de cambio."
  41.   LOCATE 7, 15: PRINT "4 - Mostrar el cambio actual."
  42.   LOCATE 9, 15: PRINT "5 - Salir del programa."
  43. RETURN
  44.  
  45. PesoDolar:
  46.    INPUT "Cuantos pesos desea cambiar a d¢lares: ", pesos
  47.    PRINT "El cambio de "; pesos; " pesos a d¢lares es: "; (pesos * (1 / cambio))
  48. RETURN
  49.  
  50. DolarPeso:
  51.    INPUT "Cuantos d¢lares desea cambiar a pesos: ", dolares
  52.    PRINT "el cambio de "; dolares; " d¢lares a pesos es: "; (dolares * cambio)
  53. RETURN
  54.  
  55. EstablecerCambio:
  56. cambiar:
  57.    CLS :
  58.    LOCATE 5, 10: PRINT "El cambio de 1 dolar equivale actualmente a "; cambio; " pesos"
  59.    LOCATE 6, 10: INPUT "Establezca el valor del nuevo cambio: ", nuevocambio
  60.  
  61.    IF nuevocambio < 1 THEN
  62.      DO
  63.         LOCATE 10, 2: INPUT "Est  seguro que 1 d¢lar vale menos que 1 peso (s/n).", resp$
  64.      LOOP WHILE resp$ <> "s" AND resp$ <> "n"
  65.  
  66.      IF resp$ = "n" THEN GOTO cambiar
  67.    END IF
  68.    cambio = nuevocambio
  69. RETURN
  70.  
  71. MostrarCambio:
  72.    CLS
  73.    LOCATE 4, 10
  74.    PRINT "El cambio actual es 1 d¢lar = "; cambio; " pesos."
  75. RETURN
  76.  
  77.  

Si no eres capaz de entender el código (que es bastante simple), dudo que seas capaz de resolver el resto de problemas que son más complejos....
Tampoco entiendo que clase de profesor te enseña este basic arcaico, el saber no ocupa lugar pero puestos a aprender sería más útil algo más actualizado, creo yo....
p.d.: los símbolos raritos que aparecen son tildes que traídos del entorno no traduce correctamente, como están en las cadenas de texto y no en las palabras clave, no importa...

354
Visual Basic 6.0 e inferiores / Re: duda con Qbasic
« en: Martes 3 de Marzo de 2009, 05:38 »
La buena noticia, es que si, yo conozco Qbasic, QBasic es una versión reducida de QuickBasic que se añadió a los sistemas operativos como un programa interno cuando QuickBasic migró hacia VisualBasic y que se mantuvo hasta la llegada 'básicamente' del XP.

La mala noticia es que no se hacen tareas, sólo se ayuda. Expón el código que tienes y te corrijo tus fallos ó te señalo porqué y donde fallan.

El primer ejercicio es básicamente un asunto matemático por tanto sería suficiente con que el programa tuviera una función y 3 líneas para entrar los datos, moneda origen, moneda destino y cantidad.
El 2º problema se supone que toma un archivo del que se conocen las caracteríciticas, lo abre y a medida que va leyendo va totalizando las existencias sobre una matriz o una estructura, cuando alcanza el final del fichero imprime en pantalla el informe.
El 3º problema es similar al 2ª sólo que se supone que se construye una pequeña 'base de datos' de empleados elaborar la nómina por tanto lo que hace es tratar de localizar cada empleado en la base de datos y de acuerdo a sus datos (cargo, antigüedad) y en conjunto con la base de datos del mes trabajado (que recoge día a días las horas trabajadas por cada trabajador) totalizando las horas del mes elabora el informe donde indica cuantas horas tiene cada trabajador y cual su salario. el preciohora se supone relativo al cargo...
El 4º problema es muy similar al tercero, pero los datos y el nombre de estos cambian.
El problema de cálculo de interés es como el 1º algo básicamente matemático, donde creas una función y unas pocas líneas de entrada de datos.

En los problemas 2ª, 3º y 4º  (y más exactamente en el 3º y 4º) debes previamente elaborar un programa para introducir datos en al menos 2 ficheros uno para mantener los datos del empleado/alumno y otro para mantener los datos diarios del mes en curso para el caso del problema de los empleados) y de ¿los exámenes? del sementre para el caso de los niños de primaria. Este programa por tanto tendría 3 menús: acceso a la BD de Usuarios, Acceso a la DB de Seguimiento y salir. Los dos primeros menús tendrán un submenú, que básicamente incluirá consulta de usuario a través de su nombre completo o identificador, altas , bajas y rectificación de datos. Esto es:
   Al acceder al menú se leen los nombres que se tienen en la base de datos (se supone una lista corta, al principio del fichero separados por un carácter conocido) se cargan en matriz, se presentan en menu un número determinado que quepa en la pantalla  '2 botones' arriba y abajo permite rescribir los n siguientes, anteriores, junto a estos hay un id, para evitar teclaer el nombre completo del usuario.
   el íd sería el equivalente a la posición en la matriz.
   Añadir perfil: se introduce un nombre apellidos y demás datos antes de validar se comprueba que el usuario no exista ya sólo entonces se añade. Al añadir dar respuesta de usuario añadido y regresar al menú.
   Localizar perfil: permite escribir un nombre y contrastarlo en la matriz, Existe el usuario solicitado ?, si existe mostrar actualizar lista mostrada de modo queéster usuario aparezca en la ventana, si no existe nostrar 'no localizado'. si existe además se localizan sus datos en fichero y se exponen en modo sólo lectura.
   eliminar perfil: dado el identificador se localizan los datos de ese usuario en el fichero que actúa de 'base de datos', los registros a partir de él se escriben en la posición de '1 perfil menos', el último perfil se borra (para que no haya duplicados)... también debe localizarse sobre el fichero que mantiene el 'diario' y borrarse/sobrescribirse.
   modificar perfil: cuando se pulsa este menú se solicita el identificador del usuario se localiza en la bd y se expone en la pantalla ahora aparece otro menú especifico que permite variar cada campo + 2 menús (menu= botón=opción) que permite ignorar cambios ( regresa al menú principal) y guardar cambios (la estructura temporal cuyo nombre y apellidos se ha modificado sobrescribe a los datos actuales en la bd, Si asdemás se cambió el nombre y/o los apellidos también debe cambiarse este dato en el archivo de 'diario'.

El menú del archivo que mantiene el diaro de trabajo del mes o los resultados de exámenes semenestrales de los alumnos es similar, por conveniencia en la cabecera del archivo pueden consignarse los nombres de cada trabajador y el número de días trabajado, luego lo demás son 'tablas' que consisten en Mes X y días X, los días son tablas que contienen pares de valores: trabajador= nombrecompletotrabajador ;  horas= xHorasEstedia . Las funciones son obvias deberá poderse consultar tanto las horas concretasde un día específico de un trabajador cono totalizar las horas de un trabajador como totalizar las horas trabajadas en el mes, como localizar el día que más horas se trabajó, etc... (esto último y lo anterior no se solicita en el problema, pero lo anterior puede usarse para verificar al final si la elaboración de la nómina tuvo algún posible error).

Bueno, si no tienes nada hecho ya tienes por donde empezar, pero esto lleva tiempo especialmente en estos lenguajes antiguos. Así que dudo que sea un problema planteado para el fin de semana ni nada similar....

Por cierto en QBasic no existen clases, existen estructuras (type) existen subrutinas (Sub, invocadas como goSub rutina) , exisen funciones Function ó 'Declare FN' (invocadas como simepre) y existen módulos (archivos .bas, invocadas como call modulo) pero nada que se pueda denominar clase.

355
Un menú es un conjunto de opciones, de tal modo que tras activarse el menú debe responder al código...

Opciones del menú:
Código: vb.net
  1.  
  2. ListaMenu
  3.     opcion1
  4.         nombreopcion
  5.         TextoOpcion
  6.         ValorOpcion
  7.     opcion2
  8.         nombreopcion
  9.         TextoOpcion
  10.         ValorOpcion
  11.    opcion3
  12.         nombreopcion
  13.         TextoOpcion
  14.         ValorOpcion
  15.     ...
  16. fin listaMenu
  17.  
  18.  

Los parámetros son los que queramos que tenga el menú, yo he puesto 3 quelen ser los habituales, nombre opción actúa como identificador, texto opción el texto que se mostraría en dicha opción, valor Opcion sería un valor de caracter buleano, numérico, string,etc....

Esto es sólo la descripción del menú, otra cosa sería la respuesta del menú que tampoco  sería muy complicado...

Código: vb.net
  1.  
  2. ReponderMenu(NombreOpcion)
  3.     si es el caso nombreOpcion = opcion1.nombreopcion luego
  4.        ...  codigo para esta opción
  5.     pero si es el caso nombreopción = opcion2.nombreopcion luego
  6.          ...  codigo para esta opción
  7.     pero si es el caso nombreopción = opcion3.nombreopcion luego
  8.           ...  codigo para esta opción
  9.     en los demás casos luego
  10.         ...  codigo para el resto de opciones
  11.     fin casos
  12. fin ResponderMenu
  13.  
  14.  

356
VB .NET / Re: PROBLEMAS!!! con Variables VBA
« en: Sábado 28 de Febrero de 2009, 09:50 »
Código: vb.net
  1.  
  2. Public Class Form1
  3.     Dim b As Boolean
  4.     Dim s As String
  5.  
  6.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  7.         b = Not b
  8.         s = b.ToString
  9.         MsgBox(s)
  10.     End Sub
  11. End Class
  12.  
  13.  

como ves más sencillo no puede ser....

357
VB .NET / Re: Depurando una versión anterior
« en: Sábado 28 de Febrero de 2009, 08:56 »
Hola.

Si corregiste los problemas que tenías, para subsanar ese problema tienes que hacer un 'Rebuild All' desde el menú...

358
Visual Basic para principiantes / Re: Grafico Parametrico en PictureBox
« en: Sábado 28 de Febrero de 2009, 08:21 »
Hola IAO perdona que no te haya respondido antes, pero uno tiene ciertas obligaciones que delimitan tu tiempo libre... aprovechando que salgo de una gripe te comento algunas cosas. aunque sea un poco tarde...

Efectviamente agregar un valor a las cordenadas X proporciona un cierto 'grosor', de hecho si te fijas bien en el programa hacía precisamente eso. Ten en cuenta que conforme a estudiar una señal una cosa son los datos reales y otra los datos transformados para su evaluación. empecinarse en usar los datos reales en muchas ocasiones no conduce a nada, porque los datos pueden estar tan 'apiñados' que resulta indistinguible es por eso que los datos de una señal siempre deben ser 'convertidos' de modo que resulten útiles...

..entonces usar un '+3' es exactamente eso, convertir los datos reales a algo útil, no obstante no te pares ahí, sé más inteligente, el parámetro en vez de hacerlo fijo, dale un nombre tal como 'incrementoX' o lo que se te ocurra y permite establecer el valor con un control (por ejmplo un slider, hscroll,vscroll) , esto te permitirá 'ajustar' cada situación al idóneo. Establece un valor por defecto y un botón de regresar al valor por defecto.

Respecto del otro problema que comentas, es en efecto debuido a las cordenadas iniciales (o finales de un anterior dibujado). Como sabes la última posición del cursor gráfico es el actual currentX, currentY. Para que se entienda como opera lo mejor es hacer un círculo usando preciamente la función circle de un picturbos, form, frame,etc... . El currentX y currenY al dibujar en un círculo, empieza y acaba en las cordenadas del centro, sin embargo  a simple vista esto pareciera ser falso, porque empieza dibujando en las 3 (en referencia con un reloj) luego las 2 luego la1 luego las 12,etc.. es decir gira en sentido contrario a las agujas del reloj, termina de dibujar en las 3, pareciera entonces que el currentX,currentY debería estar fijado en la posición de las '3', si a continuación hacemos un 'line step(destino)', es decir dibujamos una línea desde la posición actual hacia el punto señalado, veremos que la línea parte del centro del círculo. Resumiendo esto efectivamente suele corregirse poniendo currentX y currentY en las cordenadas de inicio adecuadas, normalmente el punto donde se empezará a pintar, sino se usa step, no es necesario, ya que eso implica que al señalar los dos pares de cordenadas implica que la cordenada origen lo que hace es precisamente eso, traducir currentx y currentY al valor indicado en las cordenadas de origen.

Quiero no obstante decirte que todavía habrá partes que tendrás que retocar porque hay partes que no quedan claras (al menos a mi), respecto de porqué esperas que te salga un gráfico u otro. Supongo que cuando te tropieces con esos problemas no tendrás más remedio que dar las explicaciones oportunas...

Saludos.

359
Visual Basic para principiantes / Re: Grafico Parametrico en PictureBox
« en: Sábado 7 de Febrero de 2009, 00:24 »
Cita de: "IAO"
estuve indagando sobre el PICTURE1.PSET  
utilizar pset o Line, sólo significa cuantos puntos dibujas de golpe, nada más...

Cita de: "IAO"
   Sobre la frecuencia, puedo leerla en el osciloscopio.  
bien, con eso es suficiente...

Cita de: "IAO"
  me mostró esa doble  linea diagonal pero hacia la izquierda. Solo cuando moví
los controles del Chanel A (Horizontal) hacia la parte de los milivoltios, fue que pude ver el ovalo, o semi esfera
caracteristica de la figura de los condensadores.  
En las pruebas que he hecho se alternan esas líneas hacia un lado y otro, por lo que he modificado todo el programa original, estableciendo la frecuencia.
Los valores de  verticales los tomo como valores absolutos,  los valores horizontales los tomo como relativos, llevan el incremento del factor tiempo ...

He comprimido lo que tengo hecho hasta el momento, y lo subo para que puedas hacer pruebas y verifiques si ahora se parece más...
 ... mañana o el domingo en otro momento le hecho otro vistazo...

360
VB .NET / Re: Error en el entorno VB2005
« en: Viernes 6 de Febrero de 2009, 22:59 »
Cita de: "Jimbenit"
Hola a todos...

¿Que debo hacer?

Ve a las propiedades del proyecto, en la ficha debug, verás que la casilla que pone "Enable the Visual Studio hostings process"   (ver la imagen adjunta, agrándala)  está activada, desactiva esa casilla y guarda el proyecto.

Ya puedes ejecutarlo sin que vuelva a aparecer dicho error...


361
Visual Basic para principiantes / Re: Grafico Parametrico en PictureBox
« en: Viernes 6 de Febrero de 2009, 15:05 »
Cita de: "IAO"
Hola....Voy a tratar de ir por parte.

Lo que intento hacer es un Trazador de Cuvas en VB6.
Probando un componente .. en este caso un condensador . me suministra unos valores para el eje 'x' (Horizontal oscilosc) y otros valores para el eje 'y' (Vertical oscilosc) estos
valores los tomo por el pto. serial del computador los coloco en unos List, los paso a arreglos y dibujo la figura que
el debería representar según unos modelos aproximados ya establecidos.
Ver figuras aproximadas en esta pagina.( Casi al final de la página.)

Yo los veo erroneos, porque no muestra esa especie de circulo o elipse en este caso del condensador.
Pero sé que algo estoy haciendo mal. No sé que es, pero lo estoy haciendo mal.
Por eso le comentaba que tenía que entender como un osciloscopio manejaba internamente esos datos, cuando grafica
esas figuras caracteristicas de cada componente.
Si coloco en VB6 funciones sin() y Cos(), me muestra el circulo, pero todos los valores para otros componentes, me los mostrará
en circulo también. Si coloco lista de valores numéricos de un zener, me mostrará un circulo en lugar de la curva
caracteristica del zener.


En base a que valores manejo 'x' e 'y', según entiendo tu pregunta: voltios(x) y mvoltios(y). No sé si fue lo que
me preguntaste. Oh me confundió tu pregunta. Lo del factor tiempo lo tomo del 6.28 radianes que son los 360º del circulo.
A veces pienso que esto me está volviendo loco...Jajajaja

Te voy a dejar la lista de datos que recibo del condensador, tanto para el horizontal(x), como para el vertical(y).
Una hoja de excel con una prueba loca, no se rian de eso por favor.
Puede que me esté ahogando en un vaso de agua y esto no pueda efectuarse sino, en un osciloscopio solamente.

Me averguenza ocupar el tiempo de ustedes, en esto. Pero si logran entender algo, denme un rumbo y trataré de ir por
allí. Porque hasta hoy he dado vueltas en circulo, sin grandes avances.

Espero haber sido más claro en mi exposición.
De antemano muchas gracias por gastar su valioso tiempo, conmigo....se aprecia en gran manera.

('_').....

Acabo de leer tu post y descargar el ficherito...
Esto es una respuesta rápida para que la espera no se te haga larga ... dame algo de tiempo y te daré una respuesta detallada
De entrada no hay que avergonzarse de nada. Nadie, absolutamente nadie sabe todo, ni nadie nace sabiendo, el conociento debe ser adquirido, preguntando es uno de los modos elementales para adquirir conocimintos...

Lo primero que he hecho ha sido mirar los archivos ( no he vuelto a instalar el office desde la última vez que formateé así que no he ojeado el archivo de excel). Los filtrado para que sólo contengan los valores de los 100 primeros milisegundos, ya mirando la lista se observa la sinusoide, tanto para el eje x como para el eje y, por tanto lo que te falta es un 3 factor que es la 4º cordenada, el tiempo.

Si miras detalladamente la lista (tal como te indico que la he filtrado), verás que tanto el eje x como el eje y tiene valores positivos 8 ítems, y los 8 siguientes ítems valores negativos y la secuencia se repite, dado que según el fichero se indica que son milisegundos y puesto que tenemos que los ítems 'regresan' a su punto de partida cada 16 ítems, se entiende que lo que nos está indicando es la frecuencia que entonces es 1000ms. / 16items = 62 herzios aprox.  es decir tenemos que dibujar y borrar 16 ítems cada 62 milisegundos...  para no hacerlo manual, ¿ puedes recibir desde el osciloscopio también la frecuencia ? si es así sería estupendo, sino colocaríamos un regulador de frecuencia en nuestra aplicación, esto es colocaríamos un timer y un control tipo scroll para regularlo...

Haré unas pruebas a la tarde, que tenga tiempo libre y te comento entonces...

362
Visual Basic para principiantes / Re: Grafico Parametrico en PictureBox
« en: Miércoles 4 de Febrero de 2009, 20:46 »
Cita de: "IAO"
Holaaaa:

Bueno por otra parte, comento que tendré que detener esto, hasta que logre obtener un grafico más apropiado a los
datos que estoy recibiendo.
Gracias a todos por la ayuda, seguiré indagando... hasta lograr la correcta imagen de esos datos recibidos.....

Bye('_').....

Al tratar de implementar lo que te comentaba en el mensaje anterior partiendo del código que indicabas al principio, he detectado que hay una parte sin sentido, lo que paso a comunicarte.

el siguiente código:
Código: Visual Basic
  1.  
  2. For i = 0 To 11 'UBound(b)
  3.     y = b(i * t) / 5
  4.  Next i
  5. Label2 = b(8)  
  6.  
  7. picGraph.Line -(x, y), vbRed
  8.  
  9.  
y el código  correspondiente a 'x' carecen de sentido, esto es, dado que ' y ' no ugarda ningún valor sino el último, el bucle no tiene ningún sentido cuando finalice el bucle y siempre valdrá el valor que se asigna en el último ciclo del bucle, por tanto implica que sólo estamos usando en todo momento b(11) y a(11), por lo que no se están utilizando ninguno del resto de elemntos de la lista y por tanto el siguiente código sería equivalente:
Código: Visual Basic
  1.  
  2.      y = b(11) / 5
  3.     picGraph.Line -(x, y), vbRed
  4.  
  5.  
dudo que esto sea realmente lo que quieres hacer...
Tampoco entiendo la presencia de PI, sólo lo utilizas para fregmentar un bucle pero no interelacción con las cordenadas en ningún momento... de hecho la fragmentación es dt= pi/100 y t < 2*pi = 200, significa que estás haciendo un bucle de 200 iteraciones, pero para eso no hace falta PI... supongo que tratas de trasladar de alguna manera cordenadas de un sistema a otro, pero no especificas nada al respecto...

363
Visual Basic para principiantes / Re: consulta sobre funciones!!!
« en: Miércoles 4 de Febrero de 2009, 19:06 »
Cita de: "m0skit0"
Cita de: "la mole p"
entonces supongamos que yo quiero usarla para 2 matrices en distintas partes de mi codigo solo haria algo asi:

matriz1_filtrada=filtro(matriz1)
matriz2_filtrada=filtro(matriz2)

mi duda es si se pued y como lo puedo hacer?????
Lo siento, tal y como lo pones en VB6 no se puede hacer porque las funciones no pueden devolver vectores. [/size]En tu ejemplo pones que filtro() devuelve un vector, cosa que no se puede hacer en VB.

¿Cómo puedes mandar un vector a una función y que te lo modifique? Usando una subrutina y pasando el vector por referencia, esto es:

Esto es erróneo, una función puede recibir y devolver matrices sin ningún tipo de problemas...
para demostrarlo un pequeño ejemplo:
Código: Visual Basic
  1.  
  2. Dim A2() As Integer
  3. Dim A3() As Integer
  4.  
  5.  
  6. Private Sub Command1_Click()
  7.     Dim k As Integer, t As Integer
  8.     Dim s As String
  9.    
  10.     '=======================
  11.     A3 = sumarMatriz(A2, 50)    ' aquí se llama a una función, envía una matriz y recibe una matriz....
  12.     '=======================
  13.     For k = 0 To 2
  14.         For t = 0 To 3
  15.             s = s & CStr(A3(k, t)) & " , "
  16.         Next
  17.     Next
  18.     MsgBox s
  19. End Sub
  20.  
  21. Private Sub Form_Load()
  22.     Dim k As Integer, t As Integer
  23.     ReDim A2(0 To 2, 0 To 3)
  24.     For k = 0 To 2
  25.         For t = 0 To 3
  26.             A2(k, t) = n
  27.             n = n + 1
  28.         Next
  29.     Next
  30. End Sub
  31.  
  32.  
  33. Private Function sumarMatriz(ByRef m() As Integer, ByVal incremento As Integer) As Integer()
  34.     Dim k As Integer, t As Integer
  35.     Dim tmp() As Integer
  36.    
  37.     ReDim tmp(0 To 2, 0 To 3)
  38.     For k = 0 To 2
  39.         For t = 0 To 3
  40.             tmp(k, t) = m(k, t) + incremento
  41.         Next
  42.     Next
  43.     sumarMatriz = tmp
  44. End Function
  45.  
  46.  

en el ejemplo  los elementos de la matriz A2  toma valores 0,1,2.... cuando pulsamos el botón que invoca la función suma 50 a cada valor y lo recibe de vuelta, en ningún momento existe un error por ello, llevo demasiados años usando matrices como devolución de funciones... No sé que versión usas de VB6... pero a mi nunca me ha dado error en inguna versión de las que he usado.

364
Visual Basic para principiantes / Re: Grafico Parametrico en PictureBox
« en: Miércoles 4 de Febrero de 2009, 16:48 »
Cita de: "IAO"
Holaaaa:
Lo entiendo teoricamente.
Es un problema con V/div, en un osciloscopio real selecciono el v/div a un valor
apropiado tanto para el X como para el Y, en el modo XY.
El diseño que estoy efectuando no tiene implementado esto, el reto ahora en implementar eso, para que la
figura se vea en forma correcta o adecuada.
Bye('_').....
Es difícil ayudarte, porque no comentas claramente que es lo que quieres conseguir...
Lo que hemos entenddido hasta ahora es que tenías una serie de valores que querías representar gráficamente como par de cordenadas xy, esto ya lo has hecho. Según comentas el gráfico no sale como quieres, pero para que podamos ayudarte necesitamos saber como es que deben salir, y no me refiero a que muestres una imagen si no explicas la razón por la que la imagen es así... esto es si tu tienes los siguientes pares de valores:  (1,1) (2,2) (3,3) (4,4) (5,5) (6,6) como cornadas xy entonces el dibujo resultante será una diagonal desde arriba-izquierda en dirección abajo-derecha, desde el punto de vista de los datos ofrecidos esto es correcto, ahora si tu problema es que no debiera dar una línea diagonal sino un cardioide, entonces entenderemos que no nos has proporcionado los datos necesarios para entender que pueda fallar, la lista de cordenadas siendo la que es produce la línea diagonal, para producir otra 'figura' los datos deben ser otros... por tanto el problema debe estar ( a falta de explicaciones) en la toma de datos, o la interpretación de los mismos... por ejemplo quizás el artículo que describes ('octopus') realice el gráfico en 3 dimensiones y no en sea un gráfico bidimensional en lo que respecta a los datos, trasladando este SUPUESTO a los datos de la diagonal quedaría que laas cordenadas deberían entenderse como xyz: (1,1,2) (2,3,3 ( 4,4,5) (5,6,6) que forman una especie de z desenvuelto sobre las 3 dimensiones, con lo que efectivamente es distinto de una línea recta como la diagonal que anteriormente nos daba.

A falta de más datos precisos, he hecho una pequeña búsqueda empezando por la página que proporcionas, ... según se describe el eje x depende del voltaje del colector , etc... lo que me lleva a preguntarte cual es el intervalo que transcure entre cada medida y cual el intervalo para cada ciclo...  en realidad no veo muy desemejante entre sí, los gráficos que muestras más arriba , creo que lo que cambia es el tiempo de respuesta. Ten en cuenta que un condensador tiene un tiempo de carga y luego bascula, quizás fuera mejor que probaras con un transistor, o al menos (si dipones de los programas cuyas imágenes muestras más arriba) que el mismo componente sea testado por los diferentes programas (ignoro si las gráficas mencionadas corresponden al mismo componente ya testado por ti).

Todavía se me ocurre que se podría añadir un factor 'x' progresivo para forzar que gráficas muy alineadas queden mejor expuestas gráficamente... Esto lo podríamos implementar como sigue:
*  de entrada tomamos los valores y máximo y mínimo , los restamos y los dividimos entre 2 con lo que tenemos un factor distancia que utilizaremos como radio.
*  ahora lo que hacemos es 'dibujar' (puede estar oculto o puedes calcularlo a cada instante) un círculo con dicho radio y centro en medio de los valores máximo y mínimo de y
*  Crear un factor debiera ser ajustable, que se multiplica por el valor de que tiene x en el círculo (lado positivo, mientras la línea suba)  para el valor y que estás procesando. El factor es definitivamente un factor de 'elipse', o que tiende a sinular un círculo más o menos 'apretado'.
*  tomar el valor X que estás procesando y multiplicarlo  por la resultante del paso anterior (factor por valor x en el círculo para el valor y)  
Cuando la línea asciende se toma el lado positivo del círculo cuando baja se toma la parte negativa (izquierda9 del círculo.
Posiblemente ese V/div sea precisamente algo similar a esto, tal como sucede con la simágenes termográficas, cuyos colores no son reales sino interpretados y pprocesados para producir un resultado que visualmente nos proporcione información que de otro modo nos pasaría más abstracto.

Veré si hago una simulación de algo parecido  a lo que te acabo de describir... usando los datos para x e y de las imágenes que tienes...
Si explicaras más concretamente en base a qué valores estableces los ejes 'x' y cuales los 'y' y como utilizas el factor tiempo, podría ser más útil.

365
Diseño de Algoritmos / Re: expliquenme un poco de pseudocodigo
« en: Domingo 1 de Febrero de 2009, 16:00 »
Cita de: "luisluislu"
hola, expliquenme un poco de pseudocodigo, es q no los entiendo mucho, me los prodrian explicar de una manera sencilla please? es importante. expliquenme bien como se realiza

La forma más sencilla que conozco, diría que nace de la expresión que dijo Einstein en cierta ocasión: "algo no lo entienddes bien del todo, mientras no seas capaz de explicárselo a tu abuela"

... El pseudocódigo es esto, es explicar con palabras sencillas los pasos para descibir un proceso o parte de él de tal modo que lo entienda hasta tu abuela. .... fíjate que tu abuela seguramente ha escrito más pseudocódigo del que tu escribas en tu vida, cada vez que le contaba a una vecina o a una amiga una receta de cocina....

Así se puede decir decir que el seudocódigo es a la programación lo que las recetas a la cocina... Una descripción clara, sencilla y ordenada de cómo realizar un proceso o parte de él.

366
Diseño de Algoritmos / Re: || Hacer esta figura mediante Pseudocodigo ||
« en: Domingo 1 de Febrero de 2009, 15:55 »
Cita de: "m0skit0"
¿Seguro que has intentado algo?  :unsure:

Unas ideas:

- Quieres imprimir n líneas, desde 1 hasta n (un bucle)
- Por cada línea, quieres imprimir n asteriscos, desde 1 hasta n (otro bucle)

Así que tienes 2 bucles, ¿pero cómo ponerlos?
En realidad puede hacerlo con un sólo bucle si al comienzo del mismo actualiza convenientemente lo que debe imprimir, antes del bucle nº de asteriscos=0, más simple no lo puede tener...
Crees que será capaz de mostrar lo que haya hecho, sea lo que sea. ?

367
VB .NET / Re: codigo para poder ver el numero indice de una imagen randomi
« en: Domingo 1 de Febrero de 2009, 15:28 »
Cita de: "ESTEFY"
Oye una pregunta mmm...queria ajustarle el codigo para q funcionara mediante  matrices; la matrices es cuadratica....pero no sé cual es el error....mmmmm...toma como limite para leer las imagenes de  arriba de diagonal principal y las lee de corrido..osea le doy click a la imagen de la ultima columna y las lee de corrido.... por fis hechale le un vistazo...para q me digas cual es el error..aki te dejo el codigo q he hecho...gracias de antemano....espero no cansarte...

   Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
        For Each s As PictureBox In PB
            If e.X > s.Left And e.X <= s.Left + s.Width Then
                If e.X > s.Top And e.Y < s.Top + s.Height Then
                    MsgBox(s.Tag)
                End If
            End If
        Next
    End Sub
End Class  

El error es de transcripción, ya lo cometes también al inicio del mensaje, de entrada pensé que yo lo puse mal y por eso lo copiaste mal, pero no, yo lo he puesto bien... donde remarco e.x debes cambiarlo por e.y... la primera línea detecta horizontalmente, la 2ª detecta verticalmente....

De paso te comento algunos cambis.... después de hallar una deteción  puesto que no solapas imágenes, no es necesario seguir comprobando el resto elementos dentro de la colección por tanto debajo de la línea ' MsgBox(s.Tag)'  sería útil añadir un 'exit for' , pensé que tú misma te darías cuenta y acabarías por ponerlo, pero parece que no te has parado lo suficiente en 'mirar como trabaja'.

El otro cambio que te sugiero es que la matriz no la declares con 100 elementos por cada dimensión pués al final reservas memoria para 10.000 elementos aunque sólo uses 36. Entonces sustituye la línea : 'Dim m(100, 100) As Integer' por 'Dim m( , ) As Integer' y consecuentemente después de la línea: 'If b <= 10 Then' añade esta otra: ' ReDim m(0 To b - 1, 0 To b - 1)' ...

Cita de: "ESTEFY"
....espero no cansarte...
bueno, lo que realmente me cansa es la mala expresión de los problemas.

Por ejemplo ignorar ciertos detalles necesarios para entender el propio mensaje, por ejemplo hubiera sido útil indicar que 'D1' se refiere a un Datagridview , que  'ing' es un botón y que 'lim' es un textbox, sería más adecuado o indicar eso o aunque sea sólo en el foro sustituir lim por textboxLim ing por buttonIng, y D1 por DgridvD1 o similar así no necesitas especificar que son y yo no pierdo tiempo en intentar ver qué es y qué intentas hacer...

Y lo otro que especialmente me cansa es el no hacer uso de las etiquetas de code para dar formato en el editor. Todo lo que hay que hacer es pulsar (cuando redactas el mensaje9 pulsar en el botón que indica 'Code" que sale así (sin los espacios aquí puestos) [ c o d e ]  [ / c o d e ]   el código lo pones en medio de las 2 etiquetas y ya queda indentado como en el editor de visual Studio, además si la 1ª etiqueta la modificas así:  [ c o d e =vb] entonces además queda automáticamente coloreado, lo que hace legible el código. Me resulta cansado leer código sin darle formato, de hecho suele ser la razón por la a veces no responda algunos posts. Normalmente cedo más tolerancia a los nuevos, pero por favor en el futuro usa dichas etiquettas...

p.d.: adjunto una imagen para que entiendas a que me refería en el anterior post con aquello de las imágenes repetidas...(haciendo uso de este último código). Agranda la imagen y observa como las imágenes etiquetadas como 1 y 14 están repetidas varias veces..(aparte de otras).

[img=http://img401.imageshack.us/img401/4854/dibujouj5.png]


368
Visual Basic para principiantes / Re: Grafico Parametrico en PictureBox
« en: Domingo 1 de Febrero de 2009, 13:10 »
Cita de: "IAO"
... porque no terminaba
de entender como I/V o corriente versus voltaje, operaba matematicamente dentro del osciloscopio...
Puede resultar difícil entender la relación V=R * I , porque se definen de forma abstracta, no es realmente un problema de entendimiento, no hay nada en esa fórmula que lo haga especialmente difícil de entender, el problema es realmente que en su momento quienes deseaban pasar a la historia definieron parámetros que resultan abstractos para una ecuación suficientemente conocida, pero es así porque de ese modo pasaban a la Historia, si lo hubieran 'hecho fácil' hubieran pasado desapercibido, estaban más preocupados por su fama y fortuna que ocupados por enseñar sus conociemientos.
El modo fácil de entender la electricidad es pasarlo tal cual a la hidráulica, así la Intensidad (i) es el caudal , los electrones por sg se pueden entender como litros por sg. a una escala bastante más pqueña, el voltaje eléctrico (v) con la presión hidráulica, la resistencia eléctrica en el símil hidráulico queda asumido como en la electricidad por 2 conceptos, si en electricidad hablamos de electronegatividad propia de cada conductor, en hidráulica podríamos hablar de 'porosidad' (trata de imaginar una tubería limpia y como muy electronegativo y una zanja llena de piedras y vegetación, aunque mejor hablaríamos de viscosidad (densidad) imagina la diferencia entre un aceite muy denso, el agua o un alcohol. Y de otro lado las dimensiones, la resistencia eléctrica depende de las dimensiones del conductor, para entender esta parte en el símil hidráulico intenta ver como la ley de la presión actúa sobre una columna de agua, depende de la altura y la sección de la columna.

Reunidas las 3 partes ahora aléjate de la electricidad e intenta comprenderlo en hidráulica: [si sólo aumentamos la capacidad, disminuye la presión, el caudal seguirá siendo el mismo], [si sólo variamos el caudad la presión también varía pero la capacidad es la misma] y [si sólo variamos la presión, lo que cambia es el caudal, pero la capacidad es la misma]. Esto no es abstracto, basta poner el dedo a la salida de un grifo para ver como se relacionan entre si la presión y el caudal (voltaje e intensidad). De todo lo más oscuro es la resitencia eléctrica, ya que como te indico reúne sobre si a la vez en el símil hidráulico los conceptos de:  densidad y el volumen (el volumen lo llamamos capacidad), es obvio que si en vez de usar agua o aceite usamos arena lo que es más 'viscoso' equivaldría a usar un muy mal conductor tanto que su reisistencia es tan elevada que diríamos que no es un conductor, es decir la densidad es equivalente a la electronegatividad, usar cobre es como usar gasolina, ni es barato ni abundante. El plomo es más barato y más abundante, pero le pasa como al agua tiene un fuerte problema de oxidación (en hidráulica diríamos incluso que de calcificación)..

Aunque variemos el fluído en nuestro circuito hidráulico,( con lo que estaríamos cambiando la densidad), y puesto que hemos dicho que la resistencia depende tanto de las dimensiones como de una constante que depende directamente del conductor, así igualmente cuando hemos sustituído un fluído por otro aunque no hemos cambiado las dimensiones de la 'resistencia' (nuestra columna de fluído), lo cierto es sin embargo se refleja tanto en la presión como en el caudal, imagina que antes teníamos agua y ahora tenemos miel,al bombear miel a través de nuestro circuito veremos que ejerciendo la misma presión que hacíamos sobre el agua, el caudal disminuye, si en cambio pretendemos mantener el mismo caudal deberemos aumentar considerablemente la presón...

Cuando a la gente le ha tocado estudiar la electricidad gran parte suspende, otros aprueban pero sin entender la noción que subsiste, simplemente aplican fórmulas y cacarean textos cual loro, pero es claro que si se explicara con un símil hidráulico que todo el mundo puede concebir en su mente todo el mundo sin excepción lo entendería. Es por eso que digo que no es un problema de mal o difícil  aprendizaje sino de mala enseñanza, es más un problema de maestros que de alumnos, 'cosas de la vida'...

Espero que este tocho te ayude a entender mejor el asunto... trasladarlo a un osciloscopio es graficar los pormenores... poniendo cifras.

369
Visual Basic para principiantes / Re: Grafico Parametrico en PictureBox
« en: Sábado 31 de Enero de 2009, 17:26 »
Cita de: "IAO"
...me lanza un error...
Aquí me dice:  x = a(i * t) / 5 '''<-------------SubIndice fuera del intervalo

Sé que es por la t, pero demen una orientación de como mantenerla allí, porque es lo mejor que he podido
obtener al intentar graficar esos datos que estan en los listbox.
De antemano muchas gracias...Espero haber sido claro y solicitar la ayuda correctamente.
Por favor sino comprenden algo haganme saber y trataré de reordenar la pregunta.
Efectivamente como te dice mosquito, lo cual es obvio...
(i*t) refiere al indice, puesto que la matriz sólo tiene 12 elementos (del 0 al 11) , se desborda el límite. La razón de que desborde es que 't' se va incrementando a través de 'dt' que es 1/100 de Pi, dado que i se refiere al ciclo del bucle que recorre cada índice de la matriz, es lófico que cuando t alcance un valor determinado al multiplicalo por 11 8primero y luego les iría pasando a los indices menores) superan el valor de 11.

Yo lo he solucionado de la siguiente manera, pero ignoro si vale a tus propósitos porque eres parco en explicaciones, es más útil definir que tratas de hacer, no siendo el caso uno está atado de manos...

Código: Visual Basic
  1.  
  2. Option Explicit
  3.  
  4. Const PI = 3.14159265
  5. Const dt = PI / 100
  6.  
  7. Dim i As Integer
  8.  
  9. Dim a(12) As Single
  10. Dim b(12) As Single
  11.  
  12. Private Sub Command1_Click()
  13.     Dim t As Single
  14.    
  15.     picGraph.CurrentX = 0
  16.     picGraph.CurrentY = 0
  17.    
  18.     Do While t <= 2 * PI
  19.         t = Ploting(t)
  20.     Loop
  21.     picGraph.Line -(0, 0), vbRed
  22.    
  23. End Sub
  24.  
  25. Private Sub Form_Load()
  26.     Dim x As Single, y As Single
  27.    
  28.     picGraph.AutoRedraw = True
  29.     picGraph.Scale (-2.02, 2.02)-(2.02, -2.02)
  30.     Me.Show
  31.    
  32.     picGraph.Line (-2, 0)-(2, 0), vbBlue
  33.     For x = -2 To 2 Step 0.5
  34.         picGraph.Line (x, -0.1)-(x, 0.1), vbBlue
  35.     Next x
  36.    
  37.     picGraph.Line (0, -2)-(0, 2), vbBlue
  38.     For y = -2 To 2 Step 0.5
  39.         picGraph.Line (-0.1, y)-(0.1, y), vbBlue
  40.     Next y
  41.  
  42.     ' Toma los Valores del List
  43.    For i = 0 To List1.ListCount - 1
  44.         a(i) = CSng(List1.List(i))
  45.     Next i
  46.    
  47.     For i = 0 To List2.ListCount - 1
  48.         b(i) = CSng(List2.List(i))
  49.     Next i
  50.  
  51. End Sub
  52.  
  53. Private Function Ploting(ByVal t As Single) As Single
  54.      Dim x As Single, y As Single
  55.      Dim ix As Single
  56.      
  57.      For i = 0 To 11
  58.         ix = i * t
  59.         If ix > 11 Then ix = 11
  60.         x = a(ix) / 5
  61.      Next i
  62.      Label1 = a(8)
  63.    
  64.      For i = 0 To 11
  65.         ix = i * t
  66.         If ix > 11 Then ix = 11
  67.         y = b(ix) / 5
  68.      Next i
  69.      Label2 = b(8)
  70.    
  71.      picGraph.Line -(x, y), vbRed
  72.      t = t + dt
  73.      Ploting = t
  74. End Function
  75.  
  76.  

370
VB .NET / Re: codigo para poder ver el numero indice de una imagen randomi
« en: Sábado 31 de Enero de 2009, 16:32 »
Cita de: "ESTEFY"
Hola Nebire muchas gracias por tu aporte....tengo una inquietud apesar de tu bondadosa explicación...Te agradeceria mucho q me aclararas esta duda...
* "Crea una lista aleatoria sin elementos repetidos con valores entre 0 y el valor máximo (-1) pasado en el parámetro 'Max'"  como es eso de crear la lista... ¿donde? aun no entiendo el porq....?
Veamos, tu tienes una carpeta con imágenes del tipo: nombre + nº + extensión.  De esa carpeta tu dices quiero tomar x imágenes elegidas al azar y situarlas en el formulario... Pero puede suceder, especialmente si el número de imágenes es pequeño que al elegir imágenes al azar una o más la elijas 2 o más veces y por tanto repetida. La función que adjunto al final (y la explicación) refiere a como tomar x imágenes al azar asegurándose que ninguna se toma repetida respecto de las ya escogidas... te lo explico con números; sea la serie: 1,2,3,4,5,6,7,8,9 donde representan lo que sea, ahora queremos tomar 3 objetos de esos al azar, supongamos que salen el : 6,2,8 podrían haber salido el 4,5 y 9 pero también podría salir el 2,5,2 en esta última secuencia el 2 ha salido repetido la función lo que permite es que esto no ocurra, de modo que a esa serie del 1 al 9 eligiendo siempre 3 nunca salgan 2 repetidos.

Pero esto es sólo si realmente quieres que no se repitan, si no es el caso no importa...

Cita de: "ESTEFY"
.. bueno la buena noticia es q el programa ya funciona casi como queria..pero funciona....solo quisiera saber si puedes q presenten los numreos de los indices de las imagenes pero no de corrido sino q presente el numero de indice de la imagen a la q le doy click...
Eso es lo que hace exactamente el código. Ofrece el índice que tiene la imagen pulsada, el índice lo guardamos en la propiedad tag del picturebox. Si no te sale bien es posible que hayas copiado mal el código o que los cambios que hayas realizado 'deformen' la funcionalidad que yo le dí.
...Si tienes dudas expón el código que ejecutas para que vea donde tienes el error...
Puedes copiar el código que expuse más arriba en un nuevo proyecto para verificar que se ejecuta correctamente. Los índices son los números que corresponden al nombre de la imagen cuando se cargan, y estas se cargan aleatoriamente, por tanto salvo absoluta casualidad esto no ocurrirá más de una vez cada x millones...

371
VB .NET / Re: Como Abrir un TabPage de un TabControl por medio de Codigo
« en: Jueves 29 de Enero de 2009, 13:05 »
Cita de: "Jimbenit"
Hola a todos...

Tengo un Button1 en el TabPage1 de un TabControl y deseo que al pulsar este boton... se abra otro TabPage del mismo control (es decir , se muestre otra pestaña del mismo control)..

Ejemplo:
Tengo un button1 en el TabPage1... se pulsa el button1... y de inmediato se desplaza al TabPage2...

Saludos...

Hola Nilson...
El código es bastante sencillo, pero como algunos controles apabullan con la gran cantidad de opciones que presentan, es de entender que resulte algo dificillo encontar según qué cosas...

Código: Visual Basic
  1.  
  2. TabControl1.SelectedTab = TabControl1.TabPages.Item(x)   ' donde x es la ficha eneava que se desea mostrar, acuérdate que se la colección de fichas se basa en indice 0.
  3.  
  4.  

372
VB .NET / Re: codigo para poder ver el numero indice de una imagen randomi
« en: Jueves 29 de Enero de 2009, 12:20 »
Cita de: "ESTEFY"
Este genera imagenes randomicas visualizadas en picturebox pero como estos son generados cuando aparecen no los puedo seleccionar, ya ahora lo q trato de hacer es q cuando haga click en una de las imagenes selecciondas aparezca el numero de indice de la imagen q se enceuntran en una carpeta y las imagenes estan enumeradas ejemp: image1, image2......y asi hasta q llegue a 50...entonces cuando haga click en la imagen q se genero salga solo el número de la imagen...

Ya que estamos... terminamos....

A lo que te dice el compañero te añado 2 cosas:
 a ) utiliza las etiquetas de 'code', para ello pulsa (en el editor) sobre la etiqueta 'code' e incluye tu código dentro.
 b ) Aunque uses la X como te indica el compañero no obtendrás el resultado deseado, ya que el código que expones es el código del botón para cargar las imágenes.
Además esto básicamente no soluciona tu problema, esto se refleja más adelante en el código con la linea 'pict.tag=X'. El problema principla es el que describes, que creas dinámicamente los controles picturebox y por tanto no tienes acceso a sus eventos, para colmo, aunque declares con withevents los picturebox, no te dejará ya que las matrices no se pueden declarar con withevents.

La solución pasa por lo siguiente, de forma detalada:

1 )  De entrada sustituímos la matriz por una colección de picturebox 'pb' en el código, ya quepermite añadir y eliminar elementos más fácilmente si más adelante en el proyecto te resulta preciso.
2 ) Hacemos cambios de alineación (se supone que es la idea que se desprende) de los picturebox en 3 columnas . esto se refleja en el código sustituyendo tu : 'If i Mod 3 = 0 Then...' por otro equivalente que lo realiza bien, además fíjate que para ello lo posicionamos al principio del bucle.
3 ) Como se dijo anteriormente para solucionar la referencia numérica añadimos el dato al tag del control
4 ) hemos renombrado los picturebox a medida que se van generando, ya que cada picturebosx los creamos y eliminamos con cada iteración. No es absolutamente necesario...
5 ) Añadimos el control a la colección 'pb'. Y la línea de añadirlo a la colección controls del formulario la colocamos junto a esta, sólo por 'mantener el orden'.
6 ) Importántísimo: para poder hacer detecciones en el formulario sobre qué control estamos necesitamos añadir una línea que deshabilita cada picturebox, véase la línea: 'Pict.Enabled = False  ' importante'

El método que usamos para detectar que control está siendo pulsado, es el evento mouseup del formulario, como todos los eventos mouseup en los argumentos de evento se reciben las cordenadas sonbre las que está, X e y que utilizamos para detectar recorriendo todos los controles de la colección pb e identificando si alguno tiene su ubicación en dichas cordenadas, si esto es cierto se considera una detección positiva y entonces lanzamos el mensaje correcpondiente con el valor tag que previamente alamcenamos para el control.

Nota: que para que el código funcione es imperativo que los picturebox estén deshabilitados, ya que sino el evento mouseup sobre las cordenadas de los picturebox no son registrados como eventos del formulario sino como eventos de los picturebox y como no tenemos acceso a dichos eventos no lograríamos 'cazarlos'. al estar desactivados, el formulario puede acceder libremente a las cordenadas de dichos objetos.

Para terminar alguna notas más:
 a ) sería más rentable 'pegar' directamente las imágenes sobre el formulario si el propósito exclusivamente es para mostrar unas imágenes y detectar cual se ha seleccionado. Una estructura se encargaría de registrar las 'propiedades' top, left width, height y tag , la colección por tanto sería sobre esta estructura. Esto es bastante más ligero y consume menos recursos...

b ) Si se sobreponen 2 o más objetos en las mismas cordenadas donde se ha detectado el 'muoseup', la detección indicaría como 'seleccionado' el primero que se coincide recorriendo la colección con las condiciones de detección de cordenadas. Como en la carga de los objetos se llevo a cabo esto adecuadamente, este problema no existe, pero no hay que perderlo de vista si se hace más complejo...

c ) NOTA: para probar el programa adapté la ruta y formato de imagen al caso de mi ordenador, obviamente deberás cambiar la línea a tu necesidad: 'Pict.Image = System.Drawing.Image.FromFile("c:imgIMAGEn" + Trim(Str(X)) + ".bmp")'

Código: Visual Basic
  1.  
  2. Public Class Form1
  3.     Dim RND As New Random
  4.  
  5.     Private pb As New List(Of PictureBox)
  6.     Private j, A As Integer ' supongo que lo utilizas en otra parte...
  7.  
  8.     ' cargador de las imágenes:
  9.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  10.         Dim X, i, y, t As Integer
  11.         Dim Pict As PictureBox
  12.  
  13.         y = 10
  14.         t = 10
  15.         For i = 0 To 8
  16.             If y = ((120 * 3) + 10) Then
  17.                 y = 10
  18.                 t += 120
  19.             End If
  20.             X = RND.Next(1, 9)
  21.             Pict = New PictureBox
  22.             Pict.Image = System.Drawing.Image.FromFile("c:imgIMAGEn" + Trim(Str(X)) + ".bmp")
  23.             Pict.Name = "Pic_imagen" & CStr(X)
  24.  
  25.             Pict.Width = 100
  26.             Pict.Height = 100
  27.             Pict.SizeMode = PictureBoxSizeMode.StretchImage
  28.             Pict.Left = y
  29.             Pict.Top = t
  30.             y += 120
  31.  
  32.             Pict.Tag = X
  33.             Pict.Enabled = False  ' importante
  34.  
  35.             Me.Controls.Add(Pict)
  36.             pb.Add(Pict)
  37.             Pict = Nothing
  38.         Next
  39.     End Sub
  40.  
  41.    ' Detector: de imagen sobre la que se pulsó.
  42.     Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
  43.         For Each k As PictureBox In pb
  44.             If e.X >= k.Left And e.X <= k.Left + k.Width Then
  45.                 If e.Y >= k.Top And e.Y <= k.Top + k.Height Then
  46.                     MsgBox(k.Tag)
  47.                 End If
  48.             End If
  49.         Next
  50.     End Sub
  51. End Class
  52.  
  53.  
  54.  


d ) El sistema utilizado para recoger aleatoriamente las imágenes (ignoro si relamente lo quieres así) no proporciona un sistema de imágenes únicas sino que salen repetidas... Un modo de solucionar esto se ofrece en éste apartado de código... que debería implementarse sobre el código de adquisición de las imágenes (botón1)

Código: Visual Basic
  1.  
  2. ' Crea una lista aleatoria sin elementos repetidos con valores entre 0 y el valor máximo (-1) pasado en el parámetro 'Max'
  3. Private Function ListaSinrepes(ByVal Max As Integer) As String()
  4.         Dim lis() As String
  5.         ReDim lis(0 To Max - 1) ' lista de cadenas de retorno
  6.         Dim k, t As Integer, x As String
  7.         Dim v As New List(Of String)   ' colección de cadenas
  8.  
  9.         For k = 0 To Max - 1   ' recrear la lista inicial
  10.             v.Add(CStr(k))       ' asignar valores correlativos a cada item... 0,1,2,3,4....
  11.         Next
  12.         For k = 0 To Max - 1
  13.             t = RND.Next(v.Count) ' tomamos un valor aleatorio entre los índices disponibles en la colección, pero los índices no se usan, sino su valor
  14.             x = v.Item(t)  ' recuperamos el valor único que contiene ese item
  15.             v.RemoveAt(t)  ' eliminamos el ítem de la colección, la colección se 'reordena', el valor recogido por tanto ya no se podrá volver a tomar, aunque se elija el msimo índice....
  16.             lis(k) = x  ' añadimos a nuestra lista de salida el valor único no repetido.
  17.         Next
  18.  
  19.         Return lis
  20.     End Function
  21.  
  22.     ' este pequeño código demuestra la lista sin repetición, añade un botón .... (button2) y púlsalo una y otra vez y verás que nunca salen repetidos
  23.     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  24.         Dim s() As String = Me.ListaSinrepes(9)
  25.         Dim lista As String = ""
  26.  
  27.         For k As Integer = 0 To s.Length - 1
  28.             lista &= s(k) & " "
  29.         Next
  30.         MsgBox(lista)
  31.     End Sub
  32.  
  33.  
  34.  

Entonces antes de ejecutar el bucle del código del boton1 deberías llamar a esta función:
Código: Visual Basic
  1.  
  2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  3.         Dim X, i, y, t As Integer
  4.         Dim Pict As PictureBox
  5.         y = 10
  6.         t = 10
  7.         dim lista() as string= ListaSinrepes(9)
  8.  
  9.  

Luego hay que sustituir las referencias a x por por  lista(x), por ejemplo: en ' Trim(Str(X)' pondríamos lista(X), etc....

Cualquier duda, pregunta...

Si un moderador puede y quiere cambiar el tema a vb-net (cuando el interesado responda haber leído el mensaje) sería lo adecuado...

373
Visual Basic para principiantes / Re: Problema con TextBox
« en: Jueves 29 de Enero de 2009, 10:22 »
Cita de: "IAO"
cuando finalice el tratamiento de los datos y la graficación..Falta bastante.
Bye('_')...

Creo que todo hubiera resultado más sencillo y breve si hubieras comentado de entrada tus 'carencias'. Es obvio que has tratado de utilizar un control Text para suplir la funcionalidad de un control List, por ello todo el embrollo y la dificultad para entenderte.

Para estos casos resulta muy adecuado indicar que se pretende conseguir  aparte de como lo estás haciendo. Pues así se te puede ofrecer una solución más óptima.

A lo que iba... Creo entender por la imagen mostrada que pretendes dibujar el gráfico resultante de esos datos, entonces te pregunto... cómo has pensado resolver el asunto tiempo con respecto al gráfico ?... dibujas todo el gráfico entero  y luego lo borras y lo vuelves a dibujar con nuevos datos ? o bien (más vistoso) vas dibujando contínuamente mientras el gráfico se desplaza hacia la izquierda (o a la derecha)... Lo digo mas que nada porque si has tenido problemas para manipular los datos, creo que tendrás también bastantes problemas para manipular el gráfico... en fin ya comentarás si se da el caso.

Por último, salvo que tu lengua nativa sea el inglés o vivas en un país de habla inglesa o sea una exigencia impuesta por quien te lo pueda haber pedido (que no parece el caso ni ninguno de los anteriores), porqué pones en inglés los textos ?...  El ordenador no deja de funcionar si en vez de 'Parity:' pones 'Paridad:' o si en vez de 'XY-Plot' pones 'Trazar gráfica'  y lo mismo para el resto de textos.

374
Visual Basic para principiantes / Re: Teclado
« en: Viernes 16 de Enero de 2009, 02:47 »
Cita de: "Wake.-"
( borrado )

No conviene que abuses de esas funciones, suelen fallar con bastante frecuencia y pueden desestabilizar programas y el propio sistema, lo que obliga a reiniciar el ordenador.

Enviar 2 o 3 pulsaciones de tecla suele funcionar bien, esas funciones se basan en seleccionar el formulario deseado, darle el foco y enviarle las pulsaciones, pero en un instante dado puede cambiar el foco a otro formulario. El sistema procesa en tiempo real miles de eventos al segundo, entre ellos es normal que suela ocurrir un cambio de foco, con lo que tus pulsaciones irán a un destino equivocado, que procesará un keydown/keypress (ó si es el arranque de un programa como línea de coamndos) si tiene código para ello, o si se interpreta como atajos de teclado. con los posibles desastres.

En cierta ocasión (la verdad hace casi 15 años, al principio de internet...) trataba de hacer un anti-keylogger el mecanismo estaba basado justamente en enviar otras pulsaciones aleatorias y pseudoaleatorias a intervalos controlados por un timer que se activaba tras capturar teclas (es decir un segundo mecanismo estaba a la escucha, para detectar cuando enviar pulsaciones y cuando no). durante las pruebas quedó patente, en pocos segundos el sistema empieza a hacer cosas raras aparecen y desaparecen ventanas, iconos e incluso después de reiniciar es probable haber fastiidiado algo sin saber qué ni cómo. Es interesante ver como desaparece funcionalidad del sistema de una forma prácticamente aleatoria... si decides probar algo así, hazlo en un disco con una instalación exclusivamente para pruebas. El antikeylogger que trataba de hacer sin esperarlo se había convertido en un pequeño y simple virus, pero muy eficaz y vistoso.

El problema de controlar esas funciones, radica en que se envian al formulario que tiene el foco, pero si el foco cambia justo entre que tu fijas el foco a un controlador y el envío de las pulsaciones, el receptor ha cambiado y (especialmente si se envían teclas de control, atajos de teclado o los reciibe un procesador de comandos) dependiendo del receptor y de qúé teclas son las que envíes el resultado es inesperado. Esto es tanto más probable cuanto más cantidad de pulsaciones se envían  y tanto más probable cuanto más tiempo dura la ráfaga de envíos.

375
Visual Basic para principiantes /
« en: Viernes 16 de Enero de 2009, 02:21 »
Cita de: "PepeCodigo"
Filtrar campos de registros por campos lógicos

Tengo una base dbf que me gustaría fusionar un registro de la misma en un documento word.

P.D. Bueno, finalmente decir que no tengo mucha experiencia en programación por no decir ninguna (un poco en lenguaje dBASE). Si existe fórmulas más sencillas agradezco cualquier orientación.

No logro entender tu pregunta.

Este foro es de VB,  quizás haya más posibilidades de que tu pregunta tenga una respuesta si preguntas en un foro específico de dBase o de Word.

Lo único que me queda claro es que para filtrar lo que quieres en alguna parte debes indicarle una 2ª condición:  ....  'and' ElCampoLogicoDeseado = true/false

Páginas: 1 ... 13 14 [15] 16 17 ... 29