FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Fórmulas químicas con Delphi
Hola,
Una consulta, esto me está pasando por novato, ¿Como puedo colocar un texto por código en un PaintBox, donde cada letra (casi) vienen o responden a un cálculo, y además colocar con diferentes TOPs? Bueno, lo que sucede es que por ejemplo quise emplear el uso de Labels en un principio, para cada uno, pero me complicaba cuando el texto a escribir era " " (nada) y aún así Delphi me dejaba un cierto espacio. Lo que requiero es que el texto salga UNIDO y sin espacios. Verán por ejemplo necesito mostrar (después de un cálculo) (como ejemplo) fórmulas químicas: K-2-S-O-4, Fe-''-Te-O-3, Na-''-Cl-O-'', Hice a propósito la separación con guiones para que se me entienda, pues en realidad no puedo mostrar en este post SUBÍNDICES de: K2SO4, FeTeO3 Y NaClO, notarán que en algunos no existe letras (Subíndices) y en otros el Símbolo es de dos letras (Na, Fe) a diferencia de Potasio=K. Mi pregunta para el Foro no es "La Química", es ¿Como colocar en un PaintBox esos textos donde cada letra "K", "Fe", "Te", etc (cada uno) que vienen de un cierto cálculo, y además mostrar nítidamente los subíndices que también vienen de otro cálculo, pero colocarlo en el PaintBox con diferente TOP y se note como subíndice? Gracias, estaré atento a vuestras sugerencias. Un Saludo. |
#2
|
|||
|
|||
No he entendido muy bien tu problema con los labels... Podrías explicarte mejor?
|
#3
|
||||
|
||||
En este hilo tienes algo simple:
http://www.clubdelphi.com/foros/show...near#post65920 En este otro un componente algo más sofisticado, el richview, yo uso la version gratis del mismo, aunque ahora no puedo decirte si acepta subindices superindices. http://es.trichview.com/ Otra opción sería pintar en un paintbox con cierta delicadeza.... ,me explico: Supongamos que tienes un paintbox con un alto de 60, empiezas a escribir a una altura de 40, si necesitas un subindices, continuas en la coordenada 55,dandóle a la fuente un tamaño menor, y ya tienes el subindice. Creo que con un simple Textout no puedes hacer el tamaño de letra más pequeña, pero puedes valerte de esto: No lo he probado, pero creo que podría llegarse a algo con esto. Por supuesto necesitas un canvas, ahora no recuerdo si el Paintbox lo tiene, supongo que si, sino... pues quizás el Tscrollbox u otro componente. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#4
|
||||
|
||||
Pues si se puede hacer:
saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 16-01-2006 a las 12:15:27. |
#5
|
|||
|
|||
Gracias Lepe!,
vuestras sugerencias los revisaré llegando a casa, estoy en un Cibercafe. Para Gunman: Hable de los Labels Unidos inicialmente para mostrar la FORMULA QUIMICA (digamos SALES). Realizo el cálculo de los subíndices, y le digo al programa si viene o no con paréntesis? o sea, por dar un par de ejemplos: K2SO4 (sin paréntesis) Fe2(SO4)3 (con paréntesis). Pero si volvemos a observar, por ejemplo en 'Fe2(SO4)3' los subíndices 2 y 3 NO SE VEN COMO SUBÍNDICES, y los paréntesis COMO que NO ESTÁN AL MEDIO. Por ello necesitaba dibujar cada Label ADYACENTE (unidos) cada uno pero con diferentes TOP. Ejemplo, después del cálculo para Fe2(SO4)3: - Primero alineo todos los TOP = 100 (a uno mismo) //E = Elemento, s1 = 1er subíndice, r1 = Radical, s2 = 2do subíndice, y s3 = 3er subíndice Label1.Caption:=E; Label1.left:= 50; //Elemento='Fe' Label2.Caption:=s1; Label2.left:= Label1.Left+Label1.width; Label2.Top:=110; //como subíndice(mas abajo)='2' Label3.Caption:='('; Label3.left:= Label2.Left+Label2.width; Label3.Top:=103; //mas abajito Label4.Caption:=r1; Label4.left:= Label3.Left+Label3.width; //Radical='SO' Label5.Caption:=s2; Label5.left:= Label4.Left+Label4.width; Label5.Top:=110; //como subíndice(mas abajo)='4' Label6.Caption:=')'; Label6.left:= Label5.Left+Label5.width; Label6.Top:=103; //mas abajito Label7.Caption:=s3; Label7.left:= Label6.Left+Label6.width; Label7.Top:=110; //como subíndice(mas abajo)='3' Esa era la idea, eso de los Left y Top, estoy adivinando ya que en este momento no tengo Delphi a mano, el mismo código lo estoy sacando de la cabeza a recordatorio por si notan errores. La situación es que cuando el programa calcule OTRO, por ejemplo para K2SO4, no existe paréntesis ni "algunos" subíndices, entonces tendré que indicarle: Label3.Width:=0; Label6.Width:=0; Label7.Width:=0; Ya que si coloco = ' ' (nada) Delphi aún así me coloca un cierto ancho para mostrame los Labels. ¡Todo bien pero............. al volver digamos a calcular el mismo: Fe2(SO4)3 Ya no me muestra los Labels '(' , ')' y '3' obvio porque anteriormente Width los puse a = 0 (cero) verdad?. De ahí nació mi pregunta en el Foro de como solucionar esta situación, por lo que crei conveniente mejor mostrar en un PaintBox. Revisaré el ejemplo de Lepe, aunque mi experiencia como novato no me queda claro todavía. ¿Alguna otra sugerencia? Gracias. |
#6
|
||||
|
||||
Deiv no tendrás problema, el código lo he compilado en Delphi 6 y no uso rutinas raras.
Simplemente coloca ese trozo de código en una ventana que tenga un paintbox1. A continuación pulsa CTRL + SHIFT + C, para que delphi autocomplete la clase. despues al evento OnMouseDown de la ventana le añades el evento TheMouseDown. hecho, al hacer clic en la ventana, fuera del paintbox, se pintará el K2SO4 con subindices. Básicamente el código ese, lo que hace es partir de dos fuentes distintas, una usada para escribir las letras y parentesis (Fnormal) y otra para escribir los subíndices(Fsubindice), solo se diferencian en el tamaño de la letra. Se analiza la tira de caracteres y si es un número, se usa la fuente de Subindices, además de ponerlo un poco más abajo....igual que haces tú con el top de los labels, yo lo hago mediante la coordenada Y = 20, Y = 30. Esto se hace con cada letra, así que ha de tenerse en cuenta que vamos avanzando una letra cada vez, para que la siguiente letra no se pinte encima de la anterior; esto se hace a través de la variable Xpixel. Si necesitas algo más, dinoslo saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Forever Loyal to Delphi | Delfino | Noticias | 1 | 24-12-2005 13:31:04 |
Formulas en Delphi | Fita | Varios | 1 | 05-11-2005 00:23:22 |
La increíble tecla F1 en Delphi | dec | Varios | 1 | 31-08-2005 22:26:45 |
Novedades en Delphi 2005 | Al González | Noticias | 12 | 04-12-2004 03:46:02 |
¿Cual es el futuro de Delphi? | Voutarks | Debates | 33 | 13-04-2004 19:29:08 |
|