|
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
« en: Miércoles 8 de Octubre de 2008, 13:55 »
427
« en: Miércoles 8 de Octubre de 2008, 13:29 »
De entrada debes saber que son unas coordenadas, como asumo que si  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). public structure infoArea x as long y as long ancho as long alto as long end structure public Structure infoMedidas ancho as long alto as long end Structure public Structure infoPosicion X as long Y as long end Structure private p_Area as infoarea private p_Campo as infoArea private p_Margenes as infoMedidas private p_PosicionActual as infoPosicion ' desplazamiento actual libre public cheques() as infoArea public sub New(elArea as infoArea, elCampo as infoArea, margenes as infoMedidas) p_Area=elArea p_Campo= elCampo p_Margenes=margenes call Posicionar_Inicio end sub private sub Posicionar_Inicio() p_PosicionActual.X=p_Area.x + p_Maregenes.Ancho p_PosicionActual .Y= p_Area.y + p_Margenes.alto end sub private sub Actualizar_PosicionVertical(medidas as infoMedidas) p_PosicionActual .Y= p_PosicionActual .Y + medidas.alto + p_Margenes.alto end sub
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. ' suponemos que todos los cheques son del mismo tamaño public sub Situar_Cheque(IndexCheque as integer) dim tam as infoMedidas if indexCheque < 0 or indexcheque> cheque.length then throw new exception "No existe el índice de cheque " & indexcheque & vbcrlf & "Imposible continuar..." exit sub end if tam.ancho=cheque(indexCheque).ancho tam.alto=cheque(indexCheque).alto ' 1º una comprobación para verificar si realmente cabe en el área if Verificar_Tamaño(tam)=true then if Verificar_TieneSitio(tam)=true then Cheque(indexcheque).x= p_PosicionActual.x Cheque(indexcheque).y= p_PosicionActual.y call Actualizar_Posicion(tam) else msgbox "no se ha ubicado el cheque actual con referencia " & algun_dato_que_lo_referencie & " No cabe en la página actual" end if else msgbox "No se pudo situar el cheque su tamaño es mayor que el área destinada al efecto..." ' 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... end if end sub private function Verificar_Tamaño(tam as infoMedidas) as boolean return (tam.ancho <= p_Area.ancho) and tam.Alto <= p_Area.alto) end function private function Verificar_TieneSitio(tam as infomedidas) as boolean return (( p_PosicionActual.x + tam.Ancho) <= p_Area.ancho) and (( p_PosicionActual.Y + tam.alto) <= p_Area.alto) ' nota no se ha considerado margen derecho ni margen inferior.... end function
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
« en: Miércoles 8 de Octubre de 2008, 12:12 »
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... 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. 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: public function Contar_Palabras(texto as string) as long dim s() as string, n as long if len(texto)=0 then Contar_Palabras=0 else if instr(texto," ")<>0 then s=split(texto) ' 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 for k=0 to ubound(s ) if s(k)<>"" then n=n +1 next Contar_Palabras= n else Contar_Palabras=1 end if end if end function
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: Private Function isAlphaNumeric(anyChar) As Integer Select Case Asc(anyChar) Case 48 - 57, 65 - 90, 97-122, 193, 225, 201, 233, 205, 237, 211, 243, 218, 250, 220, 252 , 209, 241 isAlphaNumeric = True case else isAlphaNumeric=false end select end function
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: 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. Public Property Get Normal() As String Normal = DNormal End Property Public Property Let Normal(ByVal vNewValue As String) DNormal = vNewValue End Property
comentario 8 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. Public Property Get TextReverso() As Variant TextoReves = StrReverse(cTexto) TextReverso = TextoReves End Property
en cuanto a las fechas,  sin comentarios... Así que por favor en cuanto puedas corrige todo el texto o retíralo,  ya que no es precisamente un ejemplo sino de mala programación. La frase: 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
429
« en: Miércoles 8 de Octubre de 2008, 08:26 »
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
« 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
« 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
« 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
« en: Sábado 4 de Octubre de 2008, 01:42 »
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.
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a As String a = TextBox1.Text For a = Len(TextBox1.Text) To 1 Step -1 TextBox2.Text = Strings.Left(TextBox1.Text, 2) TextBox3.Text = Strings.Left(TextBox1.Text, 3) TextBox4.Text = Strings.Left(TextBox1.Text, 4) Next End Sub End Class
Gracias  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: Dim a As String = TextBox1.Text dim k as integer=0 For k = Len(a) To 1 Step -1 TextBox2.Text = Strings.Left(a, k) ' cadena de la que se toma, cantidad que se toma Next
434
« en: Sábado 4 de Octubre de 2008, 01:07 »
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... 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
« 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
« en: Domingo 28 de Septiembre de 2008, 21:15 »
lo que necesito es ... que simplifica una raiz y simplifica una fraccion
Dicho de otro modo: no has entendido nada.
437
« en: Viernes 26 de Septiembre de 2008, 22:26 »
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???
 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.) 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. 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
« 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: 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 X as long Y as long Ancho as long alto as long end type ' sea una función cualqiera que recibe una ventana como parámetro, por ejemplo. public function maneja_lo_que_Sea(f as form) as long dim r as rect r.ancho= f.sclaex(f.width, f.scalemode,vbpixels) r.alto= f.sclaey(f.height, f.scalemode,vbpixels) ' lo que sea que hicera la función... end function
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: ' siendo la función ... Function Obtener_Imagen(PictureKE As PictureBox) As StdPicture ........ end function ' el código siguiente .... SavePicture Obtener_Imagen(Me.Picture1), App.Path & "PlanoXY.bmp" Picture1.Cls Picture1.Picture = LoadPicture(App.Path & "PlanoXY.bmp") ' puede ponerse así Picture1.Cls Picture1.Picture = Obtener_Imagen(Me.Picture1)
Te ahorras guardar a disco y cargar de disco... saludos.
439
« en: Jueves 25 de Septiembre de 2008, 21:32 »
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
« 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
« en: Jueves 25 de Septiembre de 2008, 14:40 »
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
« en: Jueves 25 de Septiembre de 2008, 14:31 »
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
« en: Jueves 25 de Septiembre de 2008, 13:40 »
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.  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 ' Declaraciones de API... 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 Private Declare Function Version_Test Lib "Captura.dll" (Optional ByVal testVisual As Boolean = False) As String '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ' NEBIRE NEBIRE NEBIRE '())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ')))))) Ventana= Nombre del formulario, típicamente será ME u otro. (((((((( '((((( Rect = coordenadas y dimensiones de la región, por defecto es 0, )))))))) ')))))) un valor negativo se trunca a 0. (((((((( '((((( AreaCliente= si es false (por defecto) captura toda la ventana, )))))))) ')))))) si es true= sólo el área cliente (sin el marco) ((((((( '((((( ROP = son las constantes de Raster, no confundir con las constantes de ))))))) ')))))) shape, que sirven para lo mismo pero tiene diferente valor. ((((((( '((((( --------------------------------------------------------------------------------------- ))))))) ')))))) Devuelve una imagen, que debería entregarse a un picture oculto. ((((((( '((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((() ' Estructura tipo RECT Private Type Coord2D X As Long Y As Long Ancho As Long Alto As Long End Type Dim cDefecto As Coord2D 'para valores por defecto.... ' con parámetros por defecto, para ver ejemplos de otros parámetros en el siguiente código. Private Sub Command1_Click() Picture3.Picture = LoadPicture() Picture3.Picture = Capturar_Ventana(Me, cDefecto) End Sub Private Sub Form_Load() Command1.Caption = "Capturar form completo" Command3.Caption = "Capturar cliente negativo" Command4.Caption = "Capturar banda negativo" Command2.Caption = "test dll" Picture3.BackColor = &H0& ' negro Picture3.BorderStyle = 0 ' sin borde Picture3.AutoSize = True ' importante. ' colocar imágenes y más cosas en los otros picturebox, etc... ' tomamos valores por defecto... valores negativos fuerzan ajustarse al tamaño del formulario. With cDefecto .X = -1 .Y = -1 .Ancho = -1 .Alto = -1 End With End Sub
Otros ejemplos de uso de la llamada . Pasando diferentes parámetros ' con todos los parámetros, se usa una operación de fusión... por defecto es vbSrcCopy Private Sub Command3_Click() Dim d2 As Coord2D d2.X = 0: d2.Y = 0 d2.Ancho = Me.Width: d2.Alto = Me.Height Picture3.Picture = Nothing Picture3.Picture = Capturar_Ventana(Me, d2, True, vbNotSrcCopy) End Sub ' se toma una región (banda) de arriba abajo del formulario de 2000 twips de ancho empezando en el 2000 Private Sub Command4_Click() Dim d2 As Coord2D d2.X = 2000: d2.Y = 0 d2.Ancho = 4000: d2.Alto = Me.Height Picture3.Picture = Nothing Picture3.Picture = Capturar_Ventana(Me, d2, False, vbMergePaint) End Sub
Testear si la dll resulta 'visible' (vamos si encuentra la referencia) Private Sub Command2_Click() Dim n As String 'si la longitud de n es 0 no pasó el test. n = Version_Test If Len(n) > 0 Then MsgBox "pasó el text." n = Replace(n,chr(0),"") MsgBox "Test: " & n End Sub
444
« en: Miércoles 24 de Septiembre de 2008, 19:29 »
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
« 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: Function Suma(ParamArray vector()) Dim X As Integer Dim Y As Integer For Each v In vector ' fíjate que v si es una variant y referencia perfectamente al elemento del grupo vector. Y = Y + cint(v) ' aquí te marcará error diciendo que no coinciden los tipos. Next v Suma = Y End Function
puedes darte cuenta de su posición en memoria, para ver que por lo menos se necesita un long... Function Suma(ParamArray vector()) Dim X As Integer Dim Y As Integer For Each v In vector msgbox varptr(v) & " Esta es la posición de memoria donde se encuentra el elemento 'vº' del vector... " stop ' cuando pare aquí, lee esto y pulsa 'F5' para probar lo que comento en la siguiente línea 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 Next v Suma = Y End Function
y para que lo veas más claro, copia y ejecuta este código paso a paso 'F8' Private Sub Form_Load() Dim v() Dim t As Timer Dim p As PictureBox Dim f() As Form ReDim f(0 To 1) ReDim v(0 To 9) 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. v(0) = 3 v(1) = CDbl(3) Set v(2) = p v(3) = "Hola" v(4) = 3 Set v(5) = t Set f(0) = Form1: Set f(1) = New Form1 Set v(6) = f(1) set v(7)=f(0) 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. v(8)=v(6) let v(9)=43 Call Suma(v) End Sub Function Suma(ParamArray vector()) Dim Y As Double Dim t As Variant For Each v In vector MsgBox VarType(v) stop ' te ha dado el valor 8204 que son 8192= vbArray + 12 = vbVariant (array de variant), pulsa f8 para continuar... t = v MsgBox "La dirección de memoria de 't' es: " & VarPtr(t) & " y la de 'v' es: " & VarPtr(v) MsgBox UBound(vector()) Next v Suma = Y End Function
446
« en: Martes 23 de Septiembre de 2008, 05:41 »
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
« 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: ' 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.. Public Class Barra ' UserControl1 ' declaro el evento y sus parámetros, puedo añadir o quitar parámetros, pero a un botón típicamente va bien así... Public Event Editar(ByVal sender As System.Object, ByVal e As System.EventArgs) ' 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(...) Private Sub BtnEditar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' si quieres hacer algó antes de provocar el evento escribe aquí dicho código ' provocamos el evento editar ... RaiseEvent Editar(sender, e) ' mira esto: 0000000000000 desde aquí salta a más abajo donde pone 111111111111 cuando estçé en ejecución ' si quieres hacer algo después que termine la devolución escribe el código aquí, por ejemplo validar algo... End Sub End Class
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. ' esto ya en una aplicación ... Public Class Form1 ' 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(...) Private Sub Barra_Editar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Barra1.Editar ´ ' 1111111111111 aquí se llega desde el código señalado arriba como 0000000000000000 ' el código que vayas a programar.... cuando se pulse en el botón editar del control ya creado. End Sub Private Sub Barra_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Barra1.Click ' el código que vayas a programar.... End Sub End Class
448
« 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
« 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
« en: Domingo 21 de Septiembre de 2008, 07:27 »
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. 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... 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... 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
|
|
|