Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   reflejo de un memo en otro (https://www.clubdelphi.com/foros/showthread.php?t=68930)

sac 15-07-2010 16:42:13

reflejo de un memo en otro
 
Existe alguna manera de que lo que haga en un memo, cada acción se pueda copiar repetir en otro memo como si fuera un reflejo? (avanzar entre líneas, ir al principio, fin, subir bajar etc?)

Neftali [Germán.Estévez] 15-07-2010 17:17:21

En principio sí, pero no hay nada automático que lo haga.
¿Qué acciones desea "replicar"?

Deberás utilizar eventos de OnChange, para detectar cambios en el texto, y alguno de teclas y de Mouse (OnKeyDown y OnMouseDown) para los cambios provocados por el teclado y el Mouse, que no provoquen cambios en el texto (por ejemplo seleccionar una parte).

Deberías explicitar mejor qué acciones quieres "reflejar" en el segundo.

Caro 15-07-2010 17:38:44

Hola sac, como te dice Neftalí deberías explicar un poco mas. A mi se me ocurre hacerlo utilizando el evento OnKeyUp:

Código Delphi [-]
procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 Memo2.Lines.Assign(Memo1.Lines);
 Memo2.SelStart := Memo1.SelStart;
 Memo2.Perform(EM_SCROLLCARET, 0, 0);
end;

Saluditos

sac 16-07-2010 15:44:36

Les explico a los dos. Es algo muy manual y casero pero como no hay una opción en memos o richedit para darle el efecto sombra a las fuentes lo que hago es tratar de crear un memo transparente que contenga alguna fuente elegida y un segundo memo corrido unos pixeles mas abajo y mas a la derecha que copia la misma font y x defecto clara o oscura dependiendo cual se eligió en el memo 1 para contrastar pero el tema es que cuando voy bajando o subiendo leyendo el memo1 tendría que hacer lo mismo en el memo2.

Perdón me explico? en sintesis superponer dos memos y que el segundo hiciera lo mismo que el primero.

Espero alguna respuesta Gracias

Neftali [Germán.Estévez] 16-07-2010 16:08:31

Ok, ahora he entendido lo que quieres hacer y creo que te va a dar más problemas que otra cosa, hacerlo de esta manera.

Yo optaría tal vez por interceptar el redibujado de un Memo, pero el tema de sincronizar dos, lo veo complicado por la infinidad de cosas que vas a tener que controlar; El propio cursor, selección de porciones de texto, cortar/pegar, escritura de texto,...

Algunas de estas operaciones no se si te van a responder bien (tiempo aceptable), cuando el texto sea un poco grande...

sac 16-07-2010 16:20:28

Lo bueno deésto es que no tengo que cortar y pegar, ni seleccionar... Solamente es leer y rara vez escribir o borrar... además el texto no sería muy largo en todos los casos.

Qué te parece? Ésto ayudaría? de todas maneras como le indico al segundo la acción del cursor en el primer memo o si estoy subiendo o bajando cuando leo

Y que es eso del redibujado?

Neftali [Germán.Estévez] 16-07-2010 16:31:30

Cita:

Empezado por sac (Mensaje 370635)
Qué te parece? Ésto ayudaría? de todas maneras como le indico al segundo la acción del cursor en el primer memo o si estoy subiendo o bajando cuando leo

Y que es eso del redibujado?

EL problema de lo primero es que aunque no lo vayas a hacer, puede hacerse, de forma que si no lo controlas, si en algun momento haces CTRL+X + CTRL+V aquello va a parecer "una traca de feria", como se suele decir. :D

La acción del cursor tendías que controlarla usando las propiedades SetLength, SelStart,... El problema es cuando detectar el movimiento...
El tema de cuando subes y bajas líneas también es complejo y posíblemente más cuando tengas barra de scroll vertical y/o horizontal.

Son muchas cosas a controlar y de manera muy fina, porque no te puede descuadrar ni un sólo caracter, de otra forma la lectura sería imposible.

Con el redibujado, me refiero, a que algunas de estas operaciones sólo vas a poder controlarlas haciendo algo como esto:

Código Delphi [-]
Memo2.Text := Memo1.Text

Es decir, asignando TODO (o parte) del primer memo al segundo y eso cuesta de hacer; Aunque sea muy poco es posible que se vean parpadeos o efectos al escribir el texto (a eso me refiero con el "redibujado").

No e quiero desanimar, lo mejor es que hagas pruebas, pero hacerlo del modo que lo planteas, lo veo muy complejo, con muchas cosas a controlas y con "poca fiabilidad"; Creo que no es la forma correcta de enfocarlo (pero es una opinión personal).

Creo que sería más sencillo, como te he comentado, interceptar el procedimiento/mensaje de pintado (Paint() o WM_PAINT) e intentar implementar el pintado con sombra.


La franja horaria es GMT +2. Ahora son las 18:35:28.

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