![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
yo me equivoque, cambia la linea
por
te estaba agregando una sóla linea, por eso el error.
__________________
[Crandel] |
|
#2
|
|||
|
|||
Hola otra vez!!!![]() ¿Tendría que quedar más o menos asi? Es que me sale un error: "Incompatible types: 'TStrings' and 'String' " Código PHP:
P.D.: Y pensaba que se solucinaría facil todo este problema...... ![]() |
|
#3
|
||||
|
||||
|
Mmmmm... AddStrings requiere que el parámetro pasado sea un TStrings, por lo que Add es el método apropiado para el resultado de la función AdjustLineBreaks.
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#4
|
|||
|
|||
|
Solo comentar que usar AdjustLineBreaks antes de asignar los
textos a un TStrings es marear la perdiz, una perdida de ciclos de cpu ya que no es necesario. Un objeto TStrings o derivado de él como un TStringList o el mismo Lines de un TMemo, entiende perfectamente y separa las lineas de los textos que tengan solo el caracter #10 o solo el caracter #13. De modo que basta asignar el contenido al TStrings (con Add por ejemplo) y listo. Saludos |
|
#5
|
||||
|
||||
|
El problema es que con Add, lo agrega en una sóla linea a todo el texto.
El memo lo reconoce perfectamente, pero no se porque el StringList no. Dentro de un ratito lo pruebo y te comento
__________________
[Crandel] |
|
#6
|
||||
|
||||
|
Cita:
Otra es armando una funcioncita para poder usar AddStrings
Cita:
![]() Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#7
|
|||
|
|||
|
Cita:
Código:
List.Text:= List.Text + TextoRecibido. ya que se producen muchas conversiones de cadenas innecesarias. Es preferible ir concatenando el texto en un String normal, y una vez recibido todo el texto asignarlo una unica vez al TStringlist con un simple: Código:
List.Text:= TextoRecibidoCompleto; textos parciales recibidos y otro para acumular el total usando AddStrings. Código:
ListParcial.Text:= Socket.ReceiveText; ListTotal.AddStrings(ListParcial); de todos y el que consume menos memoria (no lo he comprobado en la practica, pero por la forma en que maneja delphi los strings y stringlists a priori es el metodo que menos conversiones y reasignaciones de memoria deberia usar). Saludos |
|
#8
|
||||
|
||||
|
Bueno KamiKaze,
aca con la ayuda de nuestros amigos delphi.com.ar y Mick, ya tenemos nuestra solución, proba entonces este código final:
Segun te entendí, recibís todo el texto de una sóla vez, o lo haces por partes?, si es por partes puedes probar la última alternativa de Mick. Termino siendo mas facíl de lo imaginado , lo que es ahogarse en un vaso de agua vacio , tantas vueltas por un simple fin de línea ![]()
__________________
[Crandel] |
|
#9
|
|||
|
|||
|
Solo una pequeñas correcciones, hay que destruir el objeto TStringList al final sino tendremos un memory leak bastante grave, ya que cada vez que se ejecute la funcion se creara un nuevo stringlist que no se destruira al salir de ella.
Código:
procedure TCliente_Ogame.ClientSocket2Read(Sender: TObject; Socket: TCustomWinSocket);
var
Lineas: TStringList;
begin
Lineas := TStringList.Create;
try
Lineas.Text := Socket.ReceiveText;
Edit1.Text := Lineas.Strings[13];
finally
Lineas.Free;
end;
end;
Tambien seria necesario asegurarse de que existe por lo menos 13 lineas en el texto recibido, si no en el caso de recibir menos datos dara un error al intentar acceder a una linea no existente. Saludos |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|