Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda para escribir Símbolos Lógicos!!! (https://www.clubdelphi.com/foros/showthread.php?t=60742)

Shysu 12-10-2008 20:29:28

Ayuda para escribir Símbolos Lógicos!!!
 
Hola, tengo que hacer mi TFC en Delphi y ando bastante perdida, ya que llevo muchos años sin programar.

El caso es que la primera parte de mi TFC es un editor de fórmulas lógicas y se me ocurrió usar un RichEdit para que allí el usuario pueda escribirlas. El problema está a la hora de escribir los símbolos lógicos porque solamente se pueden escribir en el tipo de letra "Symbol". Tengo creados unos botones, cada uno para cada símbolo lógico (en el Caption de cada botón si que se ve correctamente el símbolo lógico), de manera que tú escribes una letra en el Richedit y cuando pulsas uno de los botones te añade el simbolo lógico y te lo deja preparado para seguir escribiendo letras en el tipo de letra que tenia. Tengo puesto el siguiente código en el evento OnClick de cada botón y no funciona (juro que en mi antiguo PC funcionó, pero ahora en el nuevo con Windows Vista no hay manera):

RichEdit1.SelAttributes.Name:='Symbol';
RichEdit1.Seltext:=RichEdit1.Seltext+'$'; /*Este simbolo al escribirlo en "Symbol" te escribe el símbolo "Existe" */
RichEdit1.SelAttributes.Name:='Courier New';
RichEdit1.SetFocus;

El caso es que cuando pulsas el botón no llega a cambiar el tipo de letra y claro te escribe el '$' en lugar del símbolo "Existe".

No se me ocurre otra manera de poder hacer el editor, a lo mejor existe otro componente que me facilitaría el tema de los símbolos lógicos, pero lo desconozco porque ya os digo que hace mucho que no programo nada y me he quedado un poco "obsoleta", jeje.

Por favor si a alguien se le ocurre algo que me lo diga, porque no paso de esta primera parte y claro no avanzo nada (y eso que esta primera parte es la fácil, jeje).

Un saludo y gracias de antemano
Su

coso 12-10-2008 22:55:13

Hola, tengo windows xp y tu codigo me funcionaba...¿has probado cambiando Richedit1.Font.Name segun lo necesites? Tambien puedes mirar si los nombres son exactamente esos y si asi estan registrados en Windows Vista...no se me ocurre nada mas de momento :confused:

Lepe 13-10-2008 12:31:21

Si coso dice que funciona, funcionará, pero teóricamente diría que no:
Código Delphi [-]
RichEdit1.Seltext:=RichEdit1.Seltext+'$';
 /*Este simbolo al escribirlo en "Symbol" te escribe el símbolo "Existe" */
RichEdit1.SelAttributes.Name:='Symbol';
RichEdit1.Sellength := 0;
RichEdit1.SelAttributes.Name:='Courier New';
RichEdit1.SetFocus;

Digo que teóricamente me suena mejor así:
- selecciono el texto
- cambio el tipo de letra
- deselecciono el texto
- restauro el tipo de letra.

Quizás después del SelLength habría que poner selStart := length(richedit1.lines.text) para que se desplace hasta el final el cursor... no sé.

Saludos

coso 13-10-2008 12:53:02

juas :D gracias pero...no no, me funcionaba su codigo en Windows XP, ni idea de en Windows Vista :confused:

Shysu 13-10-2008 13:51:00

Muchas gracias a los dos por contestar, voy a probar lo que me habeís dicho a ver si me funciona. Os diré algo, vale??

Un saludo
Su

Shysu 13-10-2008 20:18:07

Hola de nuevo, casi he conseguido que me funcione con el código que tenía. Bueno en realidad también debía funcionar antes, pero ahora me he dado cuenta de que la primera vez que se crea y activa el formulario (es el tercer formulario de la aplicación) cuando pincho en el botón del "Existe", me escribe el símbolo "$". Pero si lo selecciono de manera que se queda marcado en negro y vuelvo a dar al botón, pues me cambia el que había escrito y me escribe uno nuevo pero ya correctamente en el tipo de letra Symbol.
Si cierro esa ventana, vuelvo al formulario anterior y la vuelvo a abrir, ya si que me funciona bien desde el principio. Es como si el RichEdit ya se quedase bien. Probablemente necesite poner algo en el FormActivate o en el FormCreate. Ahora mismo tengo puesto lo siguiente:

procedure TForm3.FormActivate(Sender: TObject);
begin
RichEdit1.SetFocus;
RichEdit1.Text:='';
RichEdit2.Text:='';
RichEdit1.SelAttributes.Name:='Symbol';
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
RichEdit1.Text:='';
RichEdit2.Text:='';
RichEdit1.SelAttributes.Name:='Symbol';
end;

¿Creeis que está bien así? ¿Y por qué no cambia bien el tipo de letra la primera vez que se crea el formulario?

Gracias
Su

coso 13-10-2008 20:42:41

Hola, poniendo algo como
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
        RichEdit1.SelLength := 2;
end;
se soluciona. Creo que el problema viene de RichEdit1.SelAttributes.InitFormat(var format : TCharFormat). Me da que se llama a esta funcion la primera vez que se pega una seleccion, por lo que entonces tu primer $ no tendria aun los atributos correspondientes. Ni idea, solo se que con eso lo resuelves. Saludos.

Shysu 14-10-2008 17:42:52

Madre mia por fin me funciona, muchas gracias coso, con esto último que me has dicho me funciona perfectamente. He estado haciendo unas cuantas pruebas y de momento no me ha fallado ninguna. Voy a ver si continuo y si me surge alguna duda os consultaré de nuevo.

Muchas gracias
Su :)


La franja horaria es GMT +2. Ahora son las 19:53:17.

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