Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Tomar lineas dentro de un Memo ?? (https://www.clubdelphi.com/foros/showthread.php?t=30098)

Coco_jac 08-02-2006 19:21:02

Tomar lineas dentro de un Memo ??
 
Hola amigos del foro, necesito saber, como puedo capturar lineas dentro de un memo, resulta q tengo que hacer una pequeña aplicacion donde el usuario ingrase una consulta SQl y se visualize , claro en otro control, pero me gustaria que solo se ejecutara las lineas selecionadas, bueno si es que estan seleccionadas si no todas, como pudo tomar solo este contenido si es el caso

gracias espero sus comentarios

roman 08-02-2006 19:37:01

¿Qué tal la propiedad SelText del Memo?

// Saludos

Coco_jac 08-02-2006 19:54:09

Hola Roman, probe eso , pero solo solo pude capturar la primera linea seleccionada...............hize esto

Código PHP:

 memo.SelText 


dec 08-02-2006 22:13:04

Hola,

Cita:

Empezado por Coco_jac
(...) solo pude capturar la primera linea seleccionada

Es extraño. Algo así me funciona a la perfección:

Código Delphi [-]
  if Memo1.SelLength > 0 then
    ShowMessage(memo1.SelText);

Es decir, primero se mira si hay texto seleccionado en el "Memo", y, si es así, se muestra el texto seleccionado... que puede ser una palabra, una o varias líneas e incluso todo el texto del "Memo"...

Coco_jac 08-02-2006 23:20:01

Hola disculpa, pero me habia equivocado je je je.
Mas bien quisiera saber como puedo saber si se ah seleccionado lineas en el Memo, bueno ahora estoy usando un RichEdit, pero necesito saber ese detalle .
A me olvidaba Lines en un Tstring, pero cuando tomo memo.SelText tengo un string??. pero me gustaria poder barrer lo seleccionado e decir cada una de las diferentes lineas que selecciono, es posible.

Espero sus comentarios.
Gracias

roman 08-02-2006 23:25:40

Mmmm, no. No, realmente no entendí nada. Ya no sé si quieres al Memo o no lo quieres, si quieres un RichEdit o no lo quieres. A ver, si lees en voz alta:

"A me olvidaba Lines en un Tstring"

¿entiendes algo?

Yo digo que te tomes un respirito, ordenes tus ideas y a la carga nuevamente ;)

// Saludos

Coco_jac 08-02-2006 23:49:02

Hola Roman, disculpa , creo que escribi tan rapido que no me di cuenta lo que decia, je je je.
Bueno cambie por un RichEdit porque se puede manejar formatos, cosa que me interesa, mi pregunta es saber, si se ha selecionado alguna linea en un RichEdit, estoy haciendo una pequeña aplicacion algo parecido aun analizador de consulta, pero algo simple nomas, pero me gustaria saber si el usuario selecciono determinadas lineas que solo quiere que se ejecute y no barrer todas las lineas.
Espero tus comentarios y disculpa las barbaridades anteriores :(

roman 08-02-2006 23:54:33

¡Pues viene a ser lo mismo! ¿SelText no funciona? Mira que al rato viene dec y te va a decir lo mismo que antes así que, ¿cuál es el problema con SelText?

// Saludos

dec 09-02-2006 05:08:23

Hola,

Efectivamente, los "TRichEdit" cuentan con sendas propieades "SelLength" y "SelText". La primera es de tipo "integer" y puede indicar si hay texto seleccionado en el "RichEdit", pero texto no significa línea, sino que puede seleccionarse una letra, varias, una palabra, una línea o varias de ellas.

Lo que obtendrás con "SelText" es justamente el texto seleccionado y, sí, es una propiedad de tipo "string", como puedes ver en el siguiente código (y en el de más arriba), puesto que "ShowMessage" requiere una variable de tipo "string", precisamente:

Código Delphi [-]
  if(RichEdit1.SelLength > 0) then
    ShowMessage(RichEdit1.SelText);

Lo que arriba puede leerse vendría a decir "si hay texto seleccionado en el "TRichEdit", por favor, muéstramelo". ;)

Estoy pensando si no te fuera mejor utilizar un componente como "TListBox", puesto que ahí sí se podría hablar propiamente de seleccionar "Items", a modo de "líneas". Pero, claro, no sé yo si este control se adaptaría a lo que precisas. ¿A ti qué te parece? ;)

roman 09-02-2006 07:14:24

Sigo sin entender cabalmente porqué no te gusta SelText. Por ejemplo, si hacemos

Código Delphi [-]
Memo1.Text := RichEdit1.SelText;

el memo tendrá el texto seleccionado en el richedit. ¿No basta eso? De hecho tendrá tantas líneas como tengas en la selección del richedit y puedes procesar las líneas del memo una a una con Memo.Lines.

Bueno, hay un punto a considerar. Si el richedit tiene su propiedad WordWrap en false, lo que dije arriba parece ser cierto, pero si WordWrap es true el concepto mismo de línea es relativo ya que depende del ajuste del texto según el tamaño del control. En este caso te peude servir el siguiente código:

Código Delphi [-]
var
  First, Last, I: Integer;

begin
  with RichEdit1 do
  begin
    First := Perform(EM_LINEFROMCHAR, SelStart, 0);
    Last := Perform(EM_LINEFROMCHAR, SelStart + SelLength, 0);

    for I := First to Last do
      Memo1.Lines.Add(Lines[i]);
  end;
end;

EM_LINEFROMCHAR es un mensaje que se manda al control de edición para determinar el número de línea (basada en cero) que ocupa el caracter con índice especificado (segundo parámetro de Perform). En este caso, no importa el tamaño en que pongas el control, en Memo.Lines obtendrás las líneas que ves en el richedit.

// Saludos


La franja horaria es GMT +2. Ahora son las 09:08:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi