• Martes 13 de Mayo de 2025, 20:33

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 ... 16 17 [18] 19 20 ... 29
426
La taberna del BIT / Re: Enceusta: Cuanto tiempo te conectas a diario en SoloCodigo?
« en: Miércoles 8 de Octubre de 2008, 13:55 »
Cita de: "su -"
Cita de: "m0skit0"
Yo me conecto en el trabajo, ya que mientras compilo y espero a que el código de algunas aplicaciones rematadamente mal programadas llegue a los puntos de intrerrupción (20-30 mins  :blink:  :wacko: ), pues navego  :P
You're slacking off!
Muy bueno,  :bravo:  :jumpie:

427
VB .NET / Re: Imprimir en un punto especifico en VB2005
« en: Miércoles 8 de Octubre de 2008, 13:29 »
De entrada debes saber que son unas coordenadas, como asumo que si  :D  pasamos a lo siguiente.

Relativizar coordenadas...

Pongamos de ejemplo que tenemos un campo de futbol de 100m x 50m, luego si defino un punto dentro del campo utilizo unas coordenadas que suelen llamarse absolutas X=20 y= 30 define una posición dentro del campo. Bien si deseamos tomar un área necesitamos 4 puntos uno para cada esquina, sin embargo dado que queremos un área completamente cuadrada, para evitar errores (esto que no nos salga un área en forma de rombo o romboide, trapecio, etc..)   lo que haremos será solo definir 1 punto, (2 diagonalmente opuestos ya no darían un trapecio pero todavía darían para un rombo)  y un alto y un ancho, con ello también queda definida un área pero ahora ya sin duda alguna será un área de angulos a 90º. bien entonces ahora que hemos decidido crear un área específica dentro del campo para hacer lo que sea, que es tu caso, entonces puesto que allí vamos a enviar muchas cosas con cordenadas, lo que vamos a hacer es relativizar las coordenadas de ese área, asi en nuestro proyecto que es una clase pongamos FORM de nombre Campo_futbol vamos a crear otra clase llamada AREA
y cuando creemos una instancia de la clase área le pasaremos obligatoriamente un estructura tipo 'area'  para el campo, el área y unos márgenes (si los hubiere sobre el área).

Código: Visual Basic
  1.  
  2. public structure infoArea
  3.     x as long
  4.     y as long
  5.     ancho as long
  6.     alto as long
  7. end structure
  8. public Structure infoMedidas
  9.        ancho as long
  10.        alto as long
  11. end Structure
  12. public Structure infoPosicion
  13.      X as long
  14.      Y as long
  15. end Structure
  16.  
  17.  
  18. private p_Area as infoarea
  19. private p_Campo as infoArea
  20. private p_Margenes as infoMedidas
  21. private p_PosicionActual as infoPosicion  ' desplazamiento actual libre
  22.  
  23. public cheques() as infoArea
  24. public sub New(elArea as infoArea, elCampo as infoArea, margenes as infoMedidas)
  25.     p_Area=elArea
  26.     p_Campo= elCampo
  27.     p_Margenes=margenes
  28.     call Posicionar_Inicio
  29. end sub
  30.  
  31. private sub Posicionar_Inicio()
  32.     p_PosicionActual.X=p_Area.x  + p_Maregenes.Ancho
  33.     p_PosicionActual .Y= p_Area.y + p_Margenes.alto
  34. end sub
  35.  
  36. private sub Actualizar_PosicionVertical(medidas as infoMedidas)
  37.    p_PosicionActual .Y= p_PosicionActual .Y + medidas.alto + p_Margenes.alto
  38. end sub
  39.  
  40.  
Fíjate que necesitamos tanto las medidas del campo de fútbol (el tamaño del papel) como el de la localización y tamaño del área (la posición de los cheques) y unos márgenes si se van a utilizar. No lo he puesto pero habría que comprobar que el área es realmente más pequeño que el campo y que los márgenes también son acordes a las medidas del área.... y comprobar que la sitaución del área queda dentro del campo... eso lo dejo para ti, pero debe hacerse en el sub NEW

Ahora todo lo que tenemos que hacer es relativizar coordenadas cuando se nos pasen parámetros, para ello usaremos métodos tal como posicionar_Cheque, que para el caso sería un 'cheque'. Relativizar es usar coordenadas relativas, para ello fíjate bien en que si el área de colocación lleva márgenes o no, yo pondré un ejemplo para situar 1 cheque sobre la posición actual, con un margen de separación vertical .

Se supone que hay una matriz de cheques, y se supone que existen propiedades para modificar los cheques. Por tanto situarcheque ya sería una lllamada para asignarle una posición.
Código: Visual Basic
  1.  
  2. ' suponemos que todos los cheques son del mismo tamaño
  3. public sub Situar_Cheque(IndexCheque as integer)
  4.         dim tam as infoMedidas
  5.  
  6.       if indexCheque < 0 or indexcheque> cheque.length then
  7.              throw new exception "No existe el índice de cheque " & indexcheque & vbcrlf & "Imposible continuar..."
  8.              exit sub
  9.       end if        
  10.  
  11.        tam.ancho=cheque(indexCheque).ancho
  12.        tam.alto=cheque(indexCheque).alto
  13.  
  14.         ' 1º una comprobación para  verificar si realmente cabe en el área
  15.        if Verificar_Tamaño(tam)=true then
  16.             if Verificar_TieneSitio(tam)=true then
  17.                    Cheque(indexcheque).x= p_PosicionActual.x
  18.                   Cheque(indexcheque).y= p_PosicionActual.y
  19.                   call Actualizar_Posicion(tam)
  20.            else
  21.                  msgbox "no se ha ubicado el cheque actual con referencia " & algun_dato_que_lo_referencie  & " No cabe en la página actual"
  22.            end if
  23.        else
  24.             msgbox "No se pudo situar el cheque su tamaño es mayor que el área destinada al efecto..."
  25.           ' u otra acción que interese según el caso, por ejemplo enviar la página a la impresora, y luego pedir que se introduzca una nueva hoja...
  26.        end if  
  27. end sub
  28.  
  29. private function Verificar_Tamaño(tam as infoMedidas) as boolean
  30.      return  (tam.ancho <= p_Area.ancho) and  tam.Alto <= p_Area.alto)
  31. end function
  32.  
  33. private function Verificar_TieneSitio(tam as infomedidas) as boolean
  34.      return (( p_PosicionActual.x + tam.Ancho) <= p_Area.ancho) and (( p_PosicionActual.Y + tam.alto) <= p_Area.alto)
  35.      ' nota no se ha considerado margen derecho ni margen inferior....
  36. end function
  37.  
  38.  
  39.  
  40.  

Nota importante: fíjate que lo que se debe ajusta bien es la llamada a la función Actualizar_Posición yo te he incluído una llamada Actualizar_posiciónVertical  y una llamada posicion_Inicio que situaría al inicio de la página, esta debería invocarse cada nueva página..

Actualizar al ancho dependerá por tanto si hay más cosas a lo ancho o sólo 1 si un cheque tiene diferente alto y ancho al llamar a actualizar posición al final de la inserción queda la posición para recibir los siguientes. fíjate que posicion_Inicial ya relativiza el posicionamiento del resto de 'objetos' restringido al área + el margen de ese área....
Si hay margen entre cheques verticalmente , al actualizar posicion vertical debes añadir siempre el margen alto. (que será la misma o distinta del tope). En el ejemplo damos por supuesto que todos los márgenes son del mismo tamaño y que se especificaron al crear la instancia.

En fin  es jugar con la actualización de posiciones según el caso... pero ya tienes por donde tomarlo...

428
Bueno ferhn, tu 'texto' admite varios comentarios....

Primero 2 incisos, el primero es que resulta visiblemente difícil de leer, acostúmbrate a usar el ( quitando las comillas simples)  '['code=vb']'  en vez de '['code=text']'... al colorear se ve mejor donde empizan y acaban las funciones, etc...

El 2º es que parece que has copiado el código de alguien y le has dado unos toques personales, al respecto te señalo que cuando hagas así o dejas todo en 'inglis' o lo cambias todo al español pero eso de tener un 'espanglis' a mi me produce cierta repulsión... encontrasem 'startFound' y 'TextoReves' me parece estar comunicando con un alien que oye cosas no las entiende pero confía en que el que lo reciba si. Esto es sólo una cuestión de estilo, no es algo grave pero da una indicación de el respeto hacia los demás si se adecúa el código, copiar y pegar sólo es señal de dejadez...

y ahora los comentarios...

Cita de: "ferhn"

Public Property Get CuentaLetras() As String
    CuentaLetras = dLetras
End Property
 
Public Property Let CuentaLetras(ByVal vNewTexto As String)
    cTexto = vNewTexto
    dLetras = Len(cTexto)
End Property
Esto carece de sentido la función len(texto) resuelve el caso,  no necesita por tanto travestirse de propiedad.

Cita de: "ferhn"

Public Property Get CuentaPalabra() As String
    CuentaPalabra = wordCount
End Property
 
Public Property Let CuentaPalabra(ByVal vNewValue As String)
Aquí varios comentarios, comentario 1 en la parte 'GET' puede verse también en el anterior. Si cuentapalabra suponemos que es una cifra a qué leches viene poner un 'string' ????. Yo te lo digo... a que haces algo impropio, algo impropio es asignar un valor a allgo que realmente no le pertenece, es como vestir a un mono de santo o como poner un remolque a un Formula-1. Al parecer no sabes cuando algo debe ser una propiedad y cuando una función. Yo te lo explico: si cuando introduces un dato es un tipo de datos y cuando debe devolver un dato devuelve un tipo de datos distinto al que se pedía como parámetro, eso es lo que describe una función. si el tipo de datos pasado por parámetro se ha de retener y en otra ocasión se puede pedir y es el mismo tipo de datos, eso es para usar como propiedad... si el parámetro se pasa e inmediatamente hace algo y ese dato no ha de quedar retenido eso es un método...

Por tanto comentario 2: (en la parte LET)  CuentaPalabraS (con S al final porque es plural cuanta muchas no una) debe ser una función... Te voy a decir que puede ocurrir si lo dejas como propiedad... si le pasamos como parámetro un texto de 30 mb. una vez que haya terminado de precesarlo como propiedad que es, guardaría el parámetro hasta que se inroduzca otro, o lo que es lo mismo, estarías reteniendo en memoria inútilmente datos que no se necesitan ya... tampoco hace falta que sea  30 Mb. para que esto sea una estupidez, pongo 30Mb. para que se vea claramente que lo es.

comentario: 3 Una propiedad debe retener 'memorizado' uno de sus parámetros, si se le pasa x parámetros y lo que retiene no es ninguno de ellos realmente no es una propiedad, es nuevamente una función si yo tengo la propiedad: Color_de_Pelo lo lógico es que el parámetros sea un color y adicionalmente otro u otros parámetros si fueran necesarios, pero la propiedad alamcenará el color tal como indica su nombre y al rescatar la propiedad será dicho valor el que he de devolver, si la propiedad es color_de_Pelo y le paso como parámetros 5 dedos, 2 pies y 3 camisas pero nunca el color del pelo, habrá alguien que sepa utilizar esa 'propiedad' ...?  realmente habría que llamarle monstruosidad...

comentario 4 el uso que se hace de esa función (CuentaPalabras) es dudoso y te explico porqué, recurre a la función 'isAlphaNumeric', para determinar ciertos casos, esto es algo relativo, es decir si exponemos un criterio para definir palabras distinto que estar separado blanco lo podremos utilizar perfectamente pero ya no podremos darle el carácter 'universal' de contar palabras, sino dado que es un caso relativo , relativizarlo así el nombre debería ser cambiado a por ejemplo 'ContarMisPalabras' lo cual ya hace referencia a un modo exclusivo y particular de realizar la cuenta. Y esto sin siquiera entrar a evaluar lo que sea que haga dicha función 'isAlphaNumeric'. Realmente una función de contar palabras podría ser tan simple como:

Código: Visual Basic
  1.  
  2. public function Contar_Palabras(texto as string) as long
  3.     dim s() as string, n as long
  4.  
  5.     if len(texto)=0 then
  6.            Contar_Palabras=0
  7.    else
  8.          if instr(texto," ")<>0 then
  9.              s=split(texto)
  10.             ' este bucle es necesario porque split corta por 1 espacio, es decir después de encontrar un espacio el siguiente carácter lo interpreta como una cadena
  11.              for k=0 to  ubound(s )          
  12.                   if s(k)<>"" then n=n +1
  13.              next
  14.              Contar_Palabras=  n
  15.         else
  16.              Contar_Palabras=1
  17.         end if
  18.     end if
  19. end function
  20.  
  21.  

Desde luego esto de contar palabras sigue siendo relativo, me explico esto es aplicable desde el punto de vista de la programación, pero para otros propósitos la lista debe volver a filtrarse, por ejemplo un retorno de carro (enter) puede aparecer unido al final de la apalabra anterior y la primera palabra de la siguiente línea sio no se dejó espacio al final de la misma. También, interpretamos una coma o un punto como una palabra ?, y los signos =,<,(, etc... y si una palabra está unida a operadores? por ejemplo: 'Velocidad=e/t' daría un valor diferente de 'Velocidad =e/t' y diferente de 'Velocidad = e / t', por eso para casos reales, contar plabaras es siempre una rutina complaja y que debe llevar aparejado un método a usar como parámetros donde en dicho/s parámetro/s se especifican las condiciones de lo que es una plabara y lo que no. En dicho caso el código presentado anteriormente presenta la 1ª fase, una vez determinado que el texto tiene más de una palabras, la matriz obtenida debe filtrarse sucesivamente por otra/s rutina/s específicas, lo ideal es que no haya que pasar la matriz para cada caso si no que una misma función analice varios casos relativos a un mismo tema en el mismo bucle... pero en general la rutina que presentas no debe inferirse como lo que su nombre indica, por las razones explicadas.


comentario 5 La función isAlphaNumeric (cada uno debe acomodarlo a como le valga) puede simplicarse mucho más, tanto como reducirlo todo a sólo 2 casos, pués sólo existen 2 casos, TRUE-FALSE, usando el mismo código te lo resumo:
Código: Visual Basic
  1.  
  2. Private Function isAlphaNumeric(anyChar) As Integer
  3.     Select Case Asc(anyChar)
  4.         Case 48 - 57,  65 - 90, 97-122, 193, 225, 201, 233, 205, 237, 211, 243, 218, 250, 220, 252 , 209, 241  
  5.             isAlphaNumeric = True
  6.        case else
  7.             isAlphaNumeric=false
  8.    end select
  9.  end function  
  10.  
  11.  

te ahorras montón de líneas inútiles y queda más claro, al hacer varios case, a primera vista parece que en cada uno hará una cosa distinta, y eso confunde.

comentario 6 estas funciones:
Cita de: "ferhn"
Public Property Get TodoMayus() As String ...   End Property
Public Property Get TodoMinus() As String ... End Property
Son inútiles por redundantes, como ya se dijo antes una función que resuleve un caso no debe trasvestirse, para hacer lo mismo pero ralentizándolo...


comentario 7 Esto creo que debo llevarlo a un laboratorio a analizar.... yo aún no he sido capaz de encontrarle sentido.
Citar
Public Property Get Normal() As String
    Normal = DNormal
End Property
 
Public Property Let Normal(ByVal vNewValue As String)
    DNormal = vNewValue
End Property

comentario 8
Cita de: "ferhn"

Public Property Get PalabraExtraida(Text1 As TextBox, Numero As Integer)
Te complicas en exceso, para eso existe la función INSTR . Con instr vas comprobando donde empiza y terminan las palabras... ya que leer carácter a carácter es bastante lento, conviene delegar en una función más potente o recurrir a la API, para textos de pocas palabras puede valerte pero si por ejemplo tratas de buscar una texto en un dado número de ficheros la búsqueda sería muy lenta.

comentario 9 como ya dije anteriormente trasvestir una función es perder tiempo y tratar de convertirlo en una propiedad una aberración.
Cita de: "ferhn"

Public Property Get TextReverso() As Variant
TextoReves = StrReverse(cTexto)
    TextReverso = TextoReves
End Property

en cuanto a las fechas,  :wub:  sin comentarios...

Así que por favor en cuanto puedas corrige todo el texto o retíralo,  :hitcomp:  ya que no es precisamente un ejemplo sino de mala programación. La frase:
Cita de: "ferhn"
   Aca les dejo algo interesante para hacer casi de todo con texto
francamente resulta desacertada aparte de queen cuanto a completitud no representa nada.
 
Espero que no te lo tomes a mal sino como una orientación de que no se debe hacer   :beer:

429
Visual Basic para principiantes / Re: Funcion para Saber si Un Arreglo Esta Vacio
« en: Miércoles 8 de Octubre de 2008, 08:26 »
Cita de: "Astronald"
No se....., no encontre en internet entonces hice esta funcion
 las variables Variat  para crear arreglos en esta utilizo una pero solo por referencia para permitir todo tipo de matrices

Es como decir que no te gustan las ruedas pero que las utilizas sólo para girar... Para qué otra cosa puede utilizarse algo sino para aquello para lo que fue diseñado ????, la función de un Variant es precisamente esa, la de poder utilizarse con limitaciones que tiene otros tipos de datos, para poder hacerlo así ella misma tiene que ser un tipo de datos. Usar una vaiant con otros propósitos es como usar una rueda cuadrada para hacer una bicicleta. Cada cosa tiene sus propios datos más aptos para lo que se pretende usar, por ejemplo para definir colores usamos un long o una matriz de bytes que es equivalente a un long, nadie va a usar una cadena de strings, tipológicamente un carácter puede alojar un byte pero el tratamiento de cadenas sólo encuentra su sentido en el lenguaje humano, no en las matemáticas, las definiciones de colores y sus operaciones y aplicaciones son puramente matemáticas, las aplicaciones y operaciones de strings son relativamente lentas comparadas con operaciones maemáticas, por tanto usar un tipode datos fuera del espacio para lo que tiene su diseño, no es que sea un error es que simplemente habla del escaso conocimiento que un usuario pueda tener sobre un tipo de datos.

Un ejemplo de la vida misma...
Quien mejor que un médico para atender en un hospital, que es el 'tipo de datos' requerido para el caso, y que mejor que el tipo de datos 'cocinero' para la clase restaurante y ni un médico ni un cocinero usaríamos como guardaespaldas de un mafioso porque cada uno tiene su área de aplicación. Eso no quita que haya un 'tipo de datos' que siendo médico no es muy buen médico y que siendo cocinero no es muy buen cocinero y que siendo guardaespaldas tampoco sea un buen guardaespaldas, ahora bien cuando usaríamos a este tipo?... queda claro que no en cualquier situación pero si que es patente su utilidad preferible a cada uno de los otros en determinadas situaciones, por ejemplo en una zona de guerra, cada destacamento de pocos hombres no pueda contar con umn médico o un cocinero, posiblemente todos sean expertos guerrilleros entonces el tipo de datos que tanto es coninero  como médico como guerrillero aunque no rinda en ninguna de las áreas como el tipo de datos dedicado tiene más utilidad que  carecer de ello.
 
Lo mismo sucede en programación, los tipos de datos tienen su especialización y el variant fue concebido para usarse en las zonas límites entre tipos de datos como por ejemplo muchas llamadas a las API quien lo usa para sustituir a un tipo de datos genérico simplemente no es consciente de que es un Variant, ni conoce la utilidad de los tipos de datos.

La conversación trataba sobre como ha resuelto cada uno ese tema en cuestión, los métodos que yo expuse son los métodos que yo usaba al principio, cuando al caso, era muy frecuente el uso para dicha función, si sólo se iba a usar pocas veces (tal vez 2 o 3) en un programa uno lo suele resolver con el 'on error...' como ya lo expuso nuestro amigo amigo cpMario casi al inicio del post. Para un uso intensivo de dicha función yo utilizo realmente un API que hay para esta cuestión.

Un Variant tiene su sitio en la programación, quizás el errror de MS fuera no explicarse bien. Ellos lo definieron como un tipo de datos 'especial' pero que puede usarse como un tipo de datos 'normal', y con ello lo que querían decir  era que no había que hacer cosas 'raras' para usarlo sino usarlo del mismo modo que el resto de tipos (pero no para hacer lo mismo que el resto de tipos para eso se definió como especial). Cuando declaramos un objeto y o asignamos un dato al mismo el procedimiento es distinto de los tipos de datos genéricos es sólo esto lo que se quería entender como 'normal', su declaración y asignaciones, es decir su tratamiento pero no su utilidad. Los que no habíais nacido o erais muy pequeños e ignorabais siquiera lo que era la programación cuando apareció Visual Basic es normal que no conozcais detalles que se van perdiendo y olvidando con el tiempo y especialmente cuando desde la enseñanza siempre le han dedicado un 'mal de ojo' al Basic en general.

430
VB .NET / Re: Subprogramas en mas de un formulario
« en: Domingo 5 de Octubre de 2008, 23:04 »
La idea no es que te sientas ofendido. La idea subyacente es que a cosas tan simples no suele darse ninguna contestación porque es algo que siendo poco más que un novato uno sabe o al menos sabe como encontrarlo en la ayuda del programa.

Luego parte tu podrás ser todo lo técnico que digas en el área que indiques pero tu pregunta es una preguntas de novato novato y no es con ánimo de ofender, es simplemente la verdad.

Por otro lado llama la atención que respondas sólo a la parte que te ha 'dolido', pués después de todo lo primero que hice fue responder tu cuestión y siquieres profundizar no tengo inconveniente.

El foro es para hacer preguntas, es cierto pero verás que hay muchas preguntas sin responder y la razón son casi siempre 2 o preguntan para que les hagan tareas o preguntan cosas que están al alcance de cualquiera el poder encontrarlo por si mismo.

431
VB .NET / Re: Subprogramas en mas de un formulario
« en: Domingo 5 de Octubre de 2008, 01:28 »
Si tienes más de un formulario, aquel código que deba compartirse entre varios formularios es adecuado que vaya aparte en un módulo. En un formulario es lo más adecuado que sólo vaya el código referente a él mismo. si la aplicación sólo va a tener un formulario puede ir todo el código en el mismo, aunque suele ser más ordenado que en los formularios vaya estrictamente el control de la interfaz y el resto de código en módulos apartes.

Nota que cuando uses un módulo o formulario puedes subdividir en apartados todas  las funciones usando 'Partial class...'

Los procedimientos y funciones colocados en un módulo que hayan de ser llamados desde fuera de él, no deben declararse 'Private' , o no serán accesibles desde fuera del propio módulo.

Si tu nivel te lleva a preguntar estas cosas, sería mejor que te hiceras con un manual y leyeras algo porque de otro modo tendrás 10000 preguntas más de este tipo. El foro no es para vagos, sino para responder dudas donde uno se queda atascado sin saber por donde tirar, pero no por pereza o vaguedad...

432
VB .NET / Re: pasar codigo de v6.0 a v.net
« en: Sábado 4 de Octubre de 2008, 01:54 »
No he mirado el código, PORQUE si un  código funciona en VB 6 debes convertirlo desde Vs 2005 como primera medida y luego hacer los cambios manuales que se requieran...

Si el código funcionó perfectamente en vb 6.0 entonces cierra el proyecto en vb 6.0 abre vs 2005-08 elige abrir proyecto, busca ESE proyecto en vb 6.0 y dale OK te dirá que si deseas importar el código desde la versión anterior  le dices que si y que muestra un resumen de lo realizado. Si el código es 100% sustituíble deberá funcionar, si no es 100% sustituíble verás que te habrá señalado en el código unas razones y un enlace que explican más profundamente la razón, has los cambios que se deducen de las razones explicadas y listo.

Adicionalmente y opcionalmente deberías cambiar  de modo manual alguna cosa que siendo coherente en la conversión de código no es pertienente ya dado unos cambios operados.

Si después de eso no funciona entonces envía aqué cófigo y ya se mirará en profundidad.

433
VB .NET / Re: cadena de caracteres
« en: Sábado 4 de Octubre de 2008, 01:42 »
Cita de: "Jesmi89"
Entonces quisiera saber, si me podrian ayudar con esto, es decir, como se haria para que sin importar el tamaño de la palabra que se ingrese la desfragmente.

Código: Text
  1. Public Class Form1
  2.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  3.         Dim a As String
  4.         a = TextBox1.Text
  5.  
  6.         For a = Len(TextBox1.Text) To 1 Step -1
  7.             TextBox2.Text = Strings.Left(TextBox1.Text, 2)
  8.             TextBox3.Text = Strings.Left(TextBox1.Text, 3)
  9.             TextBox4.Text = Strings.Left(TextBox1.Text, 4)
  10.         Next
  11.     End Sub
  12. End Class
  13.  

Gracias  :ayuda:
Veamos, en primer lugar la variable 'a' la declaras como string, y luego le asignas el contendio de un textbox.... luego ya no lo vuelves a usar como string...
2º  Declaras 'a' como string pero luego lo usas como integer para el contador del bucle, esto es una contradición.
3º un bucle se usa para no repetir código, por tanto si haces manualmente algo, el bucle carece de sentido.

El código debería quedar algo así como:
Código: Visual Basic
  1.  
  2.        Dim a As String = TextBox1.Text
  3.        dim k as integer=0
  4.  
  5.         For k = Len(a) To 1 Step -1
  6.             TextBox2.Text = Strings.Left(a, k)  ' cadena de la que se toma, cantidad que se toma
  7.         Next
  8.  
  9.  

434
Visual Basic 6.0 e inferiores / Re: Interaccion VB con dll de C++
« en: Sábado 4 de Octubre de 2008, 01:07 »
Cita de: "rorrofeo"
A ver si alguien me puede ayudar con esto, que ya me tiene tiritón.

Estoy haciendo una dll en C++ que requiere que se le pasen dos argumentos: un número entero y una tabla de letras (las letras las trabajo como matriz de BYTE en VB y como matriz de CHAR en C++). Los parámetros los puedo enviar sin complicaciones hacia la dll: un entero y una referencia a la primera celda de la tabla.

Mi problema es que mi dll debe devolver un entero, un número con dos decimales y otra matriz similar a la recibida, pero con otras dimensiones (variables).
¿Cómo puedo recibir en VB los tres valores de retorno?
Me han dicho que devuelva un STRUCT de C++ que coincida con un TYPE de VB, pero mi problema es que no puedo saber las dimensiones de la matriz de retorno, entonces no sabría qué tipo de datos darle a las variables del STRUCT.

Tal vez podría, igual que en la llamada a la dll devolver la dirección del primer elemento de la matriz, pero ¿puede VB identificar direcciones de memoria como C?

Muchas gracias.

Para recibir los datos desde VB cuando declares las funciones debes declarar los parámetros con ByRef para poder recibirlos, de otro modo sólo los envía y no espera recibir nada salvo a la parte derecha de la función (si es una sub ni eso).
el entero devuélvelo con la llamada de la función el datos con 2 decimales trátalo como single en vb y la matriz si es unidimensional (no importa los elementos que tenga) como matriz de bytes, tal como señalas...

Cita de: "rorrofeo"
Tal vez podría, igual que en la llamada a la dll devolver la dirección del primer elemento de la matriz, pero ¿puede VB identificar direcciones de memoria como C?.
Eso es precisamente lo que hace ByRef pasar una dirección al comienzo de los valores y no el valor directamente.

435
Novedades en SoloCodigo / Re: Requisitos legales
« en: Sábado 4 de Octubre de 2008, 00:56 »
Bueno, siento no haber leído este post, y por ello habete molestado. Quizás hubiera sido bueno mandar un mensaje personal a todos los suarios sobre 'importante leer este post' y no nos habría pasado desapercibido.

Bueno tengo 2 preguntas... sobre el tema
1 La ley obliga a mantener cierta transparencia del uso de las bases de datos que contengan datos sobre usuarios (supuestamente para proteger a los usuarios). Mi pregunta es: La ley se queda o puede de alguna manera quedarse con una copia de mis datos (o los de cualquiera) ????

2 Tu eres el administrador y eres español, pero si tu base de datos (y/ó el hospedaje del foro) estuviera, pongamos en Ecuador o Dinamarca a quien deberías rendir cuentas ante la ley a España, ó a Ecuador, Dinamarca, dicho de otro modo si tu base de datos no está alojada en España tienen algún derecho a ejercer una ley que posiblemente queda fuera de potestad ?.

y ya como extra y si no supone molestia en que país/empresa se aloja la base de datos...?

Eso es todo. Si conoces las respuestas te agradecería su respuesta.

436
Visual Basic 6.0 e inferiores / Re: simplificar una fraccion y una raiz en vb
« en: Domingo 28 de Septiembre de 2008, 21:15 »
Cita de: "zero_kool"
 
 lo que necesito es ... que simplifica una raiz  y simplifica una fraccion

Dicho de otro modo: no has entendido nada.

437
Visual Basic 6.0 e inferiores / Re: Como se imprime un PictureBox111?
« en: Viernes 26 de Septiembre de 2008, 22:26 »
Cita de: "Nilson Yair"
Bueno, como guardar una sola imagen consume mucho recurso si se tiene encuenta que esta imagen es grande, entonces producirá error.
[Nebire, pero lo importante es llegar a la solución, cierto??? :P

:good:

Bueno, de cuanta memoria estamos hablando ????.. Piensa que si alguien trabaja con un computador con poca memoria es bastante probable que por las mismas razones también trabaje sobre una baja resolución de pantalla (pongamos 800x600) con lo que el consumo de memoria tampoco es excesivo. En cualquier caso sea la memoria que se tenga siempre ha de poderse trabajar con una imagen de tamaño igual a la pantalla.

Lo que quiero decir es que no es conveniente hacer un programa pensando en las limitaciones de tu computador ni en las limitaciones actuales, ya que con ello 'castigas' al resto yen un futuro posiblemente no muy lejano deje de interesar por las limitaciones que le has impuesto. Una solución adecuada sería ofrecer la posibilidad de que pueda adptarse para usar tanto con pocos recursos como con recursos 'sobrados', por ejemplo consultando la memoria de que dispone el equipo puedes decidir si la limitación tiene o no sentido. si tienes más de 128Mb. de RAM, no merece la pena hacer ese tipo de restricciones. Normalmente si alguien tiene esa memoria o menos suele funcionar con un windows anterior al XP que consumen menos recursos (el S.O.)

Cita de: "Nilson Yair"
Nebire, pero lo importante es llegar a la solución, cierto???  
Es bueno ser capaz de alcanzar el objetivo que uno tenía propuesto aunque no sea de la forma más óptima. Eso es señal de que uno investiga, piensa y busca soluciones hay quien es una nulidad completa para pensar. A veces se ven mensajes preguntando por cosas tan simples y evidentes que no merece la pensa ni perder el tiempo en responder porque el individuo es un vago que no se ha tomado la molestia mínima y espera que se lo solucionen los demás.

Cita de: "Nilson Yair"
Moskito, me gustaria ver tu solución...
No es asunto que me incumba, pero no creo que sea pertienente pedir a nadie una solución de algo, especialmente si ni siquiera ha manifestrado nada al respecto. La gente participa libremente y cuando decide no entrar en un tema sus razones tendrá, a menudo suele ser porque ya se dió respuesta al tema, pero en fin cada uno dedica su iempo como le parece.

438
Visual Basic 6.0 e inferiores / Re: Como se imprime un PictureBox111?
« en: Viernes 26 de Septiembre de 2008, 01:18 »
Los tiros van por ahí, usando funciones de la API para capturar el área deseada.

No obstante haces cosas no necesarias que ralentizan y complican el proceso, por ejemplo para que guardar imágenes a disco ?... es mejor guardarlas en un 'DC de memoria'... paraqué guardar 3 imágenes ?... si están todas en un formulario basta con capturar sólo una.

Te comento otras cosas... por ejemplo cuando trabajas con API (o con cualquier función) no tienes que cambiar ningún parámetro que no se te haya pasado expresamente en la línea de parámetros de la función. La razón es que a nadie le gusta 8ni siquiera a uno mismo) que se le altere una propiedad que no consta en la lista de parámetros. Por tanto que se pase un handle no es excusa para cambiar valores, el handle debe usarse exclusivamente para hallar valores. Esto es aunque tu hayas tomado temporalmente el scalemode de origen lo cambias y al final lo restaures, no es lo adecuado, sólo debería hacerse como último recurso.  El modo de proceder correctamente sería crear tu 'rect' esto es una estructura Point y una Size y convertir los valores de procedencia a la escala deseada, tal como te ilustro en este ejemplo:

Código: Visual Basic
  1.  
  2.    public type RECT  ' los ponemos como long, porque usaremos píxeles, si usáramos twips los pondríamos como single, para no perder tamaño en sucesivos cambios
  3.       X as long
  4.        Y as long
  5.       Ancho as long
  6.       alto as long
  7.   end type
  8. ' sea una función cualqiera que recibe una ventana como parámetro, por ejemplo.
  9. public function maneja_lo_que_Sea(f as form) as long
  10.      dim r as rect
  11.  
  12.         r.ancho= f.sclaex(f.width, f.scalemode,vbpixels)
  13.         r.alto= f.sclaey(f.height, f.scalemode,vbpixels)
  14.    ' lo que sea que hicera la función...
  15.   end function
  16.  
  17.  

Como puedes ver se obtienen valores sin modificar los originales ni cambiar (esto es lo realmente importante) otras propiedades no implicadas directamente, como es scalemode. Tu por ejemplo cambiaste 'PictureKE.scalemode'  .Esto siempre tienes que intentar no hacerlo, si no encuentras otra manera, pués no queda más remedio que apañarlo como sea. Esto tiene su importancia porque con el paso del tiempo luego algo se cambia y nadie sabe porqué, especialmente cuando se trabaja asíncronamente y aunque sea por un pequeño lapso de tiempo se entenderá como un bug, que de repende no se recuerda ni se sabe a qué es debido, es como un fantasma que aparece de cuando en cuando... con una buena práctica esto debe evitarse.

Luego capturas sólo el área de cliente, y yo creí que habías dicho el formulario completo, este consta del área de cliente y el marco, si realmente no te explicaste bien, pues vale pero si realmente quieres capturar también ese trozo no lo llevas a cabo. Según para que lo quieras puede o no ser importante, por ejemplo si es una ventana de exploración de internet no capturas la dirección que figura.

Donde me pierdo y no se realmente qué quieres es en lo de los 3 picturebox, creí entender que querías capturar un formulario que tiene 3 picturebox (o los que sean) hasta ahí queda claro, pero luego les 'metes' una imagen a cada uno, no entiendo para qué...?????

Por último sólo recordarte que en todo puedes simplificar funciones (salvo que te resulte más confuso seguirlo) anidándolas... por ejemplo:
Código: Visual Basic
  1.  
  2.    ' siendo la función ...
  3.    Function Obtener_Imagen(PictureKE As PictureBox) As StdPicture
  4.            ........
  5.     end function
  6.  
  7.      ' el código siguiente ....
  8.      SavePicture Obtener_Imagen(Me.Picture1), App.Path & "PlanoXY.bmp"
  9.       Picture1.Cls
  10.       Picture1.Picture = LoadPicture(App.Path & "PlanoXY.bmp")
  11.  
  12.  ' puede ponerse así
  13.       Picture1.Cls
  14.        Picture1.Picture = Obtener_Imagen(Me.Picture1)
  15.  
  16.  
Te ahorras guardar a disco y cargar de disco...
saludos.

439
Diseño de Algoritmos / Re: como puedo hacer este algoritmo?
« en: Jueves 25 de Septiembre de 2008, 21:32 »
Cita de: "mal4c"
humm se nota que  no leiste ahi esta el analisis, y si en verdad lo analisaste te dariascuenta que solo era dar una opinio, eso es lo que busco para estruturar mejor mi respuesta... mas bien señor gracias por tu opinion

Es evidente... 100 lectores sólo con ver el título del mensaje y empezar a leer el tocho, ya desiste por que ve que es una tarea, ya lo indicas en el título del mensaje y así se demuestra en las 3 primeras líneas, entonces no puedes culpar a nadie de que no lea las últimas líneas, de las que por otro lado no separas a modo de párrafo del resto del tocho... quién buceará para ver si hay otra cosa ?.

Al final para lo que vienes a exponer toda la parrafada superior sobraba y el enfoque del mensaje debería ser otro amén del título que nada ayuda.

440
VB .NET / Re: Acerca de Listbox
« en: Jueves 25 de Septiembre de 2008, 21:24 »
Un listbox se maneja por sus items, cada item 'tiene derecho' a un línea. Una línea puede tener los caracteres que se quiera, pero un ítem nunca se mostrará en 2 líneas, para mostrar 2 líneas habrás de partir una cadena por donde quieras y meter la 2ª parte con additem en la posición deseada.

Sin embargo pretender que un control diseñado para dedicar cada línea a un ítem tenga un comportamiento de otra manera es perder el rendimiento del mismo y complicarse las cosas.

Para lo que quieres está el textbox, puedes simular un listbox con el comportamiento deseado uando 2 textbox de una forma más sencilla. En el primero y de una sóla línea muestras la selección, al hacer click muestras el 2º justo debajo del primero de su mismo ancho y con barra de scroll vertical, dejas una línea en blanco entre cada 'tabla' y cuando se pulse en una línea seleccionas desde la posición siguiente a la linea en blanco existente más arriba hasta la posición anterior a la línea en blanco siguiente, al perder el foco el textbox, compruebas si el textbox tiene algo seleccionado, si lo tiene cambias el contenido del primer textbox por lo seleccionado y en ambos casos ocultas el 2º textbox.

441
Visual Basic 6.0 e inferiores / Re: Seleccionar imagen
« en: Jueves 25 de Septiembre de 2008, 14:40 »
Cita de: "CarMol"
Saludos.
    Tengo un proyecto donde se encuentra en un picturebox1 un grupo de 8 imagenes mezcladas al azar y repetidas n veces y en otro picturebox2 se puede elejir una imagen, el programa debe buscar la imagen del picturebox2 en el picturebox1 y decir cuantas coincidencias ocurren. Las imagenes pueden cambiar. Estoy utilizando visual basic 6. Por favor ayudame a tener una idea de como poder hacerlo.
  Gracias....
La idea de Mosquito, puede valerte perfectamente si las imágenes en efecto se han tomado de una dirección, basta pués con guardar una referencia a cada imagen en una lista y otra referencia numérica para manipularlo.

Si en cambio tienes  imágenes que resultan de operaciones y que sólo constan en memoria o también si aún siendo diferentes rutas las imágenes están repetidas y por tanto no es factible reconocerlas or la ruta puedes recurrir a un barrido de píxeles aleatorios o en secuencia. De entrada no compares imágenes si su tamaño es distinto, y si su tamaño es igual entonces tom ´pixeles en diagonal cuando un píxel no coincida finaliza la comparación y se da por finalizado. Esto podrá ser más o menos satisfactorio en función de si existe mucho parecido entre ellas o no, es decir si son bastantes distintas excepto las que son iguales, el sistema será rápido si por el contrario existe un gran parecido como por ejemplo en un puzzle entonces es mejor compararlas por hashing, si las imágenes son muy grandes el proceso puede ser lento.

442
Visual Basic 6.0 e inferiores / Re: simplificar una fraccion y una raiz en vb
« en: Jueves 25 de Septiembre de 2008, 14:31 »
Cita de: "zero_kool"
holas

como podria ser el codigo que me simplifique 2 expresiones en vb

necesito un framento de codigo que haga esto , lo mas sencillo posible , pues es para
implementarlo en una calculadora programable que usa un tipo de basic

Con Notación Polaca Inversa, estos problemas suelen solucionarse bien y en genral todos los de álgebra. Apenas si necesitas 2 o 3 pilas y quizás alguna matriz para mayor comodidad.
La NPI te permite cambiar una expresión tal que (A+B) * 2 en esta otra AB + 2 *  es importante el orden de prioridad de las operaciones, que puedes usar una tabla  o matriz para la misma.

El proceso suele ser simple, pero dependiendo de tu nivel te uedes complicar las barbas porque haces algo que casi se parece pero...
Hay que examinar carácter a carácter la expresión, si es un operando se extrae si es un signo de operación se coloca en la pila de operaciones. La operación en curso la que está en lo alto de la pila, se compara con la anterior usando la tabla de prioridades (la tabla de prioridades es una tabla de elementos tantos como operaciones aritméticas vayas a usar, por fila y los mismos por columnas, se les da un valor en base a su prioridad.

Si tú nivel de basic no es el adecuado quizás te interese más partirte el pecho con 200-2000 líneas de código. Si en cambio se te da bien las mates, quizás prefieras resolverlo usando el método de trasposición, la regla de los trapecios y/o el método de Gauss.

443
Visual Basic 6.0 e inferiores / Re: Como se imprime un PictureBox?
« en: Jueves 25 de Septiembre de 2008, 13:40 »
Cita de: "Nilson Yair"
Bueno, aun no he podido... aun no he podido imprimir los 3 picture en el mismo formulario.
Me gustaria saber si alguno sabe, bueno o por lo menos escriban lo que piensan , aun cuando no puedan... depronto eso que piensan me ayuda a encontrar una solución. :mellow:
Mira, te he hecho una librería para capturar la ventana, o una región de la misma, captura la ventana y devuelve una imagen ahora ya simplemente imprimies la imagen. el picturebox sobre el que lo destines debería estar oculto, para no mezclar su contenido con el de una nueva y posible captura.

En el fichero se incluye tanto la librería como las intrucciones y el código para probarlo, de todos modos el código lo repito aquí así si necesitas comentar algo irá mejor...
para descargar el archivo, .... al final del mensaje está el enlace
Código: Visual Basic
  1.  
  2.  
  3. ' Declaraciones de API...
  4. Private Declare Function Capturar_Ventana Lib "Captura.dll" (ByVal Ventana As Form, Rect As Coord2D, Optional ByVal AreaCliente As Boolean = False, Optional ByVal ROP As RasterOpConstants = vbSrcCopy) As Picture
  5. Private Declare Function Version_Test Lib "Captura.dll" (Optional ByVal testVisual As Boolean = False) As String
  6.  
  7. '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  8. '                  NEBIRE                 NEBIRE                       NEBIRE
  9. '()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  10. '))))))  Ventana= Nombre del formulario, típicamente será ME u otro.                 ((((((((
  11. '(((((   Rect = coordenadas y dimensiones de la región, por defecto es 0,            ))))))))
  12. '))))))              un valor negativo se trunca a 0.                                              ((((((((
  13. '(((((  AreaCliente= si es false (por defecto) captura toda la ventana,                 ))))))))
  14. '))))))              si es true= sólo el área cliente (sin el marco)                            (((((((
  15. '(((((   ROP = son las constantes de Raster, no confundir con las constantes de    )))))))
  16. '))))))              shape, que sirven para lo mismo pero tiene diferente valor.         (((((((
  17. '(((((  ---------------------------------------------------------------------------------------   )))))))
  18. '))))))   Devuelve una imagen, que debería entregarse a un picture oculto.           (((((((
  19. '((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()
  20.  
  21. ' Estructura tipo RECT
  22. Private Type Coord2D
  23.     X As Long
  24.     Y As Long
  25.     Ancho As Long
  26.     Alto As Long
  27. End Type
  28. Dim cDefecto As Coord2D  'para valores por defecto....
  29.  
  30. ' con parámetros por defecto, para ver ejemplos de otros parámetros en el siguiente código.
  31. Private Sub Command1_Click()
  32.     Picture3.Picture = LoadPicture()
  33.     Picture3.Picture = Capturar_Ventana(Me, cDefecto)
  34. End Sub
  35.   
  36. Private Sub Form_Load()
  37.     Command1.Caption = "Capturar form completo"
  38.     Command3.Caption = "Capturar cliente negativo"
  39.     Command4.Caption = "Capturar banda negativo"
  40.     Command2.Caption = "test dll"
  41.    
  42.     Picture3.BackColor = &H0&       ' negro
  43.     Picture3.BorderStyle = 0 ' sin borde
  44.     Picture3.AutoSize = True ' importante.
  45.     ' colocar imágenes y más cosas en los otros picturebox, etc...
  46.    
  47.     ' tomamos valores por defecto... valores negativos fuerzan ajustarse al tamaño del formulario.
  48.     With cDefecto
  49.         .X = -1
  50.         .Y = -1
  51.         .Ancho = -1
  52.         .Alto = -1
  53.     End With
  54. End Sub
  55.  
  56.  

Otros ejemplos de uso de la llamada . Pasando diferentes parámetros
Código: Visual Basic
  1.  
  2. ' con todos los parámetros, se usa una operación de fusión... por defecto es vbSrcCopy
  3. Private Sub Command3_Click()
  4.     Dim d2 As Coord2D
  5.    
  6.     d2.X = 0: d2.Y = 0
  7.     d2.Ancho = Me.Width: d2.Alto = Me.Height
  8.    
  9.     Picture3.Picture = Nothing
  10.     Picture3.Picture = Capturar_Ventana(Me, d2, True, vbNotSrcCopy)
  11. End Sub
  12.  
  13. ' se toma una región (banda) de arriba abajo del formulario de 2000 twips de ancho empezando en el 2000
  14. Private Sub Command4_Click()
  15.      Dim d2 As Coord2D
  16.          
  17.     d2.X = 2000: d2.Y = 0
  18.     d2.Ancho = 4000: d2.Alto = Me.Height
  19.    
  20.     Picture3.Picture = Nothing
  21.     Picture3.Picture = Capturar_Ventana(Me, d2, False, vbMergePaint)
  22. End Sub
  23.  
  24.  

Testear si la dll resulta 'visible' (vamos si encuentra la referencia)
Código: Visual Basic
  1.  
  2.  
  3. Private Sub Command2_Click()
  4.     Dim n As String
  5.    
  6.     'si la longitud de n es 0 no pasó el test.
  7.    n = Version_Test
  8.     If Len(n) > 0 Then MsgBox "pasó el text."
  9.     n = Replace(n,chr(0),"")
  10.     MsgBox "Test: " & n
  11. End Sub
  12.  
  13.  
  14.  
  15.  

444
Dudas informáticas / Re: Experiencia como programador (busco consejo)
« en: Miércoles 24 de Septiembre de 2008, 19:29 »
Cita de: "Nendrel"
Hola a todos.

Necesito consejo de la gente que es programadora (da igual el lenguaje). Os cuento un poco mi experiencia y luego me gustaría que me diérais algún consejillo.

En fin, lo que no quiero es que me pase como en la otra empresa y me acaben despidiendo.
Por todo esto os pido consejo para ver si hay algún programador que se sienta como yo, o alguno que le apasione programar y me diga si se ha encontrado a gente como yo.

Un saludo!

Si, hay gente como tú, la verdad es que demasiada. El problema no reside en como eres sino en si estás dispuesto a mejorar. No te importe mucho si te despiden de 2 o 3 empresas más, puede que te suceda, sin embargo lo que si debes hacer mientras es aprender todo lo que puedas. En tu mismo caso yo aconsejé a algunos compañeros un 'reciclaje' sobre todo empezando desde la base, ya que el problema deviene desde la base, mientras estudiaban debieron hacer el gamberro o bien no entender del todo ciertas partes el resultado es que pese a ello fueron prosperando en los estudios y conseguir su título, pero cojean de muchas partes.

Dependiendo de tu edad sería bueno que te decidieras por una carrera que realmente te guste, porque el éxito gusta a todo el mundo, pero el éxito llega si lo dominas y como no es tu caso sólo, el éxito que tendrás puede ser más bien escaso. Si ya tienes cierta edad quizás rehacer otra carrera pueda suponerte años perdidos que no estás dispuesto a consentir. En ese caso intnta migrar hacia otra vertiendte de la informática que te apasione más o por lo menos que domines o puedas dominar. Mencionas los videojuegos, aunque parezca raro es un ámbito más fácil de dominar, ya que una vez que lo dominas es siempre lo mismo pero con distintod datos.

Si no tienes probabilidades de cambiar ni la vertiente ni de empresa no te quedará otra que abrazar lo que tienes y para eso lo que te recomiendo es que te compres 2 libros de algoritmos uno facilito y otro más complicado lo leas y vayas tu mismo a la par realizando los ejercicios (lecciones,temas) que vaya mostrando el libroy no sólo al límite que marca el libro sino yendo más allá haz uso de tu imaginación para intentar una forma alternativa de acer lo mismo con mayor o menos éxito, esas prácticas te ayudarán más que recurrir a datos suelto para problemas exclusivamente aislados. Si dominas la teoría general podrás aplicarlo a cualquier parte, pero si no es así, siempre tendrás que recurrir a parches para casi cualquier código, y siempre irás al ralentí ya que por no saber como salir de una situación no sabrás como entrar en ella de la forma más aecuada... es como entrar en una ciduad desconocida intentando atravesarla y dando 40 vueltas hasta que lo consigas, otro programador verá que si conoocieras 'el mapa' hacer más 2 ó 3 'cosas raras' para atravesar la ciduad no es correcto.

En fin lo que trato de decirte es que aunque te hayas 'casado' con la programación y la 'tipa' te parezca fea debes 'enamorarte' de ella para que 'ambos' seais felices juntos, o bien 'divorciaros'.

445
Visual Basic para principiantes / Re: Encuentra el error
« en: Miércoles 24 de Septiembre de 2008, 09:14 »
El problema reside en que la 'X' es una variable, además es un integer, su valor es limitado, y lo que se espera es un elemento de referencia, en for each 'elemento', dicho elemento no es un valor sino una referencia, un puntero a la dirección de memoria,(el integer, tampoco tiene alcance para referenciar dicho puntero), esto es así, por que no sólo pueden ser alojados variables si no objetos, por ejemplo textbox, formularios, etc... y en el caso de las matrices si el grupo tiene elementos apunta al primer elemento. en el caso concreto usando paramarray podría perfectamente contener un integer, un textbox, una matriz de cadenas  un timer,etc... si intentas forzarlo verás que te saltará un error tal que 'No coinciden los tipos', por ejemplo al intentar forzarlo de esta manera:

Código: Visual Basic
  1.  
  2. Function Suma(ParamArray vector())
  3.     Dim X As Integer
  4.     Dim Y As Integer
  5.  
  6.     For Each v In vector   ' fíjate que v si es una variant y referencia perfectamente al elemento del grupo vector.
  7.        Y =  Y + cint(v)      ' aquí te marcará error diciendo que no coinciden los tipos.
  8.     Next v
  9.     Suma = Y
  10. End Function
  11.  
  12.  

puedes darte cuenta de su posición en memoria, para ver que por lo menos se necesita un long...

Código: Visual Basic
  1.  
  2. Function Suma(ParamArray vector())
  3.     Dim X As Integer
  4.     Dim Y As Integer
  5.  
  6.     For Each v In vector  
  7.        msgbox varptr(v)    & "    Esta es la posición de memoria donde se encuentra el elemento 'vº' del vector... "
  8.        stop   ' cuando pare aquí, lee esto y pulsa 'F5' para probar lo que comento en la siguiente línea
  9.        Y =  Y + varptr(v)      ' ahora te dará un desbordamiento, ya que un valor menor puede forzarse en una variable mayor, pero no al revés en vb6 sin convertir datos
  10.     Next v
  11.     Suma = Y
  12. End Function
  13.  
  14.  
  15.  

y para que lo veas más claro, copia y ejecuta este código paso a paso 'F8'
Código: Visual Basic
  1.  
  2. Private Sub Form_Load()
  3.     Dim v()
  4.     Dim t As Timer
  5.     Dim p As PictureBox
  6.     Dim f() As Form
  7.    
  8.     ReDim f(0 To 1)
  9.     ReDim v(0 To 9)
  10.    
  11.     stop  ' nota como se va a tragar todo esto, un dato inmediato, un doble, un picturebox, un string, un timer, varios forms.... pulsa F8 para continuar.
  12.     v(0) = 3
  13.     v(1) = CDbl(3)
  14.     Set v(2) = p
  15.     v(3) = "Hola"
  16.     v(4) = 3
  17.     Set v(5) = t
  18.     Set f(0) = Form1:  Set f(1) = New Form1
  19.     Set v(6) = f(1)
  20.     set v(7)=f(0)
  21.     stop  ' nota que la siguiente línea dará error, deberás anteponerle SET (como ves en los casos anteriores) ya que su valor no es un tipo de datos genérico sino un objeto.
  22.     v(8)=v(6)
  23.     let v(9)=43
  24.     Call Suma(v)
  25. End Sub
  26.  
  27.  
  28.  
  29. Function Suma(ParamArray vector())
  30.     Dim Y As Double
  31.     Dim t As Variant
  32.        
  33.     For Each v In vector
  34.         MsgBox VarType(v)
  35.         stop ' te ha dado el valor 8204  que son 8192= vbArray + 12 = vbVariant (array de variant), pulsa f8 para continuar...
  36.         t = v
  37.        MsgBox "La dirección de memoria de 't' es: " & VarPtr(t) & " y la de 'v' es: " & VarPtr(v)
  38.        MsgBox UBound(vector())
  39.     Next v
  40.     Suma = Y
  41. End Function
  42.  
  43.  

446
La taberna del BIT / Re: Evo
« en: Martes 23 de Septiembre de 2008, 05:41 »
Cita de: "Edo"
Viejo tú no conoces mi país ni como estamos acá por culpa de esa chunchurría de presidente, lo de las FARC es muy cierto, pero cuando la gente tomé razón de porqué realmente lo está haciendo y eso lo van a ver cuando se termine su mandato, van a decir que los de la izquierda teniamos razón de esa porquería.

PD. En Colombia no secuestran a gente del pueblo, las FARC sabe a quien le tiene que hacer qué y por qué se lo tiene que hacer.

Te equivocas, tengo doble nacionalidad la 2ª es colombiana conozco perfectamente la situación de Colombia. Entiendo que si eres de otro signo político distinto critiques a los que estñan en el gobierno, eso es lo normal en todas partes, los que están en la oposición critican a los que están en el gobierno y viceversa. Sobre el mandato de Uribe ya se decidirá en las elecciones.

Conozco gente a través de familiares en que no dicen eso de que 'no secuestran a gente del pueblo', según ellos efectivamente hace 25 años eso no ocurría, ahora es otra cosa, de entrada les roban sin derecho a quejarse siquiera contínuamente el fruto de su trabajo, no les basta que les den de comer, aemás se llevan las gallinas y lo que se les antoje y no te quejes.

Mira las FARC nacieron con una ideología que hoy está de más, ya no sucede lo muismo que ocurría hace 40 años, ahora los hijos de aquellos no tienen ni motivos ni razones excepto ser unos vagos para buscarse algún trabajo, desde luego la culpa de eso la tienen sus padres, que no se preocuparon de ellos y ya de chiquitos no conocieron otra vida y para muchos es lo único que saben hacer, otros en cambio  si tienen salida pero es más fácil robar y aún hay quien ni tiene que ver ni con las FARC pero aprovecha la ocasión para unirse a ellos y vengar rencillas personales arropado y disimulado entre esos terroristas, la palabra guerrilla hoy día ya no encaja ya no es guerrilla ya es saqueo contrbando robos y secuestros sin más fundamentos.

Gran parte de culpa qe que las FARc no hayan desaparecido definitivamente la tiene gente que como tu se cree eso de 'las FARC sabe a quien le tiene que hacer qué y por qué se lo tiene que hacer' que en el fondo para ellos es una justificación.

447
VB .NET / Re: Problema con Control de usuario!!!!!!!!!
« en: Martes 23 de Septiembre de 2008, 04:57 »
Pués no, no te explicas, no llego a comprender que quieres realmente.

Voy a aventurarme basándome en suposiciones....lo cuales perder tiempo y el tiempo lo tiene que perder el interesado haciendo las preguntas correctamente.

Si tu control personalizado se llama Barra insertas en el formulario 2 instancias de ese objeto pasarían a llamarse Barra1 y Barra2...

Bien si tu control Barra tiene pongamos 3 botones y quieres programar sus eventos click necesitas en tu control barra haber incluído los eventos click para dichos eventos. entonces en tu control Barra en su diseño debes pulsar en los botones para que se abra su evento click y allí proovocar el evento que previamente declaraste   ' raiseevent Button1_click  Que por ejemplo al button1 lo podrías haber llamado nuevo en vez de btnNuevo o button1, entonces si hiciste así luego hecho ya los cambios y guardados en un formulario de prueba al pulsar en Barra1, se abrir´ça el evento barra1_click , porque es el evento por defecto, pero puedes localizar el resto de eventos y deberías encontrar barra1_Editar que se correspondería con el botón editar_Click .... barra1_Nuevo que correspondería al botón Nuevo_click o barra1_Button3 que se correspondería con el button3_click .

LOs eventos debes declararlos previamente y luego provocarlos cuando sea preciso, hay 2 casos,  si no hay más código adicionakl o si lo hay... te pongo un breve ejemplo:

Código: Visual Basic
  1.  
  2. ' esto es el botón 1 en tu diseño de tu control personalizado, para que veas las correspondencias no altero el nombre del botón pero que tu si deberías hacerlo poniendo el nombre de sus acción (editar, nuevo, etc..
  3. Public Class Barra  ' UserControl1
  4.     ' declaro el evento y sus parámetros, puedo añadir o quitar parámetros, pero a un botón típicamente va bien así...
  5.     Public Event Editar(ByVal sender As System.Object, ByVal e As System.EventArgs)
  6.  
  7.    ' si mi botón no hará nada en mi código simplemente desencadeno su evento para que llegue al usuario, allí el evento se llamará Barra_Editar(...)
  8.     Private Sub BtnEditar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  9.        ' si quieres hacer algó antes de provocar el evento escribe aquí dicho código
  10.            ' provocamos el evento editar ...
  11.           RaiseEvent Editar(sender, e)   ' mira esto:   0000000000000 desde aquí salta a más abajo donde pone 111111111111 cuando estçé en ejecución
  12.      
  13.      ' si quieres hacer algo después que termine la devolución escribe el código aquí, por ejemplo validar algo...
  14.     End Sub
  15. End Class
  16.  
  17.  

Ahora cuando guarde el control y ponga una instancia de él en el formulario de una aplicación, al ir a la ventana de código, se leccionamos Barra1 (en el combo del 'class name' ) y el evento deseado, en nuestro caso Editar en el combo de 'declaraciones' . el código que saldría sería este.

Código: Visual Basic
  1.  
  2. ' esto ya en una aplicación ...
  3. Public Class Form1
  4.    
  5.    ' si mi botón no hará nada en mi código simplemente desencadeno su evento para que llegue al usuario, allí el evento se llamará Barra_Editar(...)
  6.     Private Sub Barra_Editar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Barra1.Editar ´
  7.         ' 1111111111111 aquí se llega desde el código señalado arriba como  0000000000000000
  8.         ' el código que vayas a programar.... cuando se pulse en el botón editar del control ya creado.
  9.     End Sub
  10.  
  11.     Private Sub Barra_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Barra1.Click
  12.         ' el código que vayas a programar....
  13.     End Sub
  14.  
  15. End Class
  16.  
  17.  

448
Visual Basic 6.0 e inferiores / Re: Abrir formulario
« en: Martes 23 de Septiembre de 2008, 04:42 »
Mira, no sea ceporro. Si vas a una ciudad que no conoces y preguntas por 'Javier Basic' nadie lo conoce... pero si es probable que cualquiera conozca la dirección de Javier Basic, por tanto no des el nombre que nadie conoce, pregunta por la dirección.... Conocen ustedes la 'Avenida algoritmo' ?.. luego ya desde allí buscarás la calle , el edificio, el piso y llamarás a la puerta de Javier Basic.

Lo que quiero decir es que tu puedes tener en un listado lo que te dé la gana, por que es lo que de cara al usuario resulta reconocible, cómodo o agradable, pero por detrás tendrás que corresponder lo que tienes en la interfaz con lo que realmente debe llamarse. El nombre del formulario es como el nombre de alguien, el handle del formulario es el controlador del formulario, el identificador, su documentación, es como el mapa de la ciudad donde puedes buscar la dirección de Javier Basic, y más cosas.

Además el formulario debe estar en la aplicación aunque no esté  visible, ni activo ni cargado en memoria, de otra forma lo único que podrás hacer es abrirlo como un archivo de texto. Si Javier Basic no vive en la ciudad ninguna dirección tiene sentido, dicho de otro modo no existe un controlador para la ventana que no ha sido creada. Tampoco puedes hacer una referencia.

No es que no sea posible, es que no está documentado por Microsoft, ya que eso pertenece al propio entorno de compilación, se me ocurre una manera, pero sería muy trabajoso y no merece la pena.

449
Diseño de Algoritmos / Re: como desarrollo el algoritmo...
« en: Domingo 21 de Septiembre de 2008, 08:00 »
Bueno yo suelo explicarlo de una forma un poco abstracto espero que puede ayudar....

El algoritmo es como un huevo, el programa es como el pollito que sale del huevo.

p.da.: hoy estoy un poco disléxico, se me pierden letras en los mensajes..

450
La taberna del BIT / Re: Evo
« en: Domingo 21 de Septiembre de 2008, 07:27 »
Cita de: "Eternal Idol"
Estoy un poco lejos y eso no quita que de mi apoyo a quien lo merece, como vos supongo que haces con el prefecto genocida. Cuando quieras entonces podes ir a asesinar a pobres collas, se lo merecen segun tus amigos por ser indigenas.
No te enteras ni de lo que lees... mi intromisión en esta conversación fue precisamente para reivindicar paz... te acuerdas que en el mensaje anterior me ponías unas florecillas...?????? , para reivindicar que si hay injusticias , si hay pobreza y/o si hay correupción que se corrija siguiendo cauces pacíficos, cauces democráticos no usando la violencia... te acuerdas ya que por eso te reías poniendo las florecillas... entonces por qué me achacas un signo (esa frase marcada en color) totalmente opuesto al que en todo momento he expresado (justo más abajo te marco nuevamente en color mi idea, lo que sí he dicho). Tu debes de ser sordo y a falta de oído te inventas sobre la marcha lo que pueda estarse 'cociendo'  y será por eso que te inventas cosas que uno nunca ha dicho y que uno nunca ha insinuado.

Cita de: "Eternal Idol"
 
Cita de: "Nebire"
   Que es mierda imperialista ?. Decir que las cosas se intenten arreglar sin derramar sangre ?  
.  Ideas, actitudes y posiciones foraneas, utiles al enemigo, descaradamente anti-pueblo, amigas de la dependencia. Y si, por supuesto, no hay imperios ni jamas los habra, al menos yo no me compro el discurso del enemigo
Es decir todo aquello que tu quieras considerar según tu antojo.. aplausossss.. Eso es justamente lo que hace Chávez, lo que le da la gana por qué le da la gana cuando se le ocurre lo que le viene en gana. En cierto modo es culpa del 'maestro'... no tanto del alumno...
Cita de: "Eternal Idol"
NO es el unico hilo donde lamentablemente tuve que leerte pero .
Lo siento pero mientes, yo no me prodigo por estos temas en este foro debo tener a lo sumo intervenciones en otras 2 conversaciones y con mensajes muy esporádicos e irrelevantes, como para que tú vengas a buscar una especie de historial. Tu llevas varios años años en este foro  y reza ahora 3605 mensajes habrás hablado bastante, yo en cambio llevo poco más de un año y sólo 241 mensajes la proporción es de 1 mensaje cada algo más de 2 días para mi y de algo más de 4 mensajespor día para ti, es decir una relación de 1/8 a esto debe decirte que mensajes que no hablen de programación no ctengo más de 20 y ceñido a política sin contar los de esta conversación no llegan a 5, son irrelevantes y están perdidos en un montón de mensajes de otros usuarios, por tanto tu famélico 'lamentablemente tuve que leerte ' y el resto de la frase es puro teatro, más propaganda...

Cita de: "Eternal Idol"
te aseguro que sera el ultimo donde pierda mi tiempo leyendote
Mas perorata para "interpretar".
JA, JA, JA con pausa entre cada JA.  eso son cosas se hacen, no se dicen, y a ti te va la 'marcha', no puedes estarte callado has reventado ya varias veces y ni siquiera iba contigo la respuesta. Fachamix, con todo el pronto que tiene en sus palabras tiene más porte que tú, a ti te pierde la soberbia, te recuerdo que tu relación de mensajes con respecto a los miós es de 8 veces superior, el único modo de que no respondas es que no leas, y tú revientas aunque explote una bomba en la otra parte de la ciudad, haces tuyo una causa inexistente.

Te recuerdo que yo sólo he pedido inicalmente la corrección de modales sobre insultos y amenazas y que ser un bocazas  no sirve para nada lo que importa al final son los hechos. Lo otro que he pedido es que si vosotros conoceis con detalle la situación particular de ciertas zonas de Bolivia que las expliqueis, pero eso es algo que no habeis hecho hasta el momento. si explicais claramente esos hechos que mencionaba Fachamix u otros equivalentes es posible que podais convencer a alguien de algo incluído a mi, pero con propaganda sin contenido no. Eso sólo funciona con los ignorantes, coge aun pobre suéltale que la culpa de su pobreza se debe a esto y a lo otro y que tal político esto y aquello y mañana ese pobre que antes vivía feliz con lo que tenía de repente se ha convertido en un asesino, lo cual es malo pero lo realmente grave es que después de todo sigue siendo pobrem, pero ahora además asesino y eso yo al menos no me agrada que gente en situación de poder imparta propaganda gratuita sin dar razones y explicaciones sin fijar el plan para solucionarlo porque hacer las cosas de otro modo es ser un Neanderthal y es ser víctima ya no sólo de la pobreza sino además manipulado al antojo de los propagandistas, vamos pobre y puto esclavo de los propagandistas. No hace falta ser muy inteligente para entender esto, al menos alguien que lee en internet esto lo puede entender, es lógico que gente sin estudios ni una cultura básica se dejen arrastar por la solución fácil de ' los atacamos se lo quitamos y dejamos de ser pobres' ....y luego qué....????? que cojones de pllan es ese...? Como programador deberías saber un pprograma está comosu propio nombre indica programado, planificado desde su idea hasta su culminación y no sobre la marcha lo que surja.

Tu si no quieres leer o contestar allá tú, yo seguiré leyendo y contestando, sin insultos y razonando no tragando frases hechas y soflamas revolucionarias que se crean al efecto como esa de 'imperialismo yankee' que tanto le gusta pronunciar a Chávez...  cualquiera diría oyendo esas mandangas que en los campos de algodón de Virginia antes de la guerra de Secesión los esclavos eran venezolanos en vez de negros...

Páginas: 1 ... 16 17 [18] 19 20 ... 29