Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Mal Memo y retorno de Carro al final. (https://www.clubdelphi.com/foros/showthread.php?t=66652)

Carmelo Cash 05-03-2010 04:01:58

Mal Memo y retorno de Carro al final.
 
Hola foro:

El problema es el siguiente: Escribo en un memo, por ejemplo:

AAAAAAAAAAAA
BBBBBBBBBBBB
CCCCCCCCCCCC

Pero después de CCCCCCCCC "no aprieto [Enter]",entonces el texto queda así:

AAAAAAAAAAAA
BBBBBBBBBBBB
CCCCCCCCCCCC| <- Con el cursor ahí !!!.


Ahora bién, luego en la rutina de impresión se imprime perfecto.

El promlema es que si edito ese registro, al traer el texto y cargralo en el Memo me queda así:

AAAAAAAAAAAA
BBBBBBBBBBBB
CCCCCCCCCCCC
| <- Con el cursor ahí !!!.

O sea que le agrega un retorno de carro al final, y cada vez que lo cargo se agrega un retorno de carro. Puedo borrar todos los que se agreguen menos el último.

¿Cómo puedo eliminar este retorno de carro que se agrega al final?

Más abajo les muestro cómo hago para grabar y leer.

Desde ya muchas gracias por su atención.

Para guardar un memo hago lo siguiente:

Código Delphi [-]
procedure TF_Periodos.Guardo_Modificacion;
var
MS1 : TMemoryStream;
begin
  MS1 := TMemoryStream.Create;
  try
    Memo1.Lines.SaveToStream(MS1);
    with D_Periodos.Q_Update do begin
      ParamByName('P_OBSERVACIONES1').LoadFromStream(MS1,ftBlob);
      ExecSQL;
    end;
  finally
    ms1.Free;
  end;
end;


Para Leer hago:

Código Delphi [-]
 Memo1.Lines.Clear;
 Memo1.lines.Add(D_Periodos.Q_Periodo.FieldByName('OBSERVACIONES1').AsString);

Estoy utilizando Delphi 7 + InterBase.

BrunoBsso 05-03-2010 06:56:09

Siempre que agregues algo a un TMemo se va a agregar un renglón vacío, para permitirte agregar otro elemento.
Una solución bastante simple que te puedo ofrecer es:
Código Delphi [-]
procedure TStrListToListBox(StrList:TStringList; var LB:TListBox);
var
  I:Integer;
begin
  for I := 0 to StrList.Count-1 do
    LB.Items.Append(StrList.Strings[i]);
end;

procedure GetMemoSinVacios(Memo:TMemo; var L:TStringList);
{ESTE PROC SE ENCARGA DE CREAR LA LISTA Y AGREGAR TODOS LOS ELEMENTOS
 SIN AGREGAR EL ELEMENTO FINAL QUE SERÍA UN RENGLÓN VACÍO}
var
  I:Integer;
begin
  L:=TStringList.Create;
  for I := 0 to Memo.Lines.Count-1 do
    L.Add(Memo.Lines.Strings[i]);
end;

procedure TForm1.Button1Click(Sender: TObject);
{ESTE PROC USA UN MEMO1 PARA CARGAR DATOS Y LOS DEVUELVE EN UN
 LISTBOX1 USANDO EL PROC GetMemoSinVacios}
var
  L:TStringList;
begin
  GetMemoSinVacios(Memo1,L);
  TStrListToListBox(L,ListBox1);
end;
Espero que se entienda y te sirva.
Puede ser que haya mejores soluciones, pero yo siempre utilizo esto para ese problema.
Saludos!

Caro 05-03-2010 14:24:02

Hola Carmelo, prueba esto:

Código Delphi [-]
  Aux := Memo1.Text;
  Delete(Aux, Length(Aux)-1, 2);
  Memo1.Text := Aux;
  Memo1.SelStart := Length(Memo1.Text);
  Memo1.SetFocus;

Saluditos

roman 05-03-2010 16:40:52

Cita:

Empezado por Carmelo Cash (Mensaje 355699)
¿Cómo puedo eliminar este retorno de carro que se agrega al final?

Es curioso, a mi no me sucede esto de la línea en blanco extra :confused:. En todo caso, también puedes intentar esto:

Código Delphi [-]
Memo1.Text := TrimRight(Memo1.Text);

Con esto quitarás cualquier espacio en blanco al final, lo que incluye, tabuladores y retornos de carro.

// Saludos

Carmelo Cash 06-03-2010 23:38:37

Listo. Gracias
 
Utilicé la solucion propuesta por Caro y quedó 10 puntos.

La propuesta de Roman también funciona, pero no te permite dejar renglones en blanco al final si así deseas hacerlo.

Gracias Bruno, Caro y Roman.:cool:


La franja horaria es GMT +2. Ahora son las 06:49:01.

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