![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
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. |
|
#2
|
|||
|
|||
|
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. |
|
#3
|
||||
|
||||
|
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. |
|
#4
|
|||
|
|||
|
Lepe,
He probado tu código y funciona de maravilla, solo un par de preguntas más por favor, para mis pobres conocimientos no puedo deducir donde está el problema en: 1.- Ya sea tal como me enviaste: TForm1.FormMouseDown(..), ya sea que el código le coloco en un Button: TForm1.Button1Click(..), ¿no sé por qué razón responde SOLO al DOBLE CLICK? y no a UNO. 2.- Y si hago un tercer click este me vuelve a dibujar otro y se sobrepone cual si fuera un label con sombra. ¿A que se debe todo ello? Un saludo |
|
#5
|
||||
|
||||
|
Tienes razón debía haber posteado el código para un botón, pero no le dí importancia, usé un programa que tenía hecho, y el evento que más corage me dió fuel el mouseDown.
Quizás sin querer estes usando el evento DblClick del botón, que es el de doble clic, fijate porque la diferencia en el nombre es mínima. En cuanto a la sombra, antes de llamar a PintaFormula puedes añadirle: Paintbox1.Repaint; Ese efecto es normal. El Paintbox es un control para dibujar, pero cuando se necesite redibujar el control, por ejemplo, si pasas una ventana delante del explorador de windows por encima de tu programa, verás que el paintbox se borra, y la formula que había puede quedar parcialmente borrada. Lo que quiero decir, es que en el evento del PaintBox OnPaint, tienes que llamar a todo el código ese, para que se dibuje la fórmula cada vez que se tenga que redibujar el paintbox. Windows debe redibujar una ventana o los controles que tenga dentro, muy frecuentemente, y como no sabe lo que hay pintado en el PaintBox, debes decirselo tú, y redibujarlo a mano llamando a esa rutina. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#6
|
|||
|
|||
|
Hola,
Creo que me expliqué mal, ya que no quise decir doble click, sino que al hacer un solo click con el evento TForm1.Button1Click(..) no funciona, y solamente repitiendo (volviendo hacer un nuevo click) recién me muestra la fórmula. En otras palabras en el primer click no me responde, en el segundo sí ¿por qué? Estoy utilizando Delphi 7, tendrá algo que ver? Lo de la sombra lo probaré en cuanto llegue a casa, pero esta aparece después de mi tercer click, es decir: 1er click=nada, segundo click=fórmula, 3er click=con especie de sombra o montado mas abajo. Un saludo |
|
#7
|
||||
|
||||
|
acabo de ver un pequeño error relacionado con la sombra que comentas:
El tema está en que cambiaba la fuente del Paintbox, cuando en realidad quería cambiar la fuente del Paintbox1.canvas De ahí que no lo hiciera bien. En cuanto a los 3 clics de ratón ... ni idea, acabo de probarlo y me funciona correctamente desde un botón. Al evento Paint del Paintbox1, asignale tambien el evento del botón, con eso, siempre que haga falta repintarlo, se pondrá la formula, digamos que sería como un Label, algo persistente. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|