• Martes 13 de Mayo de 2025, 11:35

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 ... 18 19 [20] 21 22 ... 29
476
Visual Basic para principiantes / Re: Funcion para Saber si Un Arreglo Esta Vacio
« en: Martes 2 de Septiembre de 2008, 11:39 »
Cita de: "m0skit0"
Declarar variables variant es de mala programacion puesto que son lentas y ocupan memoria innecesariamente. Yo prefiero mi solución porque es más rápida a la hora de ejecutar y ocupa menos memoria. Como regla general, JAMÁS deben usar variables de tipo Variant.
Efectivamente como regla general, no para todo caso habido o por haber... esta es una digna excepción.
En cuanto a que tu solución es más rápida y ocupa menos no estoy de acuerdo... tu fabricas un registro por el sólo hecho de no tener claro como mediar con un array no inicializado. si montas la solución que te doy en una función del modo que más te convenga (obtener true, false para ver si está declarado o devolviendo un entero indicando su límite a sabiendas de que -1 indica no inicializado) creo que es más rápido y agota menos memoria por la sencilla razón de que si finalmente tu programa hubiera de tener pongamos 300 arrays tu solución crearía 300 variables extras para reconocer su tamaño, aparte 300 descriptores del registro que también ocupa lo suyo. Mi solución no tiene ese problema la función puede recibir cualquier array si lo pones como parámetro, es por tanto una función universal sean cuantas sean los arrays que tengas. Además puedes usar la misma función con parámetros adicionales opcionales para redimensionarlo...

Además un problema que suele tener la gente es que una vez que termina de usar un array no lo destruye, porque luego le 'cuesta' volver a construirlo más tarde si lo necesita, mi solución permite además dejar de temer ese caso, con lo que cuando se precise puede eliminarse el array sin contemplaciones y sin tener que hacer un código o vairables extra de comprobación y/io mantenimiento. También he visto gente que usa un registro y en él un buleano para señalar cuando destruye el array y no debe utilizarlo. Lo cual es más de lo mismo y que mi solución hace innecesario.

Piénsalo un poco, dale vueltas y exprimenta...

post data: adjunto Nota de Mocosoft
Código: Text
  1.  
  2.  
  3. Nota   Lasmatrices de cualquier tipo de datos requieren 20 bytes de memoria más cuatro bytes para cada dimensión de matriz, más el número de bytes que ocupan los propios datos. Puede calcular la memoria que ocupan los datos multiplicando el número de elementos de datos por el tamaño de cada elemento. Por ejemplo, los datos de una matriz unidimensional que consten de cuatro elementos de datos tipo Integer de dos bytes cada uno, ocupan ocho bytes. Los ocho bytes que requieren los datos más los 24 bytes necesarios para la matriz suman un requisito total de memoria de 32 bytes para dicha matriz.
  4.  
  5. Un tipo Variant que contiene una matiz requiere 12 bytes más que la matriz por sí sola.
  6.  
  7.  
Resumiendo si tienes 300 arrays en un programa y usas una función como indico sólo usarás 12 bytes más usando los 300 arrays usando un registro con un integer aparte del array usarás 2bytes por cada array dicho sea 600 bytes + el tamaño de los 300 descriptores de cada registro, el tiempo empleado en acceder a un registro siempre requiere calcular la dirección del registro + la de la variable, por lo que usar un registro siempre tendrá un tiempo de acceso mayor para calcular la dirección efectiva, y esto se aplica no sólo a la variable que lleva el contador del tamaño del array sino también para el propio array cada vez que se usa.

477
Visual Basic para principiantes / Re: Funcion para Saber si Un Arreglo Esta Vacio
« en: Lunes 1 de Septiembre de 2008, 18:07 »
Cita de: "m0skit0"
Perdón, señor listo Nebire, UBound da error si el array no tiene ningún elemento. Prueba esto:

Código: Visual Basic
  1.  
  2. Dim Lista() as Integer
  3. Dim a as Integer
  4.  
  5. a = UBound(Lista)
  6.  
  7.  

Gracias por lo de 'listo', no hacía falta, y perdonado estás... ignorar cosas es lo más normal, pero no deberías precipitarte sin investigar un poco al menos, no te parece...?. Crees que lógico hacer una afirmación sin conocer en profundidad lo que se hace y dice ?.

Prueba el siguiente código comentado... y fíjate que las 3 primmeras líneas de tu código son casi idénticas a las mías, la diferencia está en lo que ignoras

Código: Visual Basic
  1.  
  2. ' a nivel de módulo, en el formulario
  3.  
  4. Dim Lista    ' de entrada se define como una variant, no un array...
  5. Dim a as Integer
  6.  
  7.  
  8. Private Sub Form_Click()
  9.   'for k= 0 to 15
  10.  
  11.      If Not IsArray(Lista) Then
  12.         Lista = Array()
  13.      End If
  14.  
  15.     a = UBound(Lista)   ' al llegar aquí esto nunca da error, incluso cuando Lista() no ha sido inicializado todavía
  16.  
  17.      If UBound(Lista) = -1 Then
  18.         ' aquí se entrará cuando el array no haya sido inicializado, incluso cuando es nothing, para probar esto activar el bucle for o pulsar más de 10 veces en el formulario...
  19.         msgbox "El array no ha sidfo inicializado, pero no da error...."
  20.         ReDim Lista(0 To 0)    ' por ejemplo se aprovecha para inicializar el array a 1 elemento... o lo que se quiera
  21.    Else
  22.         ReDim Preserve Lista(UBound(Lista) + 1)  ' se redimensiona en un elemento más que es lo que quería el que abrió el hilo    
  23.    End If
  24.     msgbox "La matriz LISTA tiene " & a  & " elementos.... palabra de ley."
  25.  
  26.        'eliminar la matriz
  27.       if ubound(lista)=10 then
  28.           set Lista=nothing
  29.       end if
  30.  
  31.   ' next
  32. end sub
  33.  
  34.  
  35.  

Ahora pruébalo paso a paso y me comentas.... para la próxima si no encuentras la solución, simplemente dí 'No lo veo', queda más propio con la verdad decir no lo veo que decir es falso, cuando es verdadero...

478
Visual Basic para principiantes / Re: Funcion para Saber si Un Arreglo Esta Vacio
« en: Domingo 31 de Agosto de 2008, 20:46 »
Cita de: "m0skit0"
Cita de: "cpmario"
Debes basarte en la otra variable (la que suma) la i


Código: Text
  1.  
  2. public type tArreglo
  3.      Arreglo() as Tipo1
  4.      NElementos as Integer
  5. end type
  6.  
  7.  

Cada vez que pongas un elemento en Arreglo, sumas uno a NElementos.

Salud y república

Esto es una tontería la función Ubound() es perfecta y lo es por si misma, tampoco hace falta otro contador posterior sino en todo caso anterior que a la vez sirve para la verificación...

Código: Text
  1.  
  2.   dim limite as integer
  3.    
  4.    limite= ubound(Arreglo)
  5.    if limite <>-1 then
  6.         '  la matriz está dimensionada, tiene elementos...
  7.         redim preserve Arreglo(limite +1)
  8.   else
  9.      ' la matriz no está dimensionada
  10.   end if
  11.  
  12.  
  13.  

479
Visual Basic para principiantes / Re: Pregunta....
« en: Domingo 31 de Agosto de 2008, 20:36 »
Ya te he respondido en el mensaje anterior... aquí sólo quría corregirte acerca de la propiedad...

En un OCX las propiedades si han cambiado deben anunciarse para que las rutinas Readproperty y writeproperty actualicen correctamente los datos.
Si tu propiedad era:
 
Código: Text
  1. Public Property Let A(ByVal vA As String)
  2.     If IsNumeric(vA) Then
  3.         If Val(vA) >= 0 And Val(vA) < 1000 Then
  4.             iA = vA
  5.         Else
  6.             iA = 1
  7.         End If
  8.     Else
  9.         iA = 1
  10.     End If
  11. End Property
  12.  

Debe quedar algo así como:

Código: Text
  1.  
  2. private p_ValorMax as integer ' almacena el valor de la propiedad ValorMax
  3. Public Property Let ValorMax(ByVal v As integer)
  4.     if v>=0 and v<1000 then
  5.         p_ValorMax=v
  6.         PropertyChanged "ValorMax"
  7.     else
  8.         if p_ValorMax<>1 then
  9.             p_ValorMax=1
  10.             PropertyChanged "ValorMax"
  11.         else
  12.            ' no cambia nada y por tanto no es necesaro anunciar cambio de valor en la propiedad
  13.         end if
  14.     end if
  15. End Property
  16.  
  17.  

Otra cosa te indico si recibes un valor que ha de ser numérico el parámetro de la propiedad que sea numérico, si usan enteros pues un byte, integer ó long el que cubra el rango tolerado, y si es decimal un single o double, pero no un string, se pierde tiempo en convertir cadenas a valores luego a cadena lyuego otra vez a valores... deben hacerse las menos conversiones posibles... si tomas la propiedad de un control textbox, por ejemplo fíjate que ya la propiedad si su text no es numérico ya devuelve 0 salvo que que hagas un ValorMax=val(textbox1.text) y exista un texto que pueda valorarse numérico, como porejemplo ''299perro'' que tomaría 299... por tanto si te devuelve '0' ya no tienes que evaluar con la función isnumeric, sino sólo si está o no dentro del rango que tu querías mayor o igual a 1 y menor de 1000.

480
Visual Basic para principiantes / Re: Mostrar Errores en Formulario de Ocx
« en: Domingo 31 de Agosto de 2008, 20:17 »
Cita de: "ferhn"
en un formulario tengo dos label una llamada lblmsj y otra llamada lblError .... ademas en el formulario tengo una OCX que contine un texto llamado txtNum, como haga para que cada vez que mofique txtNum me muestre ese valor en lblmsj  
En el OCX  tiwenes que incluir un evento tipo 'Change'  :

Código: Text
  1. public event Change()
  2. ' Luego sobre el evento change del txtnum debes provocarlo validarlo
  3.  
  4. private sub TxtNum_Change()
  5.     raiseEvent Change()
  6. end sub
  7.  
entonces ahora la instancia del OCX ya recibe un evento change, si suponemos que tu ocx se llama MiTextBox1 puedes buscar el evento change para escribir el código pertinente.

Cita de: "ferhn"
...y que cuando en txtNum ingrese cualquier dato que no sea numerrico lblError.Caption me muestre "El valor debe ser numerico"......????   :(  

Para esto nuevamente debes crear un evento, por ejemplo :
Código: Text
  1. Public event NoNumero
  2.  
  3. En alguno de los eventos del TXTNum, por ejemplo Keypress, validas...
  4. Private Sub TXTNum_KeyPress(KeyAscii As Integer)
  5.     if KeyPress <48 or Keypress >57 then
  6.         KeyPress=0  ' borramos el carácter introducido
  7.         RaiseEvent NoNumero
  8.     end if
  9. End Sub
  10. ' debes notar que el punto ó la coma forman parte también de un número, por lo que deben validarse también eso sí, nunca van más de 1 en una misma cifra...
  11. 'Luego en el formulario trabajando sobre el evento de la instancia del OCX recibes cuando suceda la señal y la tratas como desees en tu caso:
  12. private MiTextBox1_NoNumero()
  13.     lblerror.caption="El valor debe ser numerico"
  14. end sub
  15.  
  16. ' aunque es mejor no mostrar ese error en un label, si no se va a borrar tras ser leído, un msgbox sería más correcto...
  17. private MiTextBox1_NoNumero()
  18.     msgbox "El valor debe ser numerico"
  19. end sub
  20.  
  21.  
  22.  

481
La taberna del BIT / Re: Trabajo final de carrera
« en: Lunes 7 de Julio de 2008, 15:33 »
Un  programa OCR, todavía no hay tantos y es un campo para mejorar...
Partes de una imagen que supuestamente tiene texto...

482
La taberna del BIT / Re: Y ahora, que le pasará a las FARC ??
« en: Lunes 7 de Julio de 2008, 15:23 »
Las FARC son un cáncer en Colombia. Si se logra extirpar, la salud se extenderá al resto de la sociedad.

Cuando se tiene cáncer, los que pasan a tu lado (entiéndase países) lo hacen con recelo, por el miedo a que pueda afectarles. Es indicutible que si alguien quiere invertir en un negocio en un país y hay un alto índice de delincuencia y peor aún de terrorismo socual o económico (por que eso es lo que son las FARC hoy día) pasen de largo  y vayan y si no hay mas remedio que hacerlo se haga con cautela y escasez.

Yo creo que la liberación de Ingrid B. influirá positivamente para la liberación del resto de personas y especialmente para que haya gente que deje de prestar su apoyo a esas manadas de vagos. Del ideal político que los conducía tantos años atrás, ya no queda nada ni tiene sentido ahora es sólo una mera causa de superviviencia sin trabajar todo se reduce a un motivo económico y auna cuestión sicológica de 'aquí mando yo porque me da la gana'.

Espero que las FARC y otros terroristas se vayan desmantelando sistemáticamente...

483
VB .NET / Re: Ordenar numeros en un solo TextBox
« en: Domingo 6 de Julio de 2008, 14:18 »
Cita de: "canon_d"
mmmm ok gracias por la ayuda tratare de hacerlo. aunque a mi me hubiera gustado nadamas hacerlo en un solo textbox. :(  :(

A ver como dice mollense, por hacer se puede hacer, la cuestión es si lo quieres hacer así porque debe ser así, si lo quieres hacer así sólo por cabezonería tuya, o por desconocimiento de como será más adecuado.

Para entender que es lo 'correcto' se debe saber que un textbox ha sido diseñado para albergar un 'elemento', por tanto si tu quieres meter más de un elemento en un textbox, entonces diremos que sigues el razonamiento 'cabezón' lo quieres hacer porque te da la gana, si has de meter más de un elemento pero no te emperras en meterlo en un solo textbox entonces te diremos que para eso existe el listbox, para tratar más de un elemento.

En cambio si sigue siendo un sólo elemento que necesitas dividir en varias partes trabajar sobre las partes y volverlas a unir (si lo último no se cumple volveríamos al listbox), entonces si sería adecuado el textbox, ya que en origen y en destino son un único elemento. Si es este el caso debes cortar el elemento en sus partes e introducirlas en un array luego quitas, añades, ordenas y finalmente vuelves a unir...

por ejemplo: sean 2 textbox uno sólo tiene cifras del 0-9 es decir se consideran cifra a cifra el 2º textbox tiene cualquier cifra, pero las cifras están separadas entre si por un guión(ú otro carácter), en el ejemplo disgregaremos los minielementos, los ordenaremos y los volveremos a reintegrar en sus textbox

Código: Visual Basic
  1.  
  2. private sub TrabajarlosTextbox() as
  3.     textbox1.text= Operar_Texto(textbox1.text,"")  ' textbox1 no tiene separador entre sus elementos, se consideran uno a uno
  4.    textbox2.text= Operar_Texto(textbox2.text,"-")  
  5. end sub
  6. '  distribuye los subelementos de un texto sobre una matriz, los ordena y los vuelve a reunir (sin separador)
  7. private function Operar_Texto(texto as string, separador as string) as string
  8.     dim elementos() as string
  9.     if separador <>"" then  ' cuando hay un separador, este actúa como lo que se ha indicado.
  10.         elementos= split(texto,separador)
  11.     else
  12.         redim elementos(0 to len(texto) -1)
  13.         for k= 1 to len(texto)
  14.             elementos(k-1)= mid$(texto,k,1)
  15.         next k
  16.     end if
  17.    
  18.     array.sort(elementos)
  19.     return string.concat(elementos)
  20.  
  21. end function
  22.  
  23.  

Nota que al volver a reunir el array (concatenar sus elementos) no se incluye separador, eso queda como ejercicio para ti...
p.d.: veo raro los colores de visual basic....

484
VB .NET / Re: problemas de compatibilidad conocidos
« en: Sábado 5 de Julio de 2008, 17:08 »
Cita de: "zatmec"
hola, instale visual 2003 .net y me manda un error de compatibilidad con windows vista...sobre un archivo devenv.ee...alguna idea? le puse en buscar solucion pero no pasa nada!

Si te manda un error y quieres que alguien te asesore, no crees que deberías indicar íntegramente el mensaje de error ?????. Crees que existe algún mecánico que pueda conocer el problema exacto de un vehículo con sólo que alguien le diga mi vehículo no arranca... sin  entrar en detalles ????.  No hay adivinos, ni es plan jugar a ser adivinos ' a ver si va a ser que falla esto...????. Sé directo, explica tu razón y pon el mensaje íntegro o no pongas nada.

De entrada sólo te diría que te actualices por lo menos al VS2005 y si puedes al VS2008, que es lo mismo que te diría el mecánico sin más, mándalo a la chatarra y cómprate uno nuevo. Es la única respuesta correcta para un mensaje sin detalles.

485
Sobre los Foros de SoloCodigo / Pérdida de mensaje, caduca la sesión ...?
« en: Sábado 5 de Julio de 2008, 16:40 »
He descubierto un fallo bastante desagradable, bueno más que fallo una carencia de característica...

Después de postear uno de esos largos mensajes que a veces te salen, resulta que la sesión ha caducado ( te das cuenta después),  con lo que al enviar el mensaje te lleva a la ventana de login, pero el mensaje que has redactado se lo ha comido, que digo comido, devorado... aunque vuelvas atrás no recuperas el mensaje, después del tiempo que te ha llevado lo más desagradable que te pueda ocurrir es algo como esto.

La verdad esto ya estaba superado, al menos en otros tipos de foros y esperaba que a estas alturas el phpBB Group hubiera tomado nota y capture el contenido del mensaje, así si te desloga al menos puedes aún copiar el mensaje al portapapeles, volverte a loguear y volver a publicar el mensaje, pero no ya volver a redactarlo. Cuando vas a decir buenos días te da igual, pero cuando es un mensaje elaborado esto te pone de muy mala leche...

No sé si nuestro jefecillo (IronMan) tiene tiempo y ganas de implementarlo o si existe algún plugin que pueda buscar y añadir fácilmente (supongo que si).

Yo al menos entiendo que mientras en mi ventana siga poniendo mi alias mi sesión no ha caducado, obvimanete el servidor no tiene porqué saber lo que ponga en mi ventana si no ha habido tráfico en dicho plazo, en ese caso está demás poner un alias para desconectarse si no tiene control sobre cuando estás o no conectado, dicho de otro modo no es una referencia válida lo que onga o deje de poner , tampoco estaría de más saber en que tiempo expira la sesión, al menos cuando recibas una llamada de teléfono o pares para comer, podrás saber si existe la posibilidad de que ya esté fuera y oportunamente guardar el mensaje 'por si las moscas...' .  Pero vamos que en la época en que estamos esto es algo que debería ser automático, aunque ya se sabe que como dice el refrán: '...en casa del herrero... cuchillo de palo'

486
VB .NET / Re: validar
« en: Viernes 4 de Julio de 2008, 14:54 »
Cita de: "alexis17"
hola que tal,

intente traducir el metodo asi pero manda error

   ... dice que texbox es un tipo y no puede ser utilizado como exprecion

cuando alguien dice 'traducir' nunca quiere decir literalmente, siempre hay que salvar las 'distancias' entre lenguajes. No hace mucho en otro lugar a uno le indiqué una función que usaba VarPTR y el tipo lo tradujo a VB 2005 literalmente, obvimanete no lo funcionó porque esa función no existe, sin embargo es plenamente traducible pués existe AddressOf, que es el equivalente.

Veamos, tu caso es similar... traduces literalmente reúne todos los textbox en una misma función y todos los combobox en otra si aún quieres juntar diferentes tipos en una misma función puesdes usar 'id TypeOf(objeto) is 'objeto' luego... elseif typeOf... con lo cual discriminas posibles situaciones por ejemplo la propiedad imagen de un picturebox que no guarda relación con la propiedad text de un textbox o la propiedad item de un combo....

En el código presentado debes poner simplemente (corrige la línea con esto...)

Código: Text
  1. if sender.text = "" then  
  2. throw new exception("El campo de " & sender.name & "no puede quedar vacío")
  3.  
  4.  
  5.  
Nota que todos los textbox que deseas deben estar apuntados a dicho manejador.... al final del sub el 'Handles text1.validating, ....text45.validating, text46.validating ejemplo:

Código: Text
  1. Private Sub ValidarVariosTextos_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Textbox1.Validating, Handles Textbox2.Validating, Handles Textbox3.Validating
  2.   ' el código anterior de verificación
  3. End Sub
  4.  

487
VB .NET / Re: Buscar un directorio
« en: Viernes 4 de Julio de 2008, 14:37 »
Cita de: "Mollense"
Cita de: "slatancrouch"
Bueno nesesito un programa que recorra toda la computadora y busque una carpeta con un nobre en especifico, se como copiar el directorio, bueno en este caso la carpeta, pero no se como recorrer todos los directorios de la computadora, espero puedan ayudarme, de antemano grasias
Usá el buscador del foro. Eso ya se respondió aunque ahora no lo encuentro. Si no lo encontrás mañana lo busco con mas tiempo.

cierto.... usa como criterio de búsqueda FileSystemObject 'FSO' con la collección files y folders de forma recursiva llegas hasta donde quieres si lo precisas también puedes usar la colección drives si no conoces la unidad donde debiera estar.

488
VB .NET / Re: Ordenar numeros en un solo TextBox
« en: Viernes 4 de Julio de 2008, 14:29 »
Cita de: "canon_d"
quiero es que en un TextBox introduzca varios numeros revueltos... con un boton los ordene
Se puede clarificar mucho más... simplemente usa el textbox para introducir datos, y estos los pasas a un listbox mediante un botón de validación. al listbox le estableces su propiedad 'Sorted' a true, entonces cada vez que añadas un elemento automáticamente se introduce ordenadamente. El botón para ordenar por tanto no es necesario, sería en cambio preciso uno para validar y añadir el contenido del textbox al listbox, si se introduce (por ejemplo caso de que no quieras repetidos), luego borras el contenido del textbox.

Si lo que indicas lo necesitas tal como dices para algo específico entonces explica ese algo no el reducto de la parte, ya que como se ve resulta absurdo.

489
VB .NET / Re: Arrays
« en: Domingo 29 de Junio de 2008, 18:54 »
Cita de: "SysEdw"
Gracias por la respuesta, pero como lo creo,  a ver si alguien tiene un manual o un ejemplo
Bueno, al principio yo echaba de menos esa característica y encontré hasta 3 modos de solventarlo.

Salvo en arrays muy grandes ya no suelo usarlo, esto es si tengo 4 controles que básicamente van a ejecutar la misma rutina y donde luego cada uno hace algo distinto al resto entonces no uso arrays porque no interesa. Para hacer eso mismo simplemente pon el primer control pulsa dobleclick sobre él y se abre la ventana de código si es el evento deseado donde antes ponías por ejemplo:

Código: Text
  1.  
  2. Select case index
  3.      case 0
  4.  
  5.     case 1
  6.  
  7.     case 2
  8.  
  9. end select
  10.  
  11.  

Ahora puedes poner:

Código: Text
  1.  
  2. select case sender.tag
  3.      case 0
  4.  
  5.     case 1
  6.  
  7.     case 2
  8.  
  9. end select
  10.  
  11.  

.... y los nuevos controles que debían ser del array simplemente selecciona en propiedades la ventana de 'eventos'  si usaste click elige la misma rutina para ese control, ahora si vas al código verás que pone:

Código: Text
  1.  
  2. private sub Button1_Click(....) handles.Button1.click , Handles.button2.click .... ' cada botón que enganches aparecerá aquí, sólo falta que asignes la propiedad tag a cada uno,
  3.  
  4.  
También puedes usar 'sender.name' en vez de usar el tag, o cualquier otra propiedad....

Si a pesar de todo sigues necesitando usar arrays me indicas y te pondría el código de un ejemplo, pero vamos para arrays de pocos controles no interesa esto es más rápido y no resulta más complejo.

490
La taberna del BIT / Re: Apple prohíbe fabricar bombas atómicas con iTunes
« en: Domingo 29 de Junio de 2008, 17:33 »
Citar
Es difícil entender la forma en que sería posible fabricar bombas de destrucción masiva con el programa iTunes, por lo que Apple al parecer es demasiado optimista respecto de las capacidades de su software.
   
Evidentemente ningún aparato informático fabrica una bomba ni un coche ni nada ya que eso es tarea de los brazos robotizados, pero hasta una simple calculadora puede ser usada como un temporizador de una bomba. Obviamente esos chicos de 'Freakonomics' también lo son de 'Tontonomics' al iTunes se le puede agregar perfectamente un programa para pilotar un avión o para controlar un minilaboratorio de fabricación de bombas, por supuesto que si.

Citar
Posteriormente, se indica que iTunes no está diseñado para controlar centrales de energía nuclear, navegación aérea ni sistemas de comunicaciones, equipos de seguridad u otros implementos que pueden causar muerte, daños a personas o al medio ambiente o mal funcionamiento de programas informáticos.
Cláusulas similares se pueden leer en las condiciones de uso de los sistemas Operativos de Microsoft, yo recuerdo haber leído íntegramente la licnecia de uso de Windows 3.0 (qué lejos en el tiempo  -_- ) ponía cosas similares, ignoro si lo siguen poniendo porque desde entonces jamás he vuelto a leer otra licencia de Microsoft enteramente. Las cláusulas en realidad son para exclusión de responsabilidades, es como decir se te quemó el laboratorio ? ... mi licencia dice que no era adecuado para eso, no me cuentes historias ni me vengas reclamando ahora...

Por otro lado cada uno es libre de ponder las condiciones que le salgan de las narices, como si uno quiere poner que su programa no debe usarse entre las 12 de la noche y las 6 de la madrugada o que nadie que se llame Óscar pueda usarlo...

491
Visual Basic 6.0 e inferiores / Re: Problemas Con El Mastermind
« en: Domingo 29 de Junio de 2008, 17:05 »
No tiene mala pinta.  :beer:
El código no es muy clarificador, resulta nebuloso. Acostúmbrate a usar funciones y rutinas para separar el código de manipulación de la interfaz (botones, y demás) de lo que es la lóogica del programa en este caso del juego. No es posible separarlo totalmente pero usando una función puedes darle un nombre coherente y cuando decidas cambiar un botón por otro objeto para realizar la misma acción te quedará más claro. Siempre que puedas nombra tus variables con algo que tenga sentido al menos para ti. :hitcomp:

Te mando un ejemplo de un ejecutable gráfico que acabo de realizar...   :comp:   en otro momento (si a la gente le interesa y lo pide) las fuentes...
debajo de la imagen se puede descargar el ejecutable:


debajo de la imagen se puede descargar el ejecutable:

492
La taberna del BIT / Re: Fotos de Usuarios del Foro
« en: Lunes 23 de Junio de 2008, 23:19 »
Cita de: "Eternal Idol"
Bienvenido levante el receptor (osea que levantes el tubo del telefono para hablar).

jajaja.. proveniendo de una chica eso podría ser malinterpretado si no se aclara lo del 'receptor'.  :devil:  :devil:  :devil:

493
Novedades en SoloCodigo / Re: Ya estamos de vuelta :)
« en: Domingo 22 de Junio de 2008, 21:32 »
Bueno reconozco que de entrada me siento 'algo perdido', pero es normal cuando hay un cambio, la mente dirige a su atención a donde esperas encontrar lo que había antes y que ahora de estar está en otro sitio o con otro nombre... un período de adaptación y listo...

... Que tal si lo llamamos 'Bit-Bit' y para abreviar BB ??. La cuestión es: juega algún papel especial, ó solo es una imagen asignada como logo de 'solocodigo'

494
Visual Basic para principiantes / Re: Envio De Datos Basic
« en: Sábado 21 de Junio de 2008, 01:37 »
En el mensaje anterior te puse todo el código, las modificaciones a realizar son mínimas. El siguiente código es una copia de una función que te puse en el mensaje anterior.
Código: Text
  1.  
  2. Private Function Examinar_Puertos()
  3.    puertos = Detectar_Puertos ' contiene la matriz de los 16 puertos con valores true-false (1-0)
  4.    puertos = filtrar_Puertos  ' filtramos para obtener sólo los true
  5.    If puertos(0) &#60;&#62; 0 Then
  6.       ' se podrían poner en un listbox para cambiar si un puerto arrojara problemas
  7.       '   o si eso ocurre se podría volver a ejecutar nuevamente la rutina de detección de puertos
  8.        MSComm1.CommPort = puertos(1) ' tomamos el primero de los hallados, es lo más consecuente
  9.        MSComm1.PortOpen = True
  10.       'MSComm1.Settings= ' establecemos las características que deseemos y qeu sean acorde a nuestro hardware
  11.       ' otras acciones
  12.    Else
  13.        MsgBox &#34;No se encontraron puertos disponibles&#34;
  14.    End If
  15. End Function
  16.  
  17.  

Entonces la parte a retocar es lo que hay dentro de la comprobación de la matriz:
Código: Text
  1.  
  2.     ' se añade esta línea
  3.     list1..clear  ' vaciamos el contenido previo
  4.  
  5.     If puertos(0) &#60;&#62; 0 Then
  6.    '......... aquí van los cambios  
  7.  
  8.     Else
  9.          MsgBox &#34;No se encontraron puertos disponibles&#34;
  10.     End If
  11.  
  12.   '......... se añade esta línea también
  13.    commandConectar.enabled= false  ' de entrada se desactiva hasta que se pulse en el listbox, (si es que hay alguno
  14.    list1.enabled=list1.listcount&#60;&#62;-1 ' el listbox sólo debe estar activado si tiene contenido.
  15.  
  16.  
  17.  

Lo que hay que hacer es poner un bucle que introduzca los puertos de la matriz en el listbox.
Código: Text
  1.  
  2.      
  3.      for k=0 to ubound(puertos)
  4.           list1.additem(puertos(k))  ' se añaden al listbox
  5.      next
  6.  
  7.  

El cambio que hemos hecho hasta el momento,  es llenar el listbox. El código que antes había donde se ha insertado éste es el código que se debe poner en el evento click del botón 'conectar al puerto seleccionado'. El puerto seleccionado será el que esté seleccionado en el listbox, de entrada quedamos sería más correcto dejar el botón desactivado y sólo activarlo en caso de que se seleccione uno en el listbox, esto implica que si no hubiera puertos disponibles el listbox estaría vacío y por tanto no se podría pulsar el botón de 'conectar usando el puerto seleccionado', porque no hay ninguno disponible.

en el evento click del listbox:

Código: Text
  1.  
  2.      commandConectar.enabled= (list1.listindex&#60;&#62; -1)
  3.  
  4.  
y finalmente en el evento click del botón para conectar, se coloca lo que hemos sacado del condicional anterior alterando para usar el puerto seleccionado en el listbox:
Código: Text
  1.  
  2.     '  esta línea es la que era antes, ahora la modificamos para que tome la selección del listbox
  3.      'MSComm1.CommPort = puertos(1) ' tomamos el primero de los hallados, es lo más consecuente
  4.       '.....esta línea siguiente se usa sólo para comprobación, quitar cuando verifiques que funciona bien
  5.       dim usar as vbmsgboxresult
  6.       usar = msgbox (&#34;Seguro que quiere usar el puerto Nº -&#34; & list1.list(list1.listindex) & &#34;- ? &#34;, vbyesno, &#34;Que puero libre usamos...&#34;)
  7.      if usar= vbno then exit sub
  8.  
  9.       ' esta es la línea modificada
  10.       MSComm1.CommPort = list1.list(list1.listindex)
  11.  
  12.        MSComm1.PortOpen = True
  13.       'MSComm1.Settings= ' establecemos las características que deseemos y quu sean acorde a nuestro hardware
  14.       ' otras acciones
  15.  
  16.  
  17.      ' una vez usado el puerto deseado hay que desactivar el listbox y el botón, o no según convenga de acuerdo a lo que vayas  a hacer.... Si vas a tal sitio y has decidido usar la carretera norte, las demás deben quedar desactivadas o puede ocurrir que te pierdas.... por la confusión....
  18.      list1.enabled=false  ' cuando se haga un chequeo de puertos el listbox se activa si hay puertos diponibles.
  19.      commandConectar.enabled=false
  20.  
  21.  




En verdad todo esto es muy sencillo, así no entiendo como puedes entregar un proyecto sin conocer estas simplezas. Si no sabes resolver esto, creo que no mereces lo que sea que esperas obtener al entregar dicho proyecto. Pués que pasará cuando realmente surja algo realmente complejo ???

495
Visual Basic 6.0 e inferiores / Re: Problemas Con El Mastermind
« en: Viernes 20 de Junio de 2008, 22:18 »
Hay algunos detalles que he dejado sueltos...

Por ejemplo es deseable que el color elegido al azar no esté repetido, por lo que tendrás que comprobarlo con cada elección eso es tarea tuya.

En casi todo he usado un índica basado en 0 así 'lineaActiva' también debería ser 0 de entrada ya que hasta que no se llegue a las celda 4 no será la línea 1 de acuerdo a la fórmula usada  'lineaactiva= celda \ 4'.

No incluí una comprobación de final de juego si el jugador completa todas las líneas sin acertar. Tu deberías saber donde debe ponerse, así que queda a tu trabajo.

Fíjate que he dejado abierto la posibilidad de que puedas referirte a la matriz de solución tanto por su color como por el índice que ocupa en la fila de donde el jugador selecciona las 'bolas', en el código esto se 've' mezclado, para forzarte a pensar y descubrir que falla, por tanto antes de empezar si lo piensas bien deberías elegir cual, para hacer la lógica acorde a esa eleccción.

Si te animas pon el resultado final que veamos como te quedó...

496
La taberna del BIT / Re: Evento Windows Presentation Foundation
« en: Jueves 19 de Junio de 2008, 21:49 »
Cita de: "JuanK"

 
No había vuelto a ver el hilo...
Citar
O sea, como tienes pereza de leer quieres que yo te haga un tutorial

jajaja... no, no me da pereza leer.  Sólo me da pereza si es en inglés y son cuestiones técnicas ya que es frecuente que aparezcan términos que uno no sabe traducir (lo que ocurre con una tecnología emergente) y desviar la lectura contínuamente para investigar los términos produce bastante distracción y se avanza poco.

Citar
porque supones que yo si tengo tiempo y no soy peresozo...  :lol:   :hola:
Bueno no he supuesto que tengas tiempo ni si eres perezoso o no. Más bien mi supuesto es que hacer un tutorial por alguien que pueda conocer algo con cierto detalle es más asequible que a alguien que sólo tiene ideas dispersas al respecto.

Gracias por los links en español, en su momento aún no lo habían traducido, aunque debí seguir mirando cada cierto tiempo...

497
VBA / Re: Decompilador Vb6
« en: Jueves 19 de Junio de 2008, 01:56 »
Espero que de ahora en adelante tengas 3 o 4 copias y una al menos en un soporte externo exclusivamente para eso.

Intenta con anakrino...

498
La taberna del BIT / Re: Nacionalidad De La Web
« en: Jueves 19 de Junio de 2008, 00:24 »
Son de Raticulín al lado del planeta Ganímedes.... como todo el mundo sabe. :ball:

499
La taberna del BIT / Re: Mi Primo Avelino
« en: Miércoles 18 de Junio de 2008, 11:37 »
Eres tu quien no me ha comprendido a mi..
Te he nombrado portavoz para que dirijas mis palabras al blog de donde sacaste el contenido... reléeme sobretodo al final, que te nombre a ti en vez de al primo avelino es la parte concordante uséase donde pone tu nombre tu debes traducirle el suyo capiscas...???

500
Visual Basic 6.0 e inferiores / Re: Problemas Con El Mastermind
« en: Miércoles 18 de Junio de 2008, 11:06 »
A ver, recuerda que aquí no se hacen tareas. Expones dudas y se te orienta.

No se exactamente cual es tu problema, creía que era que no entendías el código anterior, ahora pones el formulario pero no reflejas cuales son las dudas que tienes ... no cnoces las reglas del juego?.

En fin más bien creo que no sabes por donde empezar.Entonces te explico someramente como proceder pero el trabajo de programarlo será tuyo.

Veamos: De entrada podrías usar colores en vez de números, basta que pintes 10 colores, por ejemplo 10 controles label(label1(0) ... label1(9))  y le das color de fondo distinto y que la 'banca' elija al azar 4 de ellos .
Algo así:
Código: Text
  1.  
  2. public function Barajar_JugadaBanca() as integer()
  3.    dim colores(0 to 3) as integer
  4.     randomice timer  ' activamos aleatorio usando como semilla el timer
  5.     for k= 0 to 3
  6.        colores(k)= int(10 * (rnd +1)  'tomamos una bola al azar, no nos importa el color sólo la posición en la matriz
  7.     next
  8.     Barajar_JugadaBanca=colores
  9. end function
  10.  
  11.  

Luego de tener la jugada guardada, le cedes el turno al jugador 'destapando' las celdillas y activando las bolas. las bolas son controles  label (o controles image o picture) . Inicias el contador de oportunidades del jugador (un bucle va bien si tiene 10 jugadas pues eso ). Cuando pulse en el control que contiene un color capturas el color del fondo  colorElegido= label1(index).backcolor  ' colorelegido es un long

luego esperas que pulse en la línea de controles, las celdillas son una matriz de dos dimensiones

Código: Text
  1. public type infoCeldas
  2.     celda as long   ' contedrá el color
  3.     usado as boolean   ' para marcar que se ha colocado bola en ella
  4. end type
  5.  ' será 0 to 9, 0 to 3 pero eso cuando se redimensiones el array
  6. dim celdas() as infoceldas
  7.  

Cuando el usuario pulse en la línea activa (para indicar la línea activa ponle un shape rodeando las 4 celdas en que debe depositar sus bolas.

Las celdas como controles son tambien label pero con fondo blanco de entrada. necesitarás 40,

Código: Text
  1. dim lineaActiva as integer ' indica que línea sería la activa, al iniciar una partida su valor se pone a 1
  2. lineaActiva=1
  3.  
en el evento click delos  'labelCeldas' compruebas si se pulsó en la línea activa

Código: Text
  1.  
  2.  dim lineaJugador as integer
  3.  dim posicionLinea as integer
  4.   lineaJugador= index&#092;4  ' por ejemplo si era la 18  = línea 4
  5.  
  6. if lineaJugador= lineaActiva then  '
  7.     posicionLinea = index mod 4 ' por ejemplo si pulsó en la celda 18 será la 2ª en
  8. la línea
  9.     if celdas(lineaJugador,posicionlinea).usado=false then    ' depositamos el color elegido
  10.          labelcelda(index).backcolor=colorelegido
  11.          celdas(lineaJugador,posicionlinea).usado=true ' la marcamos como usada
  12.          celdas(lineaJugador,posicionlinea).color=colorElegido  ' para comprobar color posteriormente
  13.         for k=0 to 3  ' comprobamos si la línea está completa
  14.              if celdas(lineaactiva,k).usado=false then exit sub  ' si hay alguna sin marcar se sale, a la espera de que esté completo, entonces el bucle finaliza sin salir y se ejecuta el código que le sigue
  15.         next
  16.         if comprobar_Linea=true then
  17.               ' acertó , se notifica al jugador, juego termina
  18.         else
  19.               lineaActiva=lineaActiva +1
  20.               ' desplazamos el shape a la siguiente línea
  21.         end if
  22.     else
  23.         beep ' esa posición ya está ocupada
  24.     end if
  25. else
  26.     beep  ' la línea no es la activa
  27. end if
  28.  
  29.  
  30.  

comprobar_Linea es una función que compara la matriz por pareja de índices en un bucle entre 0 y 3 entre la matriz que contiene los colores ocultos que elegimos aleatoriamente y la matriz celdas(lineaActiva, ...)... esta función a su vez marca cada acierto o fallo al lado con unos form1.line(x1,y1)-(x2,y2), monoColor, BF  (monoColor debería ser blanco o negro (vbBlack ó vbWhite) en función de si acertó o falló.

Como el que debe pensar es el jugador aquí no hay que diseñar estrategia para resolverlo, te limitas a: crear función Iniciar_Partida donde pones todas las celdas del jugador en blanco haces un form1.cls para borrar los cuadraditos de fallo o acierto sobre las líneas. iniciar partida se invoca desde un botón que se activa cuando la partida termina y cuando se abre el programa, iniciar partida también borra la matriz celdas,  redim celdas(0 to 9, 0 to 3), toma la matriz aleatoria de colores (usando índices o el color eso a tu gusto) se deshabilita el botón a sí mismo y antes de salir de dicho evento se le pasa al turno al jugador...

Vamos ya lo tienes mascado...

Páginas: 1 ... 18 19 [20] 21 22 ... 29