Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Necesito ayuda (como siempre)

Estas en el tema de Necesito ayuda (como siempre) en el foro de Visual Basic clásico en Foros del Web. Hola a todos, siento ser tan pesado. Vereis, no se si lo que pretendo hacer es muy complicado, pero quisiera saber lo siguiente: Teniendo un ...
  #1 (permalink)  
Antiguo 07/06/2005, 11:37
 
Fecha de Ingreso: junio-2005
Mensajes: 5
Antigüedad: 18 años, 11 meses
Puntos: 0
Necesito ayuda (como siempre)

Hola a todos, siento ser tan pesado. Vereis, no se si lo que pretendo hacer es muy complicado, pero quisiera saber lo siguiente:
Teniendo un texto en un textbox multiline (o cualquier otro objeto en que se pueda insertar un texto), ¿se puede elegir una palabra y sustituirla por un textbox para que el usuario escriba ahí la palabra que él cree que debería ir ahí? No se si me explico con claridad. Quiero colocar un textbox en el lugar que antes ocupaba una palabra en concreto.
Si podéis ayudarme os lo agradecería mucho. No sabéis las barbaridades que he probado ya.
Muchas gracias a tod@s.
  #2 (permalink)  
Antiguo 07/06/2005, 11:42
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Cita:
Iniciado por newton666
Hola a todos, siento ser tan pesado. Vereis, no se si lo que pretendo hacer es muy complicado, pero quisiera saber lo siguiente:
Teniendo un texto en un textbox multiline (o cualquier otro objeto en que se pueda insertar un texto), ¿se puede elegir una palabra y sustituirla por un textbox para que el usuario escriba ahí la palabra que él cree que debería ir ahí? No se si me explico con claridad. Quiero colocar un textbox en el lugar que antes ocupaba una palabra en concreto.
Si podéis ayudarme os lo agradecería mucho. No sabéis las barbaridades que he probado ya.
Muchas gracias a tod@s.
Supongamos que tienes en Text1 el Texto "Texto", y lo quieres reemplazar por el contenido de Text2, entonces el código sería:
Cita:
Texto1 = Text1.Text
Texto2 = Text2.Text
Mid(Texto1,1,Len(Texto1)) = Texto2
Text1.Text = Texto1
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 07/06/2005, 12:14
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por David el Grande
Supongamos que tienes en Text1 el Texto "Texto", y lo quieres reemplazar por el contenido de Text2, entonces el código sería:
Creo que se refiere a implementar un "Reemplazador" de una palabra dada por otra en un texto.

Simplemente un bucle que busque la cadena a reemplazar. Si la encuentra, se borra y se inserta en la posición la otra.
  #4 (permalink)  
Antiguo 07/06/2005, 12:23
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Cita:
Dim UlParada As Long
Dim Texto1 As String
UlParada = 1
Texto1 = Text2
Do
Buscar = InStr(UlParada, Text2, Text1)
If Buscar = 0 Then Exit Do
Mid(Texto1, Buscar, Len(Text1)) = Text3
Text2 = Texto1
Loop
En Text1 va el Texto de Búsqueda
En Text2 el Texto
En Text3 el texto por el cual se reemplazará si se encuentra

ok
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 08/06/2005, 11:22
 
Fecha de Ingreso: junio-2005
Mensajes: 5
Antigüedad: 18 años, 11 meses
Puntos: 0
Ya me parecía que no me estaba explicando del todo bien. No quiero reemplazar el contenido de un textbox por el de otro textbox. Quiero reemplazar una palabra de un texto por un control textbox. Es decir, si esto que escribo es el texto, quiero que en el lugar que ocupa la palabra "parecía" aparezca un textbox en el que yo tengo que escribir la palabra que creo que falta. Pero esto debe hacerse en tiempo de ejecución, porque la palabra sustituida será aleatoria. Siento no ser mas claro, pero es que el problema se las trae. Muchas gracias igualmente por la molestia. Un saludo a todos.
  #6 (permalink)  
Antiguo 08/06/2005, 13:35
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por newton666
Ya me parecía que no me estaba explicando del todo bien. No quiero reemplazar el contenido de un textbox por el de otro textbox. Quiero reemplazar una palabra de un texto por un control textbox. Es decir, si esto que escribo es el texto, quiero que en el lugar que ocupa la palabra "parecía" aparezca un textbox en el que yo tengo que escribir la palabra que creo que falta. Pero esto debe hacerse en tiempo de ejecución, porque la palabra sustituida será aleatoria. Siento no ser mas claro, pero es que el problema se las trae. Muchas gracias igualmente por la molestia. Un saludo a todos.
Digamos que si quieres que quede "bonito" y demás tendrás que crear controles en tiempo de ejecución... Pero en VB eso no "funciona así". Lo mejor sería hacer un control ActiveX que implemente lo que preguntas, pero no es sencillo. Y por último la mejor forma sería usando la API y creando ventanas en el propio TextBox como padre en la posición adecuada y demás... ¿Sabes manejar la API?
  #7 (permalink)  
Antiguo 08/06/2005, 18:16
Avatar de robertonavarro  
Fecha de Ingreso: octubre-2004
Mensajes: 72
Antigüedad: 19 años, 6 meses
Puntos: 1
Si no te importa que quede 'bonito' y optas por lo funcional unicamente, hay una opción más o menos fácil.
El texto lo puedes colocar en un objeto RichTextBox. Para seleccionar la palabra a remplazar, el usuario tendría que:
- Seleccionar del RichTextBox esa palabra
- Escribir en una caja de texto, que tu le proporciones para tal fin, la nueva palabra
-y oprimir un boton o alguna forma alternativa que se te ocurra para que se ejecuten las operaciones debidas, que serían:

1. Retomar y guardar en una variable el texto del RichTextBox que vá del inicio hasta la posición en la cual empieza la selección del usuario. La posición donde inicia la selección te la dá RichTextBox1.SelStart
2. Concatenarle a la variable el texto que el usuario quiere que remplace a lo ha seleccionado. Lo tomarías de la caja de texto que tu proporcionaste para ello.
3. Concatenarle a la variable el texto del RichTextBox que vá de donde finaliza lo que seleccionó el usuario hasta el resto del texto del RichTextBox. La posición que te indica donde termina la selección del usuario te lo da la resta: RichTextBox1.SelLength - RichTextBox1.SelStart
4. Remplazar lo que tengas en el RichTextBox por lo que obtengas de la variable.

¿Como tomar parte de una cadena y guardarla en la variable? Deberás usar la funcion Mid y la función Len. Supongo que sabes acerca de ello. Si no es así hazlo saber para detallarlo en la explicación.
  #8 (permalink)  
Antiguo 09/06/2005, 06:06
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por robertonavarro
Si no te importa que quede 'bonito' y optas por lo funcional unicamente, hay una opción más o menos fácil.
El texto lo puedes colocar en un objeto RichTextBox. Para seleccionar la palabra a remplazar, el usuario tendría que:
- Seleccionar del RichTextBox esa palabra
- Escribir en una caja de texto, que tu le proporciones para tal fin, la nueva palabra
-y oprimir un boton o alguna forma alternativa que se te ocurra para que se ejecuten las operaciones debidas, que serían:

1. Retomar y guardar en una variable el texto del RichTextBox que vá del inicio hasta la posición en la cual empieza la selección del usuario. La posición donde inicia la selección te la dá RichTextBox1.SelStart
2. Concatenarle a la variable el texto que el usuario quiere que remplace a lo ha seleccionado. Lo tomarías de la caja de texto que tu proporcionaste para ello.
3. Concatenarle a la variable el texto del RichTextBox que vá de donde finaliza lo que seleccionó el usuario hasta el resto del texto del RichTextBox. La posición que te indica donde termina la selección del usuario te lo da la resta: RichTextBox1.SelLength - RichTextBox1.SelStart
4. Remplazar lo que tengas en el RichTextBox por lo que obtengas de la variable.

¿Como tomar parte de una cadena y guardarla en la variable? Deberás usar la funcion Mid y la función Len. Supongo que sabes acerca de ello. Si no es así hazlo saber para detallarlo en la explicación.
Sí, pero eso ya lo habíamos dicho, el problema es que quiere que el recuadro para introducir la palabra aparezca justo donde quiere dentro del TextBox o RichYextBox o lo que sea.

Si no me equivoco, para hacer textos que haya que rellenar palabras, didácticos, de relleno de formularios o parecido.
  #9 (permalink)  
Antiguo 09/06/2005, 15:30
Avatar de robertonavarro  
Fecha de Ingreso: octubre-2004
Mensajes: 72
Antigüedad: 19 años, 6 meses
Puntos: 1
Si el problema es colocar la caja de texto en la que se va a poner la nueva palabra en el lugar de la palabra seleccionada, solo es cuestión de darle las coordenadas correspondientes.
Y hacerla visible o invisible según el evento. El evento MouseMove del RichTextBox te dirá la ubicación y una variable de control te indicará cuando debe ejecutarse cierto código. Mas o menos así:

Dim clic As Boolean

Private Sub RichTextBox1_Click()
clic = True
End Sub

Private Sub RichTextBox1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)

If clic Then
Text1 = ""
Text1.Visible = True
Text1.Top = y
Text1.Left = x
Text1.SetFocus
End If
clic = False
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then Text1.Visible = False
'...el resto del código va aquí...
End Sub

El text1 (que es el control en donde pones la nueva palabra) es invisible de inicio.
¿Cuando se llama al evento RichTextBox1_Click? Se llama justo cuando el usuario termina de seleccionar la palabra que quiere remplazar.
El codigo del evento Text1_KeyPress es simplemente para que el usuario haga enter despues de colocar la nueva palabra y esta remplace a la anterior (con el código ya antes expuesto)
Un detalle mas, el RichTextBox debe tener valores top=0 y left=0
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:27.