PDA

Ver la Versión Completa : Como poner el cursor al inicio de un TMemo


Javi2
22-06-2005, 09:57:38
Hola, tengo un Memo que se va cargando dinámicamente con distinta información dependiendo del artículo seleccionando. El problema es que cuando selecciono un artículo que tiene muchas líneas de información y no caben todas en la parte de memo visible, se queda visualizando la última parte de la información ya que el scrollbar se ha ido desplazando hacia abajo conforme he añadido la información.

¿ Cómo puedo hacer para que una vez cargada la información, me la muestre desde el principio (de manera que el texto que no se vea sean las últimas líneas) ?

He probado con la propiedad SelectStart pero como el MEmo no tiene el foco (y no quiero que lo tenga) no me hace ni caso.

Gracias.

rK-Neo
22-06-2005, 10:00:38
y pq no le pones el foco al memo, aces el Memo1.SelStart y dspues l pasas el foco a lo k tu kieras...

Javi2
22-06-2005, 10:32:51
Es que el problema es que la lista de artículos los tengo en un Grid y la información en el Memo la muestro a partir de la línea del Grid seleccionada. ¿Al darle el foco al Memo y después volverselo a dar al Grid me seleccionara la misma fila que tenía antes? ¿Cómo puedo hacer esto?

hermes_32
22-06-2005, 11:27:00
Hola Javi2,

sería mejor si utilizases un RichEdit.

Un saludo

dec
22-06-2005, 11:28:20
Hola,

Prueba con algo así:


Memo.Lines.BeginUpdate;
Memo.Lines.Add('una nueva línea');
Memo.Lines.EndUpdate;


Consigues, en efecto, lo que precisas: también puedes conseguirlo si en lugar de añadir "strings" al Memo añades "TStrings".

roman
22-06-2005, 16:17:41
Aquí el problema no está en si el memo tiene o no el foco. SelStart := 0 realmente pone el cursor en el primer caracter como podrás comprobar si después la instrucción cambias el foco al memo (no con el ratón sino con TAB) y oprimes la tecla de movimiento a la derecha. En ese momento las líneas del memo se desplazan para reflejar la posición del cursor.

El problema está justamente en que la sola instrucción SelStart := 0 no desplaza las líneas.

Pon

Memo1.Perform(EM_SCROLLCARET, 0, 0);

después de SelStart y obtendrás lo que quieres.

Nota BeginUpdate y EndUpdate no ayudan para este problema específico. Estas instrucciones sirven para que los cambios en las líneas del memo no se visualicen sino hasta que terminen de adicionarse todas. Pero aún así, el cursor termina al final del memo.

// Saludos

dec
22-06-2005, 16:40:13
Hola,

roman, lo que yo creo que ocurre es que la pregunta está mal formulada, porque, no es lo mismo:


Como poner el cursor al inicio de un TMemo
Que...


¿Cómo puedo hacer para que una vez cargada la información, me la muestre desde el principio (de manera que el texto que no se vea sean las últimas líneas)?
No está diciendo nada del cursor, ni de la posición del cursor... de hecho el problema estaba en que no se mostraran las últimas líneas añadidas, sino las primeras... Es por eso que no puedo estar de acuerdo contigo.

Quiero decir, que, aunque tu solución pueda ser más acertada, en este caso, precisamente, el uso de BeginUpdate y EndUpdate parecen servir, puesto que cumplen con el objetivo, que no es situar el cursor al inicio del Memo, pero que se vean sus primeras líneas, y no las últimas añadidas.

O sea. Uno va añadiendo líneas al Memo, y la ScrollBar se va desplazando según es menester para mostrar las últimas líneas... no se trata, pues, de poner el cursor al inicio del Memo, sino de evitar este comportamiento...

En todo caso creo que el compañero podrá solucionar el problema siguiendo alguna de las indicaciones que se le han ofrecido aquí.

¿Eh? ¿Qué te parece roman? :)

roman
22-06-2005, 16:51:21
Tienes razón. Las líneas no se desplazan y quizá esto le baste aun cuando el cursor sí que queda al final y apenas quiera moverse por el memo se desplazará hasta el final.

// Saludos

roman
22-06-2005, 16:57:44
No está diciendo nada del cursor, ni de la posición del cursor...

Je, je, se me estaba yendo. ¿Cómo que no dice nada? ¿Ya leiste el título del hilo?

Como poner el cursor al inicio de un TMemo

;)

// Saludos

dec
23-06-2005, 00:57:03
Hola,

No, roman; sí que en el título hace referencia justamente a lo que tú contestante perfectamente: pero por eso digo yo que creo que la pregunta/título está mal planteada, porque luego lo que se deja entender es que se quiere que el Memo muestre las primeras líneas y no las últimas que se añadan, y esto ya es algo que no tiene que ver con la situación del cursor...

En cualquier caso insisto que el compañero habrá obtenido suficiente información como para solucionar su problema. Y una cosa que se me quedó antes sin decir: no me des la razón que debe ser una cosa muy pesada que no sé yo si estoy dispuesto a soportar ;)