Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-06-2012
sac sac is offline
Miembro
 
Registrado: abr 2007
Posts: 109
Poder: 18
sac Va por buen camino
Parrafos de un Memo

Hola gente quería saber si alguno me puede guiar en algo que al principio parecia sencillo.
necesito cargar un txt en un memo pero necesito que al hacer un click sobre un párrafo cualquiera de ese txt, éste se vea en otro memo. Solamente el párrafo seleccionado no se si soy claro.
Desde ya gracias.
Responder Con Cita
  #2  
Antiguo 13-06-2012
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Un memo no tiene párrafos.

Se entiende "párrafo" como un texto con etiquetas "paragraph" típicamente usadas en RichEdits.

Para simular algo así, tendrás que buscar los caracteres #13 (salto de carro) y #10 (salto de línea) que normalmente vienen como #13#10 (ó $D$A en Hexadecimal, que seguro lo has visto en el depurador de Delphi). Puedes usar la función PosEx para buscar la primera ocurrencia y la siguiente de esos caracteres.

Es lo único que se me ocurre, a ver si alguien aporta algo mejor.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 13-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si es un memo "normal y corriente" entonces seguramente tendrá el $D$A en cada línea, por lo que habría que saber cómo es el texto que se va a procesar, lo mismo cada "párrafo" (en esta ocasión) tiene 2 saltos de línea (por decir algo) y entonces con buscar $D$A$D$A ya podría servir.
Digo yo, haría falta ver un ejemplo.
Responder Con Cita
  #4  
Antiguo 13-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola sac .

Como te menciona Lepe, el concepto de parrafo no se lleva bién con el TMemo.

No sé si te sirva captuar el mensaje EM_CHARFROMPOS y empezar a retroceder columnas y filas e intentar encontrar la secuencia CRLF inicial para tomar la cadena comprendida hasta la próxima. Según tengo entendido los saltos de línea no son almacenados en el buffer de texto del TMemo.

Algo que se me ocurre es considerar en el Memo1 cada línea como un párrafo.

Un ejemplo:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile('C:\ARCHIVO.TXT');
  Memo1.WordWrap:= False; // (una línea es un párrafo)
end;

procedure TForm1.Memo1Click(Sender: TObject);
begin
  Memo2.Lines.Add(Memo1.Lines[SendMessage(memo1.Handle, EM_LINEFROMCHAR, Memo1.SelStart, 0)]);
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 14-06-2012
sac sac is offline
Miembro
 
Registrado: abr 2007
Posts: 109
Poder: 18
sac Va por buen camino
Probando

Mmm está complicado no? Estoy probando lo que me aconsejaron.
Lo otro sería usar un archivo PowerPoint ver todas las diapositivas y cada diapositiva que se cliquea que aparezca en un memo pero obviamente creo que esto debe ser el doble de complicado. Sigo intentando.
Responder Con Cita
  #6  
Antiguo 14-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por sac Ver Mensaje
Mmm está complicado no?
No, no es que esté complicado, es que no tenemos el fichero para poder probar
Además de que no nos explicas los resultados de las pruebas que se te han comentado.

Y no sé a qué viene lo del powerpoint y diapositivas, ¿Pero de qué estamos hablando?

Como se dice hoy en día, nos falta feedback por tu parte
Responder Con Cita
  #7  
Antiguo 14-06-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No me queda claro eso de que los Memo no se llevan con los párrafos. Si en una hoja impresa hay párrafos, ¿cómo no los va a haber en un archivo de texto?

Para mi, un doble salto de línea ($0D$0A$0D$0A en Windows) marca el final de un párrafo.

Aquí una rutina para extrer el párrafo actual de un Memo. Seguro hay algún detalle que revisar.

Código Delphi [-]
uses StrUtils;

procedure ExtraeParrafo(Memo: TMemo; Parrafo: TStrings);
var
  S: String;
  I, A, B: Integer;

begin
  // Encontrar el final del párrafo
  S := Memo.Text;
  I := Memo.SelStart;
  B := PosEx(#$D#$A#$D#$A, S, I);

  if B = 0 then B := Length(S);

  // Encontrar el comienzo del párrafo
  S := ReverseString(S);
  I := Length(S) - (I + 1);
  A := PosEx(#$A#$D#$A#$D, S, I);

  if A > 0 then A := Length(S) - A;

  Parrafo.Text := Copy(Memo.Text, A, B - A);
end;

Ejemplo de uso:

Código Delphi [-]
// Extrae el párrafo actual de Memo1 y lo pone en Memo2
ExtraeParrafo(Memo1, Memo2.Lines);

// Saludos
Responder Con Cita
  #8  
Antiguo 15-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Para mi, un doble salto de línea ($0D$0A$0D$0A en Windows) marca el final de un párrafo.
Recién me desayuno con el doble salto de línea . ¡Con razón no podía detectar el #$D#$A como CRLF !...


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 15-06-2012 a las 05:39:51. Razón: ortografía
Responder Con Cita
  #9  
Antiguo 18-06-2012
sac sac is offline
Miembro
 
Registrado: abr 2007
Posts: 109
Poder: 18
sac Va por buen camino
No puedo correr ese código Roman.

Trate de correr el código de Roman con mi delphi 7 pero no reconoce la sintaxis en las lineas del Reversestring y posex... creo que tendría que funcionar perono puedo correrlo.
Responder Con Cita
  #10  
Antiguo 18-06-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Qué significa que no reconozca la sintaxis? ¿Qué error te marca? ¿Incluiste la unidad StrUtils en el uses?

// Saludos
Responder Con Cita
  #11  
Antiguo 20-06-2012
sac sac is offline
Miembro
 
Registrado: abr 2007
Posts: 109
Poder: 18
sac Va por buen camino
Roman perdona la ignorancia jeje. Me había olvidado de copiar el StrUtils en el uses asi y todo cuando compilo en la linea del codigo del procedure ExtraeParrafo me da como error Unsatisfied forward or external declaration. A que se puede deber?
Estoy entusiasmado con probarlo porque a priori parece que es lo que necesito.
Responder Con Cita
  #12  
Antiguo 20-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pon tu código fuente, seguramente no has declarado la función igual que la implementación.
Responder Con Cita
  #13  
Antiguo 21-06-2012
sac sac is offline
Miembro
 
Registrado: abr 2007
Posts: 109
Poder: 18
sac Va por buen camino
Gracias

Roman compilé el programa y agregué el código para buscar párrafos que subiste y anduvo de mil maravillas. Desde ya muchas gracias, solucionó gran parte de la aplicación que estoy desarrollando.
Nuevamente gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como obtener párrafos en un TMemo o bien en un TRichEdit AzidRain Varios 3 03-12-2011 09:48:25
manejo de parrafos con wordapplication pabloloustau Servers 2 24-02-2010 09:23:17
Justificacion de parrafos... MichelH Impresión 3 03-12-2008 04:15:42
Interlineado - espaciado de parrafos.. User_baja1 Varios 0 06-02-2006 17:17:28
Líneas y párrafos en RichEdit Tonio Varios 0 27-08-2003 18:50:21


La franja horaria es GMT +2. Ahora son las 21:04:48.


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
Copyright 1996-2007 Club Delphi