|
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 ... 22 23 [24] 25 26 ... 29
576
« en: Jueves 8 de Mayo de 2008, 22:06 »
En primer lugar perdonad si lo que voy a proponer ya está dicho, pero es que ya van 3 páginas y me da pereza leer todos los mensajes sólo para comprobar si ya se dijo lo mismo o no (he leído alguno completo y varios entre líneas).
Mi propuesta parte de la idea de lo desagradable, deseperante y rechazo que produce abrir un foro y encontrarse en una página que la mitad de los mensajes sean del tipo: " quiero hacer un programa que responda como una persona a las preguntas que yo le haga. Necesito que me deis código." y listo y se queda tan ancho posiblemente no sepa no lo que es una lista pero ya quiere hacer con 2 botones algo espectacular.
Bien pués estos tipos de mensajes no sólo tener respuesta, y no se si es peor la respuesta puede ser del tipo, "no hacemos tareas a nadie', "debes indicar que estás haciendo para que veamos donde fallas y ayudarte por ahí", la sensación que dan a cualquier lector que se acerque al foro son del tipo: "vaya mierda de foro he visto 12 mensajes en sólo una página y nadie ha respondido, aquí no ayudan a nadie" o también "mira que listos quieren que ponga ki código para copiarlo ellos..." que es la sensación que les queda a quines les pidas que te aclaren donde se han atascado para comprender donde se han perdido, a que se debe su fallo...
En fin mi propuesta por tanto es borrar o apartar lo antes posible todos los mensajes del tipo: * mensajes inespécíficos, que tienen un problema pero que aparte de quejarse no señalan cual es el problema. requiere una retahíla de mensajes repetitivos donde se intenta que el autor se explica. Cansa mucho leer toda una conversación para descubrir que no se aborda absolutamente nada de programación. * mensajes megalomaníacos, donde el autor dice que no sabe lo que es un pedal pero que además dice que quiere construir un cohete hiperespacial. Deja la sensación a cualquiera de que es un foro poco serio y que sólo reúne a algunos aficionados que no saben por donde andan. * mensajes de tareas, si los cacareados mensajes de tareas, si no se acompaña de una clara explicación del problema y además de una anotación sobre código. no es necesario que tenga código original, ni siquiera seudocódigo pero si almenos que plantee claramente lo que el tiene como solución pero que falla.
Estos mensajes parte del impacto sobre el visitante, tienen el especial efecto nefasto de sepultar a otros mensajes más interesantes... nadie consulta 7 páginas atrás, eliminado este tipo de mensajes los mensajes de 7 páginas atrás sólo estarían en la pagina anterior (es un suponer, relativo).
Es una tarea de mantenimiento como entiendo que es una tarea a llevar por los administradores y que estos tampoco pueden estar todo el día vigilando los mensajes, propongo lo siguiente (que es un poco lo que se sigue en wikipedia). Yo que no soy administrador en el foro pero que soy forista, al ver un mensaje de ese tipo, respondo con un tag (o sólo una frase) que más o menos diga"No reúne criterios del foro" incluso podría ser un simple emoticon y se alega con más ampliación si se desea las razones de por qué no lo cumple... entonces los adminnnnistradores lo tendrán más sencillo, cada día podrán hacer búsqueda de mensajes en los que aparece el tag , emoticon o frase diseñada al efecto No reúne criterios del foro, sólo tendrán que abirlos y verificar que es así, pero no ya buscar foro por foro los mensajes nuevos...
Además estos mensajes tampoc se deberían borar de un plumazo, sino trasladarse a un nuevo foro que se llamara algo como : foro de mensajes de bajo criterio ó más llanamente 'Mensajes incorrectos', y así se propone al autor que corrija su mensaje si lo hace y queda claamente definido podría reintegrarse nuevamente a su ubicación original... si después de un mes no se corrigen se borran... vamos una papelera, pero no entendida ni nombrada como tal porque correría el riesgo de que nadie mirara su contenido... en dicho foro debería leerse claramente que los mensajes (más bien conversaciones) que están allí están por las razones explicadas y que dado el caso de alterarse el mensaje y cumplir los requisitos se pueda reintegrar....
La mayor parte de estos mensajes suelen ser de usuarios nuevos que entran con 1-10 mensajes, tampoco es buena idea borrarlos de un plumazo, por eso si se les da la oportunidad de corregirse desde la 'papelera virtual' que he definido más arriba contribuye a eso.
Creo que mi propuesta dará más calidad al foro, al tener una mayor limpieza y donde cada página tiene un 90% de mensajes con sentido y programación y no con desviar la atención en comunicaciones ajenas a la programación.
Ningún foro serio puede tener una sola converación sin que su objeto conste en el mensaje. si el foro dice programación WEB no debe haber mensajes cuyo tema sea "he instalado el firefox, pero no se cómo cambiar tal cosa..." si no tiene programación o se lo lleva a otro sitio o se elimina, si no se hace la calidad del foro decáe.
577
« en: Jueves 8 de Mayo de 2008, 21:17 »
No acostumbro a responder con acotaciones pero el caso me parece que lo precisa... ...trabajo como informático Freelance...
...mis conocimientos en programación tampoco son muy altos... no lo entiendo.... lo uno no cuadra con lo otro y viceversa, pero bueno... ...Normalmente, esto se hace apretando botones de este programa en cuestión, pero mi cliente quiere que se haga automáticamente... ...Lo que quiere es que, al apretar un botón de mi aplicación, este programa abra un archivo, coja los datos y proporcione una serie de gráficos....
Claro, la gente suele querer que se adivine que piensa y que el programa lo haga automáticamente, otros más razonables (como es el caso de tu cliente) queire que determinadas tareas se automaticen, ya que al parecer son repetitivas y le aburre teclear constantemente la misma secuencia de pasos. Debes tratar de mirar si el programa tiene alguna forma de crear macros nativamente. Si es el caso por ahí lo podrías tantear, peroposiblemente sea limitado paa lo que quiera tu cliente. ...Me he puesto en contacto con el proveedor pidiéndole algún ejemplo de aplicación en Vb.net que interactúe con su programa, o bien, algunos comandos que pudiese utilizar a través de la línea de comandos. Pero no he tenido respuesta…
Es normal, posiblemente haya entendido que quieres pistas para piratear su programa, en cualquier caso está en contra de la política de comercio. Si quieres manipular el motor de un Mercedes, no esperes que el fabricante te diga como hacerlo, sería hacerse la competencia a sí mismo, a lo sumo te dicen que lo que hagas será bajo tu propio riesgo y en dicho caso cualquier manipulación del motor implica toda pérdida de garantías en cuanto a averías y demás... al caso de la informática, esto se entiende peor, ya que manipular el 'motor' no implica sólo hacerlo en ese modelo concreto, sino que tal como es la naturaleza de la informática, cambiar un 'motor' implica cambiar millones, ya que se puede copiar y repartir... el motor de un coche es único, los cambios que hagas a uno, requieren un trabajo y hacerlo alos demás requiere exactamente el mismo trabajo, por eso en informática esto no es aceptable a nivel comercial. ...Por Internet, he encontrado consejos ... ...Insertar una DLL en el espacio de direcciones de la otra aplicación... ...Enviar al bucle de mensajes la secuencia adecuada de mensajes WIN32 para que la aplicación actúe como tú quieras... ...Capturar el bucle global de mensajes del equipo mediante una la inserción de una DLL global. ...Enviar una secuencia de WM_MOUSECLICK para que se abra la ficha correspondiente, luego WM_KEYCHAR con los TAB y los textos a rellenar. ...Modificar una dll del programa en cuestión. ...Interactuar con el registro. ...Interactuar con la ventana activa
Cualquiera de las opciones que apliques que no cuente con el respaldo del fabricante es una clara violación de la ley así te recomiendo que te cubras bien las espaldas antes de acometer algo por el estilo donde tu autoría queda claramente registrada, creo que esto debes tenerlo en cuenta, el peso de la ley recaería sobre ti y sobre tu cliente sólo como inductor al delito, o cómplice a lo sumo. Por tanto mi consejo es que le digas a tu cliente que si quiere un programa personalizado haga una de dos cosas, te encargue el proyecto entero (con lo cual tu debes asumir toda la funcionalidad del programa pero donde el cliente podrá pedirte constantemente cambios para que sea justo como el quiere), o bién que se ponga en contacto con el fabricante y le solicite la personalización del programa si es que entra dentro de sus cartera del modo de funcionar (si es un mayorista, lo dudo, y en todo caso tendría que donar un riñón). Resumiendo tu cliente no puede pretender coger una aplicación barata o semibarata (porque se venden cientos de miles de copias) y luego pretender que sea personalizable a nivel de antojo también por 4 monedas que querrá pagarte a ti. Plánteale que (si sientes que estás capacitado) puedes hacerle el programa completo a su antojo, pero al precio que corresponde a fabricar un programa del que se vende sólo 1 copia (1 licencia al menos con las copias que precise su empresa), no a un precio de risa, entonces entenderá y valorará si pulsar 5 teclas en vez de 1 vale o no la pena. Una alternativa es que si lo que tu cliente más que caprichos es realmente razonable hagas un programa por ti mismo que asuma esos 'defectos' que ese programa tiene y que tenga las 'carencias' que ese programa no tiene y posteriomente se lo presentes a tu cliente y/o a otros potenciales clientes, anotándoles justamente esas virtudes que ellos hechan en falta. Claro esto suponiendo que tu capacidad te permita hacer dicha aplicación completamente y si el precio final de venta es lo suficientemente atractivo dado los posibles clientes a quienes se lo puedas vender... vamos la ley de la oferta y la demanda que tu cliente se quiere saltar a la torera pidíendote que le piratees el programa.
578
« en: Jueves 8 de Mayo de 2008, 19:11 »
Qué tal si empiezas por intentar comprimir aunque sólo sea un archivo.....?????
Después intenta descomprimirlo.... y más adelante podrás intentar empaquetar varios en uno... pero para correr necesitas primero saber andar... sabes andar ???
579
« en: Jueves 8 de Mayo de 2008, 18:54 »
1º Un formulario contenedor MDI puede contener a otros formularios con la propiedad MDIChilfren establecida a true.... seguro que activaste dcha propiedad ??? 2º Cuando estableces formularos mdichildren, para visualizarlos debes invocarlos formx.show tal cual si estuvieran fuera del contenedor. 3º Si El formulario que mdichildren webbrowser que utilizas es en efecto un mdichildren, no puedes pretender que el resto de los formularios mdichildren se alojen dentro de un formulario que no es MDI. Un formulario MDI es distinto de la propiedad mdichildren. El formulario MDI es la caja grande, los formularios con la propiedad mdichildren son cajas dentro de esa caja grande, pero no cajas dentro de otra caja dentro de la caja grande. 4º setparent en vb.net no se comporta al igual que lo hacía en vb6.0, ahora rechaza 'meter' un contenedor 'raíz' dentro de otro. Yo he superado esto de la siguiente forma: cuando tengo el formulario aún por estrenar coloco un 'pannel' , controlo sus medidas con el evento resize del formulario, cuando en otras circunstancias haría un setparent ahora hago un me.controls.add desde el formulario que lo deseo llamarlo suponiendo el formulario padre (formP) y el formulario que sería hijo con un pannel (panelH) sería algo como ' añado el panel del otro formulario en el evento load del padre... o cuando quieras... Private Sub formP_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load if apadrinar_Controles( form2.panelH)=true then añade="" else añade= "no " end if msgbox ("El panel " & añade & "se añadió al dormulario...") end sub ' esta función va en el formulario padre si se desea que fuera común para pasar controles de un formulario a otro, debería añadirse la referencia del padre en otro parámetro (hasta el nivel de formulario) y sustituírlo por ME, y colocar la función en un módulo compartido. public function apadrinar_Controles( ctr as Control) as boolean on error goto fallo ' por ejemplo cuando le pasas un formulario. Con try-catch, puedes interceptar el 'message' me.controls.add(Ctype(ctr, Control) ' en el ejemplo ctr sería: form2.panelH ctr.left= posicion_deseadaX ctr.top= posicion_deseadaY ctr.width=tamaño_DeseadoX ctr.Height= tamaño_DeseadoY return true exit function fallo: return false end function
580
« en: Jueves 8 de Mayo de 2008, 05:42 »
¾ ½ ¼ » º ¹ ¸ · ¶ µ ´ ³ ² ± ° ¯ ® - ¬ « ª © ¨ § ¦ ¥ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Todavía no acabo de entender que quieres realmente. sólo por suponer...Si necesitas que dados unos caracteres "A B C D ..." se conviertan de fijo en otros caracteres, distintos pero siempre con una correspondencia unívoca, todo lo que ienes que hacer es crear una tabla de conversión. Esto puedes hacerlo de varias formas, siendo unas más rápido que otras. Y el modo a usar dependería de la asignación. Si existe correlación entre los símbolos a aparecer tal como la hay con los caracteres alfabéticos, entonces el cófigo podría ser como el que ya te anoté en otro mensaje. Si sin embargo no existe una correlación ni un orden lógico, entonces la conversión debe hacerse manual, tampoco es mucho más trabajosa, sólo menos elegante y algo más lenta quizás... de todos modos vb.NET vuela con las cadenas, por lo que aunque le pongas un tocho de 100MB. l ocnvertirá en algunos segundos... Se me ocurre pués 2 formas sencillas que puedes abordar, una es un codificador con 1 entrada de datos y 1 sola salida y 2 n entradas de control donde cada una contiene cada tabla de códigos. El otro modo te será más asequible de entender y seguir, pués se trataría de crear dos matrices o cadenas con cada correpondiente carácter en el mismo índice de cada matriz respectivamente... es mejor ponerlos en una clase... entoncres creamos un nuevo pproyecto, constará de un formularo y añadiremos una clase: Código de la clase: Public Class codifica ' piensa si las tablas deberían incluir un carácter de espacio Private entrada As String ' tabla origen: "ABCDEF..." Private salida As String ' tabla correspon: "¾½¼»º¹..." ' las tablas deben ser igual de largas sin repeticiones y sin espacios en blanco ' no se comprueban esos puntos se supone correcto... Public Sub New(ByVal tablaOrigen As String, ByVal tablaDestino As String) Me.entrada = tablaOrigen Me.salida = tablaDestino End Sub ' convierte un´texto desde un código de origen a otro de destino especificados en tablas Public Function convertir(ByVal texto As String) As String Dim txt As String = "" ' cadena de salida Dim car As String = "" ' un único carácter Dim n As Integer = 0 ' posición de un carácter en la cadena On Error GoTo errorCaracter For k As Integer = 0 To texto.Length - 1 ' se inicia un bucle car = texto.ElementAt(k) ' toma un carácter del texto introducido n = Me.entrada.IndexOf(car) ' lo busca en la cadena origen y toma su posición txt &= Me.salida.ElementAt(n) ' con la posición hallada toma el carácter en dicha posición y lo añade Next Return txt Exit Function errorCaracter: MessageBox.Show("se produjo un error un cáracter del texto no consta en el 'diccionario' origen." & vbCrLf & _ "Se aborta la conversión... es el carácter entrecomillado: ( " & car & " )", "ERROR: carácter fuera de la tabla...", MessageBoxButtons.OK, MessageBoxIcon.Error) End Function ' permite cambiar más adelante las tablas de conversión si se desea. Public Sub cambiar_Codigos(ByVal tablaOrigen As String, ByVal tablaDestino As String) Me.entrada = tablaOrigen Me.salida = tablaDestino End Sub End Class
Código del formulario: Public Class Form1 Public cod As codifica ' instancia la clase codifica ' asigna las tablas de códigos a la clase instanciada Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' NOTA: no comprueba que haya caracteres repetidos ' NOTA-2: a las tablas se les ha incluído también el espacio al inicio del todo If Len(TextBox1.Text = TextBox2.Text) Then cod = New codifica(TextBox1.Text, TextBox2.Text) Else MessageBox.Show("Un texto tiene más caracteres que otro. ambos deben tener el mismo número de caracteres.", "No se pudo asignar las tablas...", MessageBoxButtons.OK, MessageBoxIcon.Warning) End If End Sub ' convierte el código que hay en el textbox3 y lo deposita en el textbox4 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox4.Text = cod.convertir(TextBox3.Text.ToUpper) ' nota que se connvierte a mayúculas previamente End Sub ' cambia las tablas de códigos por otras diferentes... sólo comprueba que tengan el mismo tamaño Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' NOTA: no comprueba que haya caracteres repetidos If Len(TextBox1.Text = TextBox2.Text) Then Call cod.cambiar_Codigos(TextBox1.Text, TextBox2.Text) Else MessageBox.Show("Un texto tiene más caracteres que otro. ambos deben tener el mismo número de caracteres.", "No se pudo reasignar las tablas...", MessageBoxButtons.OK, MessageBoxIcon.Warning) End If End Sub End Class
Imagen del formulario como quedaría...: añadirle 4 textbox y 2 botones, al gusto...
581
« en: Jueves 8 de Mayo de 2008, 05:09 »
¾ ½ ¼ » º ¹ ¸ · ¶ µ ´ ³ ² ± ° ¯ ® - ¬ « ª © ¨ § ¦ ¥ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Todavía no acabo de entender que quieres realmente. sólo por suponer... Si necesitas que dados unos caracteres "A B C D ..." se conviertan de fijo en otros caracteres, distintos pero siempre con una correspondencia unívoca, todo lo que ienes que hacer es crear una tabla de conversión. Esto puedes hacerlo de varias formas, siendo unas más rápido que otras. Y el modo a usar dependería de la asignación. Si existe correlación entre los símbolos a aparecer tal como la hay con los caracteres alfabéticos, entonces el cófigo podría ser como el que ya te anoté en otro mensaje. Si sin embargo no existe una correlación ni un orden lógico, entonces la conversión debe hacerse manual, tampoco es mucho más trabajosa, sólo menos elegante y algo más lenta quizás... de todos modos vb.NET vuela con las cadenas, por lo que aunque le pongas un tocho de 100MB. l ocnvertirá en algunos segundos... Se me ocurre pués 2 formas sencillas que puedes abordar, una es un codificador con 1 entrada de datos y 1 sola salida y 2 n entradas de control donde cada una contiene cada tabla de códigos. El otro modo te será más asequible de entender y seguir, pués se trataría de crear dos matrices o cadenas con cada correpondiente carácter en el mismo índice de cada matriz respectivamente... es mejor ponerlos en una clase... [CODE]
582
« en: Viernes 2 de Mayo de 2008, 21:19 »
Hola, pués he probado el código y funciona perfectamente... para ver el errro que te sale podrías añadir a la línea: MsgBox("Un error ha ocurrido en la desencriptación.")
el memnsaje de rrro así: MsgBox("Un error ha ocurrido en la desencriptación." & exc.Message)
Con lo cual ya sabríamos que error te sale... Este mensaje iría mejor en el foro de criptografía (que existe)...
583
« en: Viernes 2 de Mayo de 2008, 20:58 »
Qué tal siempiezas por buscar en la Wikipedia y buscas 'criptografía' con lo cual ya te metes a conocer cosas, por ejemplo desde el abad Tritemio, hasta el código Enigma empelado en la 2ª guerra mundial y luego puedes buscar las siglas RSA. Verás que hay siempre enlaces que te van llevando de un sitio a otro y te vas informando.. si tienes emule haz búsquedas de libros en pdf cuyo título contenga 'encriptar' 'criptografía' 'criptográfico' 'código' etc....
584
« en: Viernes 2 de Mayo de 2008, 20:32 »
Hola, te explicas bastante, bastante mal...
Ahora creo entender que lo que quieres es desencriptar un código porque tal como te explicas pareces decir que necesitas obtener exactamente el código indicado y no otro.
En eso no puedo perder tiempo, eso es ya una tarea, supongo que atiende a algún trabajito que os han explicado en clase al que no has prestado atención y ahora quieres que te lo den hecho.
Desencrioptar un código puede ser tan breve como unos minutos o tan largo como siglos. Atiende en clase a las explicaciones y estudia más...
Si en efecto es un ejercicio que os han puesto en clase es de suponer que habrán empleado transposición de caracteres o incluso sustitución de caracteres, pero eso es ya trabajo tuyo.
585
« en: Viernes 2 de Mayo de 2008, 20:05 »
'''''Solo numeros enteros****************** PUBLIC SUB TextBox3_Change() CInt(textbox3.Text)'Convierte el numero en entero CATCH textbox3.Text = Mid$(textbox3.Text, 1, -1)'Si no es un numero borra el caracter STOP EVENT END 'Formato numero decimal ****************************************************** PUBLIC SUB TextBox4_Change() CFloat(textbox4.Text) CATCH textbox4.Text = Mid$(textbox4.Text, 1, -1) STOP EVENT END
Hola Zaida, el caso es que la 1ª parte del código no me acaba de convencer, ya que la psoición que corriges no necesariamente tiene que coincidir con la posición en donde está el caracter mal. Es frecuente que uno escriba algo como: 'El herido valbuciente gritó...' y después de escribir se percate que debe corregir un carácter entonces cambia Balbuciente por Valbuciente, pero la posición de escritura no es ya la última del texto. Tu rutina de textos funcionaría en ese caso porque atacas al carácter pulsado, en cambio no sucedera igual con los números. El mismo ejemplo con números aunque lógicamente sea menos frecuente, también ocurre y en tu código daría error, supongamos que escribo '0123456789' pero luego me percato que que el 6 era en realidad un '0' y quiero corregirlo, retrocedo el cursor pero debido a la proximidad en tre la 'o' y el '0' pongamos que cometo el error de pulsar la 'o' y quedaría así: '012345o789' ... cómo no sé como se comporta gambas, no puedo predecir que ocurrirá exactamente, pero en el mejor de los casos te daría una cadena como esta: '012345' ( se supone que tras modificar el texto nuevamente se ejecuta el evento change y va eliminado caracteres uno a uno) y en el peor de los casos te dará una cadena como esta: '012345o78' (no creo, pero no conozco gambas). Entonces tendemos que en el primer caso será un fastidio reintroducir nuevamente todos los caracteres eliminados, tanto más molesto cuanto más largo sea el contenido borrado, y en el 2º caso te ha borrado un carácter, pero persiste un error en la cadena no corregido. Yo te sugiero que si utilizas el evento change del textbox examines todo el contenido de la cadena, porque suponer que sólo ha sido modificado el último carácter es demasiado atrevido sin haber tomado medidas al caso (podría perfectamente pegar un texto copiado de otro lugar lleno de letras y caracteres) y tu función iría eliminado sucesivamente caracteres hasta que toda la cadena RESTANTE fueran números, es decir si el primer caracter fuera una letra se borraría el contenido pegado completamente. Por tanto en el evento change realiza un examen completo de la cadena y ofrece al textbox una cadena corregida antes de salir del evento, le ahorrarás molestias al usuario. En cambio si utilizas el evento keypress, tal como haces para las letras en efecto te bastará con comprobar sólo la tecla pulsada (y sólo si el texto es introducido por teclado, si el texto se introduce por pegado del usuario o por código interno mediante asignación, no saltará el evento keypress, entonces o limitas la forma de introducir texto a sólo por teclado o debes usar el evento change para dichos casos. Si usas keypress, siempre podrás usar tal como hiciste para las letras pero delimitanto el valor ASCII desde el 48 hasta el 57 ambos inclusive. El método de cpmario es si cabe más elegante que comparar los límites de código pués te permite reunir en una sola función cualquier posibilidad de letras o números creando unas constantes de 'strValidChars' como lo llamó cpmario, y en cada caso pasar a la función dicha constante. Más aún, si admites la posibilidad de que pueda pegarse texto, podrías proveer una función que devuelve todos los caracteres numéricos existentes en dicha cadena eliminando todos los caracteres no numéricos o viceversa... para ello necesitarías un bucle que recorra toda la cadena cortando carácter a carácter y 'sumándolo' a la salida los válidos, es una limpieza de cadena bastante útil para casos como por ejemplo recibir entradas de tipo 'Vicente Pérez 12 años' y donde sólo te interesa tomar la parte numérica.
586
« en: Viernes 2 de Mayo de 2008, 00:43 »
Deberías leer un manual por lo menos.. no pretenderás hacer un programa a partir de preguntas de cada cosa...
Léete un manual, el foro está para ayudar a alguien que se queda atascado al llegar a un punto dado no se puede ayudar a nadie a construir su programa paso a paso... se requiere un nivl mínimo y haber buscado la solución en la ayuda del programa que es bastante amplia y buena... la ayuda de Visual basic 6.0 tiene un monton de infromación pulsando F1 desde el programa.
Sólo por esta vez que tal si pruebas con un control CommonDialog ????
587
« en: Viernes 2 de Mayo de 2008, 00:19 »
Tu mensaje no es muy claro, no estoy muy seguro de que es lo que solicitas.. así supondré, según creo entender que tu lo que quieres es encriptar texto... Entonce si esto es así, a priori no tiene porqué ser absolutamente necesatio que aparezcan símbolos ilegibles, un texto se encripta igualmente aunque se pueda leer. Hecha esta aclaración y puesto que eres principiante, te doy una sencilla explicación. Entonces lo primero que necesitas es tener a la vista el código ASCII, para entender lo que vamos a hacer abre la siguiente aplicación: menú inicio --> Todos los progeamas --> Accesorios --> Herramientas del Sistema --> Mapa de Caracteres .... selecciona la fuente por ejemplo ARIAL. Como podrás ver hay unos símbolos en primer lugar, luego vienen los números, luego las mayúsculas, luego las minúsculas, y luego más símbolos... El primer símbolo que aparece es el de admiración (en windows XP, en los S.O. anteriores creo recordar que era el espacio y ocupa la posición 32) el signo de amiración ocupa la posición 33, la letra 'A' ocupa la posición 65, la letra 'Z' la 90 y la 'a' la posición 97... Bien pués todo lo que necesitas para cambiar letras por símbolos es sustituir cada letra por aquella cuyo código sea 'n' posiciones más adelante, por ejemplo si sólo vas a usar caracteres del a A hasta la Z puedes usar desde el código 165 en adelante, es decir sumas 100 posiciones a cada carácter. public function cambiar_Letra(letra as string) as string dim letraMas100 as string ' nota letra debe tener un sólo carácter en esta función letraMas100= CHR$ ( ASC ( letra ) + 100) cambiar_Letra= LetraMas100 end function
Aquí en el ejemplo se cambia una letra por la equivalente en el código ASCII pero 100 posiciones más adelante. Para cambiar todo el texto (lo dejo como ejercicio para ti ) deberías incluir un bucle que fuera despiezando cada letra, convirtiéndola y luego ir uniéndola nuevamente. Igualmente en tu función puedes proveer un parámetro para que no sea siempre 100 las posiciones añadidas... Al ser principante en programación es mejor que primero acapares conceptos, ya que esto en sí mismo sería una encriptación muy sencilla, sin embargo es lo que entiendo que has pedido...
588
« en: Jueves 1 de Mayo de 2008, 23:49 »
Puedes usar el módulo Twain, al crear tu programa si te resulta cómodo usar interfaz gráfica incluso para probarlo , pués lo haces, luego bastará que en ejecución esté siempre invisible, arranca la aplicación desde un módulo con 'sub main' y desde ahí chequea la línea de comando, siempre podrás tener una opción para hacer aparecer un posible formulario o no, eso ya a tu gusto...
589
« en: Jueves 1 de Mayo de 2008, 23:39 »
Puedes usar la instrucción split con un bucle. Split corta cadenas por determinados caracteres y cada trozo lo introduce en una matriz. Te ilustro con un ejemplo como se usa: public function invertir_palabras(entrada as string) as string dim salida as string dim n() as string dim p() as string ' albergará las plabras que existan en la cadena de entrada, split redimensiona la matriz al tamaño preciso n=split(entrada, ",") ' divide la cadena en 2 subcadenas, se supone que siempre existe esa coma.... if instr(" ", n(1))<>0 then ' el nombre es compuesto p= split(n(1), " ") ' dividimos el nombre compuesto en tantos como haya salida= p(0) ' si lo metemos en el bucle se añadiría un espacio delante, auqneu siempre podríamos quitarlo con trim... for k= 1 to ubound(p) salida= salida & " " & p(k) next else Salida= n(1) end if salida= salida & " " & n(0) ' finalmente añadimos los apellidos invertir_palabras= salida end function
590
« en: Miércoles 30 de Abril de 2008, 01:36 »
Te agradezco nos ilustres en GAMBAS
Esto va para Nebire
Me disculpas pero el lapsus lo has cometido tu. Ya que
If InStr(strValidChars, strCharLetter) Then
Hace el trabajo de localizar cualquiera de los caracteres anotados en la cadena.
Esa rutina es la que uso para detectar cualquier conjunto de caracteres que deseo filtrar.
En todo caso lo que tienes que hacer es colocar la rutina en el evento de un TextBox y ver si funciona Mis disculpas cpMario... Después de revisar nuevamente tus líneas veo mi error. De alguna manera (que no entiendo cómo) habías interpretado que comparabas los caracteres válidos con el contenido del textbox, cuando claramente, lo haces sobre el cáracter pulsado. ... y me alegra que me hayas corregido, pués no es acorde que algo correcto quede como erróneo.
591
« en: Lunes 28 de Abril de 2008, 05:16 »
iremos por partes para no liarnos.. Estoy seleccionando las 20 mejores piezas y su jugada, luego de esas 20, vuelvo a hacer otro analisis para decidir las mejores (el 20%), para finalizar, selecciono una de esas al azar . no selecciones al azar, sólo encaso de que realmente nose te ocurra nada inteligente, siempre hay una acción más inteligente que otra, si no sabemos de entrada cual es más inteligente, entonces aplíqemos una por estadísticas, porqué porque si nos sale mál podremos deducir que la estadística aplicada a tal idea es buena o es mala pero si lo hicimos al azar, nunca podremos saber si será bueno o no en el futuro... luego volvemos a eso de las estadíisticas... Si se logra, pero lo que no puedo lograr es como saber cuando hay que hacer un cambio de piezas ("matar un caballo aunque se te coman el alfil"). Ya que muchas veces cuando jugamos ajedrez es mejor tener un caballo que un alfil o viceversa. 'a falta de pan buenas son tortas' . Si no sabes cual pueda ser, usa estadísticas, del tipo cuantas veces se ha movido tal ficha, cuantas veces se moovió hacia atrás, esto no es resolutivo pero tras un rato de partida con varios movimientos, o mejor tras varias partidas, sen pautas del jugador...'prefiere usar los caballos' descubres, entonces piensas... si le como sus caballos es probable que se quede 'cojo'.... por eso valorar que piezas mueve más el adeversario (y tú) te ayuda a sospechar que piezas sabe mover mejor, y cuáles no les gusta arriesgar o bién que no sabe jugar muy bien con ellas. Una decisión basada en estas estadísticas será siempre más positivo para enseñarle que dejarlo al azar. Tambien cosas como tengo 2 alfiles y sólo un caballo yo voy a comerle la reina pero el me comerá la pieza que mate su reina, la duda está en matarla con mi caballo o con mi alfil... en ese caso valora si conviene más tener al menos una peza de cada o 2 del mismo y ninguna del otro...eso siempre podrás echarlo a suerte, pero anotando que se usó... todo a una estadística más general... al finalizar la partida podrás añadir la impresión perdí porque el cabalo que usé para comer la reina dejó un hueco a su alfil y posicionando su otrre me dejó sin salida... entonces puede sacarse enconclusión, no mover el caballo ssin analizar si su alfil y cabalo quedan dispuestos en 2 jugadas ante el rey, en dicho caso usar el alfil en vez del caballo... si guardaste las posiciones de esa jugada crítica, regresa las fichas a dicha posición e intenta ahora con el alfil en vez de con el caballo... No habia contado con eso, es una idea excelente, yo se que es muy dificil de implemenar, pero no es una programacion que no sepa hacer Para hacerlo inteligente hay que ser capaz de recordar cosas, el modo de recordarlas es tenerlas grabadas y calcular cuando sea preciso, ya fuera de juego o no..sin memoria, sin recuerdos, no se puede mejorar... imagina que tratas de llegar a un pueblo te indican un camino y al llegar acierto punto hay varios cruces de caminos complicados, descubres que las indicaciones que te dieron no fueron muy buenas, y decides que volver atrás a pedir nuevamente indicaciones es bastante más largo, entonces decidas explorar las posibilidades... avanzas por cada uno hasta que veas que está cortado o que es otro pueblo, entonces vuelves y recorres otro camino, pero ...oh... si no tienes memoria de los caminos ya recorridos, podrías repetir hasta 500 veces un camino, pero si recuerdas ya haberlo andado y ver que no tenía salida, sólo debes fijarte en las que te falta por recorrer. Voy a estarles informando como voy con el proyecto, mas bien gracias por el aporte, y por favor seria de gran ayuda que tambien pongan consideraciones a evaluar en el ajedrez que todavia no hemos tomado o una mejor sugerencia en los algoritmos. puésestará bien que informes mucha gente después de resolver alguna duda ya nunca vuelve por el foro. Sería bueno que señales que consideraciones te parecen oportunas y se puede hablar de ello. Los algoritmos son muy específicos, los de IBM, los tienen al punto de ser algoritmos para jugadas únicas y más o menos famosas, ese nivel de detalle en realidad no es inteligente, ya que no 'crea' una jugada en base a decisiones sino en base a una tabla de 'preguntas-respuestas', eso si el nivel de detalle es muy elevado. Hace años diseñe un juego con reglas diferentes al ajedrez pero que al caso también movía fichas y acabé dejándolo por aburrimiento porque aunque se comportaba bien yo siempre le ganaba, cuando tu lo has creado parece natural ganarlo porque conoces los algoritmos, tu los has diseñado, pero esto no es verdad, si es inteligente, lo cierto es que lo diseñes tú o no, una máquina puede hacer más cálculos en menos tiempo que tu de este tipo y por tanto se supone que debe originar al menos un centnarde posibles soluciones antes de mover una ficha, tu mentalmente puedes elaborar 7 ú 8 jugadas diferentes ó bien 2 ó 3 movimentos con 4 ó 5 jugadas hacia adelante, osea unas 15-20 movimientos, más allá hay que estar muy entrenado en un juego, e incluso con dudas tu encuentras mejores soluciones que el programa. Yo por ejemplo usaba un algoritmo que llamaba de sombra... el tablero cada casilla del tablero tenía una valoración que iba cambiando a cada jugada, donde estaban las fichas enemigas sólo por ello tenían un valor positivo , donde estaban mis fichas tenían un valor negativo, casilla sin ocupar tenían también su valor, el modo en que valoraba las casillas era complejo pues sufrió muchas modificaciones pero te cuento lo recuerdo.... la distancia tenía un valor tenía una fórmula para asignar un valor posicional sólo por distanca, tenía otra fórmula para dar valor sólo por casillas vacías entre fichas, tenía otra fórmula para valorar casillas basado en el valor de cada ficha... (en el ajedrez yo les daría valores en base 10... peones 10, alfiles y caballos 100 torres y rey 1000, reina 10000.) , tenía otra fórmula que valoraba casillas en función del las 8 casillas que le rodeaban (esto es la media de las 8 figuras que rodeaban la ficha), todos estos valores eran sumados y conservaba los valores delos últimos 4 movimientos de ambos jugadores, aparte de esos tenía otro que registraba la diferencia entre los valores de las casillas anteriores a un movimiento y el siguiente, estos valores de las casillas los usaba luego para otmar las decisiones de que ficha mover y hacia donde, debía compensarlo con el valor de las mías... ya que enviar a una ficha 'valientemente' hacia el enemigo sin protección tampoco tiene mucho sentido. Valorar justamente el sacrificio de las fichas es de lo más difícil, cuando un 'error' da al traste con una estrategia que se venía elaborando, el plan entero se rompe, por eso de último estaba probando sistemas que no reuquieran un plan muy elaborado ni muy largo porque tras ese trabajo si te coemn una ficha clave la jugada es ya imposible, sino jugadas oportunistas y puntuales, hasta que el juego estuviera más avanzado cuando un plan más elaborado pudiera dar sus frutos, cuando hay muchas fichas en 3 movimientos puede cambiar mucho el juego. bueno corto.....
592
« en: Lunes 28 de Abril de 2008, 04:20 »
Algunops autores quieren ser tan puristas que se olvidan que sus 'libros' van dirigidos a la gente sencilla no a mestros 'oádicos' que van a felicitarle por su obra...
El tipo hablando en cristiano, te está hablando de un algooritmo de ordenación, en el caso conreto descendente... a pesar de lo extraño que te lo haga parecer en el libro, el algoritmo que te describe, ya lo conoces, lo usas a diario intuitivamente,
Coge tre trozos de papel de diferente tamaño, al más grande le escribes A, al más pequeño C al otro B, cólocalos en orden alfabético...
ahora intenta ordenarlo sin ningún algoritmo leído, pero cada movimiento descríbelo en papel de moooodo detallado.
Lo que haces para determinar que uno es mayor que otro es compararlo con aquel... la comparación siempre es una resta:
comparacion= a-b, si comparacion es mayor que 0, a es mayor, si comparación es menor que 0 el mayor es 'b' si comaracion es 0 son iguales...
No obstante al programar no es preciso hacerlo así, el ensablador ya lo hace por nosotros, nosotros podemos hacerlo ya condicionado a un más alto nivel usando decisiones.. ... enla forma : Si 'A' es mayor que 'B' luego .....
Entonces tu diagrama sería algo como: dibujas 3 letras una para cada variable encerrada en un círculo, luego comparas: comparar 'A' y 'B' esto es diibujas un rombo y llevas 2 lineas al rombo una desde el circulito A y otra desde el de B, hazlos entrar por esquinas del rombo, en las líneas dibuja unas flechitas pequeñas para indicar que van desde los círculos hacia el rombo... en el rombo dentro escribes ¿B>A? saca ahora 2 líneas del rombo solo un poquito, justo después de una pones B > A en la otra B < A o bien pones SI y en la otra NO.... por la que pone si (B>A) contnúa la línea y haz que entre a otro rombo, al rombo hazle llegar otra línea pero ahora desde el círculo 'C', ponle la dirección de las flechitas... dentro del rombo este escribe ¿C>B? saca dos líneas y como antes escribes -----Si --------> y en la otra --------NO---------> al final de SI pones C>B>A en la que sale NO lllevas la línea hacia un 3º rombo.... ahora completa el resto de casos siguiendo el método....verás que hay 6 soluciones posibles y has necesitado 4 operaciones de comparación, para encontrar la respuesta, sea cuales sean los valores de A,B y C.
593
« en: Lunes 28 de Abril de 2008, 03:22 »
Para desactivarlo, identificando al proceso y matándolo...
Para activarlo ejecutas una llamada de shell al programa...
También puedes usar una llamada shell hacia el comando 'net start' ó 'net stop' Para probarlo abre una ventana de msdos y escribe los comandos susodichos: 'net start' si estaba cortado o 'net stop' si está en marcha.
594
« en: Lunes 28 de Abril de 2008, 03:19 »
Creo que tienes un error de conceptos, en .net decimal es un tipo de datos como lo es String y Object, lo que significa que tu no debes interpretarlos como que 'es para trabajar con decimales', el tipo de datos decimal especifica una precisión de dígitos bastante elevada (28 dígitos) de modo que no aparezca en notación científica después de ciertos digítos como sucede con single y double,
Cambia el tipo de datos de decimal a single... o bien a double.
595
« en: Lunes 28 de Abril de 2008, 03:01 »
Hola... no se hacen tareas, se ayuda a la gente a desarrollar el trabajo desde uno se quedó estancado...
Realiza aquello hasta donde tienes idea y te quedas colgado y luego se podrá orientar más adecuadamente.
De todas formas si haces una búsqueda por el foro este tema de contraseñas, seguramente encontrarás ejemplos, pués es un tema recurrente.
596
« en: Domingo 27 de Abril de 2008, 23:17 »
Es más cómod usar la función 'IsNumeric'. Esta función eválua una expresión y devuelve un valor buleano que indica si se puede tomar como número. entonces un código podría ser algo así como: static textoAnterior as boolean if IsNumeric(textBox1.text) then '... acciones que deseamos hacer textoAntiguo=textbox1.text else textbox1.text=textoAnterior end fi
La parte de 'else' no determina que sean sólo texto sólo que la expresión no puede valorarse como numérica, sin embargo puede aprovecharse para no repetir código añadiendo más cófigo y diferenciando la validación de cuando se pide valorar sólo números o sólo letras. En tonces el código enterior embebido en una función sería algo como: public function evaluar_TextoComo(modo as boolean, texto as string) as boolean dim resultado as boolean if IsNumeric(texto) then resultado=true else for k=0 to 9 If InStr(1, texto, cstr(k))<>0 Then exit function end if next resultado=true ' si no salió al llegar aquí, no se encontró números, es ok. end if evaluar_TextoComo=resultado and modo end function
En vb ila función 'IsStr' permite buscar una cadena dentro de otra, si se existe devuelve la posición donde empieza la coincidencia, por ellos usa 3 parámetros, el primero es para indicarle la posición del carácter desde el que queremos iniciar la búsqueda, los otros son la cadena donde buscar y la cadena que se busca... Nuestro amigo cpMario ha cometido un pequeño lapsus, ya que si le pasamos la cadena "0123456789" como cadena a buscar intentará encontrar ese texto exacto y no cualquiera de los caracteres que contiene, por ello es necesario usar un bucle o intentar otra función más compleja... No sé en 'gambas' pero visual Basic, hay que tener a veces cuidado con los puntos y las comas, ya que en español se usan de modo inverso al inglés y determinadas funciones pueden 'comportarse' de un modo no esperado. Si es el caso, conviene añadir código para controlarlo... Ignoro si en 'gambas' la función IsNumber' que utilizas determina sólo si es un valor numérico o si se puede interpretar como tal, si es el primer caso, puedes implementar la función 'IsNumeric' con una sencilla función como la siguiente: public function IsNumeric(texto as string) as boolean dim v as double on error goto noNumerable v= texto /2 isNumeric=true exit function noNumerable: 'sale con valor false if val(texto)<>0 then IsNumeric=true end function
El mecanismo de esta función se basa en que si no no se puede cuantificar como número se origina un error . hay 3 casos posibles: todo el texto sean números: ejmplo: "3456734", en los demás casos dará error, pero todavía se acptarán como válidos aquellos que empiecen por números. esto: "3456123" devolcerá true esto: "dfjghd999" devolverá false esto: "3456asjfht" devolverá true esto: "0" devolverá true
597
« en: Miércoles 23 de Abril de 2008, 11:33 »
Nota aclaratoria: al decir localsettings.fontsize en realidad estaba asignando a una estructura parcial datos tomados de la API getDeviceCaps con el parámetro 88 que es el correspondiente a los 'puntos por pulgada horizontales' (para no hacer engorroso el seguimiento omití la estructura, y el uso y declaración de la API, pero olvidé cambiar luego el 'palabro').
Y por 'factorE' sería una constante que coincidiría justo con el mismo dato cuando fue programado, entonces se entenderá mejor así:
si la fuente usada por el usuario es de 120 y la que se usó en diseño era de 96 el factor de escala será 120/96 =1'25, normalmente a ambos tipos se les suele llamar 'large fonts' y 'small fonts' aunque como sabes twindows permite puntos intermedios.
598
« en: Miércoles 23 de Abril de 2008, 00:56 »
Muchas gracias JuanK ... hasta ahora no lo había visto, realmente dudaba que alguien respondiera, ya los he descargado y los ojearé en cuanto tenga un tiempito libre....
Saludos.
599
« en: Miércoles 23 de Abril de 2008, 00:40 »
Este archivo no existe '$(DELLSelfRegisterEX)' entre otras cosas porque tiene caracteres prohibidos en VB para designar nombres de archivo.
Para comprobarlo abre una carpeta e intenta crear un archivo con dicho nombre verás que te dirá nombre con caracteres ilegales.
Si el nombre lo obtienes por alguna función asegúrate que le pasas la propiedad (variable) correcta y no el nombre de la función...
...hasta msftqws.pw es correcto (siempre que exista la ruta y erl archivo), y creo que sería el fin de la ruta... debes en algún lugar hacer una adición de cadenas probablemente...
Para verificar una ruta usa la función DIR... escribe dir pon el cursosr encima y pulsa la tecla 'F1'.
600
« en: Miércoles 23 de Abril de 2008, 00:32 »
Casi te has respondido tu mismo...
Si tu programa recoge los datos del usuario y luego hace un posible pronóstico... una vez que el médico certifique si el pronóstico es correcto, anotar que la inferencia sugerida dio positivo, a partir de tales datos... cuando el balance de esa inferencia partiendo de los mismos datos de un resultado psoitivo pongamos del 80% de aciertos (sobre una muestra x), lo añadiríamos a la base de datos como aceptada, si en cambio diera negativo, pero el acierto fuera aún superior al 50% lo añadíríamos a otra tabla en la que siempre se pediría aún algún dato más hasta que coincida con alguna inferencia ya positiva en la base de datos, si después de 'd' datos no es posible establecer una relación causa efecto, añadiríamos dicha propuesta a una tabla de 'necsita mejorarse' para que dé resultados...
Saludos.
Páginas: 1 ... 22 23 [24] 25 26 ... 29
|
|
|