
15/09/2009, 03:30
|
 | | | Fecha de Ingreso: julio-2006 Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 9 meses Puntos: 29 | |
Respuesta: escribir en textbox en cualquier linea por codigo Ahora que has puesto el ejemplo del GoToXY empiezo a recordar haberlo usado hace tiempo.
La cosa es que en VB creo que no existe.
Posiblemente con sendmessage se pueda hacer mejor, pero como no se usarlo te he creado una sub lo mejor y más simple que he sabido.
Para usarla simplemente la llamas con una línea así:
EscribeXY Columna, Linea, TextoAInsertar, NombreDelTextBox
Donde:
Columna y Linea pueden ser números o variables numéricas con valor 1 o superior
TextoAInsertar puede ser un texto entre comillas o una variable de cadena.
NombreDelTextBox debe ser el nombre del control textbox donde quieres escribir. De ese modo puedes usar la sub para escribir en cualquier textbox del programa.
Ejm:
EscribeXY 5, 10, "Esto se escribe", Text1
Espero que te aclares.
Private Sub EscribeXY(ByVal XColumna As Double, ByVal YLinea As Double, ByVal TextoAInsertar As String, TextBox As TextBox)
Dim Lineas() As String
If XColumna < 1 Or YLinea < 1 Then Exit Sub
On Local Error Resume Next
' aqui usamos 0 como primer elemento
' asi que restamos 1 a los valores X e Y
XColumna = XColumna - 1
YLinea = YLinea - 1
'creamos un array de lineas
Lineas = Split(TextBox.Text, vbCrLf)
' si no hay suficientes lineas las creamos
If YLinea > UBound(Lineas) Then ReDim Preserve Lineas(YLinea)
' si no se puede ir a la posicion X deseada se añaden espacios
If Len(Lineas(YLinea)) < XColumna Then Lineas(YLinea) = Lineas(YLinea) & Space(XColumna - Len(Lineas(YLinea)))
' incrustamos el texto en la línea marcada
Lineas(YLinea) = Left$(Lineas(YLinea), XColumna) & TextoAInsertar & Right$(Lineas(YLinea), Len(Lineas(YLinea)) - XColumna)
' y pasamos de nuevo las líneas al textbox
TextBox.Text = Join(Lineas, vbCrLf)
' PODEMOS ACABAR AQUI
' O PODEMOS MOVER EL CURSOR PARA QUE SE VEA
' EL CAMBIO SI LA LÍNEA NO ESTABA A LA VISTA
Dim F As Double
Dim Posicion As Double
For F = 0 To YLinea - 1
Posicion = Posicion + Len(Lineas(F)) + 2
Next F
TextBox.SelStart = Posicion + XColumna + Len(TextoAInsertar)
'---------------
On Local Error GoTo 0
End Sub
Creo que funciona bien. De momento no he encontrado fallos.
Saludos
PD: La he editado para reducirla y poner comentarios
PD2: Para que todo funcione bién hay que configurar el TextBox para...
Ser multilínea:
Text1.Multiline=True
Mostrar al menos la barra de desplazamiento horizontal para que no se partan las líneas para ajustarse al tamaño del TextBox:
Text1.ScrollBars=1
o las dos barras de desplazamiento:
Text1.ScrollBars=3
de otro modo parecerá que hay más líneas de las que realmente hay en el texto.
Y para que si seleccionas algo, no se deje de ver la selección cuando el foco pase a otro control:
Text1.HideSelection=False
Última edición por pkj; 15/09/2009 a las 05:13 |