FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Alguna forma más eficiente de enviar HTML al navegador-cliente ???
Hola foreros.
Estoy usando el componente TIdHTTPServer para enviar un formulario a un navegador y tengo el siguiente problema: El texto HTML lo almaceno en una variable tipo string y de ahí lo inserto en un stream con WriteBuffer() para enviarlo despues con AResponseInfo.ContentStream. El problema es que si mi cadena HTML es de 1000 caracteres por ej tengo que hacer este proceso 4 veces ya que el tipo string no me permite más de 255 caracteres. Hay alguna forma de hacerlo en un solo paso independientemente de lo largo que sea mi HTML. Nota: Mi HTML variará en tiempo de ejecución así que almacenar el texto en un archivo y cargarlo supongo que no es una posible solución Código:
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); begin stream1 := TStringStream.Create(str); if ARequestInfo.Params.Count = 0 then begin str :='<html><head><title>Formulario Nombre y Apellidos</title></head>'; stream1.WriteBuffer(str[1], length(str)); str := '<body><form enctype="text/plain">Introduce tu nombre:<input type="text" maxlength="10" size="10" name="nombre"> Introduce tu apellido:<input type="text" maxlength="10" size="10" name="apellido"><INPUT TYPE="SUBMIT" VALUE="Enviar"></form></body></html>'; stream1.WriteBuffer(str[1], length(str)); AResponseInfo.ContentStream := stream1; end end Un saludo |
#2
|
||||
|
||||
Hola,
Puedes hacerlo también tal que así, pudiendo asignar una cadena de más de 255 caracteres sin problemas:
|
#3
|
|||
|
|||
Cita:
[DCC Error] servidor.pas(45): E2056 String literals may have at most 255 elements De todas formas creo que mi problema va un poco más lejos porque aunque así se pudiera como la cadena HTML va a depender de los parámetros que yo recoja de otro formulario (un ejemplo podría ser recojer una fecha en un formulario y segúne esta mostrar una tabla con el més correspondiente) esta cadena la necesitaría modificar en mi código para ir añadiendo filas de la tabla html en cuestión. Y creo que esto no se podria hacer: Un ejemplo sin sentido: Código:
AResponseInfo.ContentText := '<HTML>'; AResponseInfo.ContentText := AResponseInfo.ContentText + '<HEAD>'; AResponseInfo.ContentText := AResponseInfo.ContentText + '</HEAD><BODY></BODY></HTML>'; Gracias. |
#4
|
||||
|
||||
Hola,
Pues lo de la limitación del número de caracteres me deja un poco parado. Creo que en Delphi, el tipo "string" no tiene esa limitación, sino que únicamente está limitado por la memoria disponible. En cuanto a usar una variable en donde ir guardando la cadena que al cabo asignes a la propiedad "ContentText", pues así es, nada te impide hacerlo de ese modo. A ver si algún otro compañero puede aportar algo más de información, sobre todo respecto del error que obtienes. |
#5
|
|||
|
|||
Mi versión de Delphi:
CodeGear™ Delphi® for Microsoft® Windows™ Version 11.0.2627.5503 Copyright © 2007 CodeGear™. All Rights Reserved. Código:
var a : string; begin a:='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'; end; [DCC Error] E2056 String literals may have at most 255 elements A mi no me permite mas de 255 en un string, no se si ¿habrá algún otro tipo que si se pueda??. |
#6
|
||||
|
||||
Hola,
Parece que el problema está en que no puede asignarse a una cadena, literalmente, más de 255 caracteres. Esto es, lo siguiente no es posible:
Pero, esto sí que lo sería:
De todas formas, parece que además de partir la cadena (como solución) podría también declararse la variable del tipo "AnsiString", de modo que ya no hubiera la limitación susomentada. Echa un vistazo aquí. |
#7
|
|||
|
|||
Muchas gracias David.
Me estoy ahorrando bastantes líneas de código. La concatenación de cadenas me vale de momento. He leido varios documentos en el link que me dejabas de docs.codegear.com y me ha quedado claro que el tipo AnsiString sería un puntero que reserva la memoria que haga falta para la cadena por lo tanto "no habría" limitación en la longitud. De todos modos aun declarando la variable como AnsiString el error sería el mismo, no se puede asignar directamente una cadena de más de 255 car. O al menos, no de esta forma: Código:
var s : AnsiString; begin s := 'Cadena de más de 255 car'; end |
#8
|
||||
|
||||
Así es, no depende del tipo de datos de la variable sino de la cadena en sí. Está documentado en la ayuda de delphi, si buscan "String Literals". No es posible poner una cadena literal con más de 255 caracteres. Esto, como ya mencionó dec, es independiente de la capacidad de almacenaje de un tipo string, que es mucho mayor.
// Saludos |
#9
|
|||
|
|||
Gracias, creí que con otro tipo si se podía pero me queda claro que no.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Alguna otra forma de pago? | Waldo | La Taberna | 21 | 23-08-2007 08:53:36 |
Forma eficiente de manejar arrays de 10'000.000 cuadrados | mamcx | OOP | 6 | 15-09-2006 21:01:12 |
Alguna recomendacion para incluir un navegador HTML?? | Moises22 | Internet | 15 | 07-10-2005 09:52:50 |
Como abrir un documento html en el navegador? | VivaLeon | Varios | 1 | 19-05-2005 18:12:32 |
Hay alguna forma? | jam888 | Firebird e Interbase | 2 | 06-10-2004 21:34:45 |
|