Ver Mensaje Individual
  #4  
Antiguo 16-01-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 31
Lepe Va por buen camino
Pues si se puede hacer:
Código Delphi [-]
procedure TForm1.TheMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  var Fsub,tmp:TFont;

  procedure PintaFormula(const str:string; Fnormal, Fsubindice:TFont; C:Tcanvas);
  var Xpixel, i:Integer;

  begin
    Xpixel := 10;
    for i:=1 to Length(str) do
    begin
      if str[i] in ['0'..'9'] then
      begin
        C.Font.Assign(Fsubindice); // si es un número, lo tomo por subindice (no he visto formulas con superindece)
        C.TextOut(Xpixel,30,str[i]); //(pinto en la coordenada Y = 30, para que se vea más abajo y parezca un subindice
      end
      else
      begin
        C.Font.Assign(Fnormal); // es una letra, así que restauro la fuente del Tcanvas
        C.TextOut(Xpixel,20,str[i]); // pinto en la coordenada Y = 20 que es la normal
      end;
      Xpixel := Xpixel + C.TextWidth(str[i]); // guardo la coordenada X, la del siguiente carácter.
    end;
  end;
begin
  Fsub := TFont.Create; // creo una fuente para los subindices
  tmp := TFont.Create; // fuente del paintbox;
  tmp.Assign(PaintBox1.Canvas.Font);
  PaintBox1.Font.Size:= 12; 
  // le tengo que poner 12, porque la fuente que elegí tenía como tamaño mínimo
 // 8 por tanto, despues no deja decrementar la fuente

  Fsub.Assign(PaintBox1.Font);
  Fsub.Size:= Fsub.Size -2; // tamaño de subindice 2 puntos menor a la normal

  PintaFormula('K2SO4',tmp,Fsub,PaintBox1.Canvas);

 tmp.Free; // libero las fuentes
 Fsub.Free;
end;

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.
Responder Con Cita