Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Imprimir letras de distintos colores con libreria printer (https://www.clubdelphi.com/foros/showthread.php?t=89214)

krewer 16-10-2015 14:20:10

Imprimir letras de distintos colores con libreria printer
 
Buenas amigos

Primera vez que estoy incursionando en el tema de impresiones en delphi, estoy haciendo un reporte en el cual imprimo el horario de una persona el cual se identifica por letras

A
B
C...

al momento de querer imprimir el documento me gustaría que cada letra apareciera con un color distinto

espero puedan ayudarme

Muchas Gracias

newtron 16-10-2015 17:28:06

Hola.

Si pusieras el código que estás usando ahora mismo te podríamos ayudar mejor.

Saludos

ecfisa 16-10-2015 18:16:17

Hola krewer.

Como bien te dice newtron, viendo el código vas a recibir respuestas mas concretas. Pero básicamente tenes que ajustar la propiedad Color de TFont.

Ejemplo:
Código Delphi [-]
...
const
  COLORS : array[0..2] of TColor = (clRed, clGreen, clBlue);
var
  prn : TPrinter;
  i   : Integer;
begin
  prn := TPrinter.Create;
  try
    prn.BeginDoc;
    for i := 0 to 2 do
    begin
      prn.Canvas.Font.Color := COLORS[i];
      prn.Canvas.TextOut(10, 10 + i * 150, Chr(Ord('A')+i));  // A, B, C
    end;
    prn.EndDoc;
  finally
    prn.Free;
  end;
end;

Saludos :)

krewer 16-10-2015 21:59:06

Cita:

Empezado por ecfisa (Mensaje 498056)
Hola krewer.

Como bien te dice newtron, viendo el código vas a recibir respuestas mas concretas. Pero básicamente tenes que ajustar la propiedad Color de TFont.

Ejemplo:
Código Delphi [-]
...
const
  COLORS : array[0..2] of TColor = (clRed, clGreen, clBlue);
var
  prn : TPrinter;
  i   : Integer;
begin
  prn := TPrinter.Create;
  try
    prn.BeginDoc;
    for i := 0 to 2 do
    begin
      prn.Canvas.Font.Color := COLORS[i];
      prn.Canvas.TextOut(10, 10 + i * 150, Chr(Ord('A')+i));  // A, B, C
    end;
    prn.EndDoc;
  finally
    prn.Free;
  end;
end;

Saludos :)

Código Delphi [-]
Printer.Orientation := poLandscape;
  Printer.BeginDoc;

  Printer.Canvas.Pen.Width := 5;
  Printer.Canvas.Font.Name := 'Times New Roman';
  Printer.Canvas.Font.Size := 12;

  Linha := 20;
  Coluna:= 20;
  Tamanho := Printer.Canvas.TextWidth('a');
  Fdata.Query_print.First;
  while not fdata.Query_print.Eof do
  begin
    if Linha = 20 then
    begin
      Coluna := 20;
      Printer.Canvas.TextOut(20,Linha,'Horario');
      Linha := Linha - Printer.Canvas.Font.Height + 25 ;
      Printer.Canvas.TextOut(Coluna,Linha,'Nombre');
      Coluna:= Coluna + (Tamanho * 30 );
      Printer.Canvas.TextOut(Coluna,Linha,'RUT');
      Coluna:= Coluna + (Tamanho * 20);

      Printer.Canvas.TextOut(Coluna,Linha,'1');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'2');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'2');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'3');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'4');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'5');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'6');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'7');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'8');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'9');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'10');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'11');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'12');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'13');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'14');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'15');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'16');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'17');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'18');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'19');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'20');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'21');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'22');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'23');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'24');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'25');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'26');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'27');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'28');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'29');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'30');
      Coluna:= Coluna + (Tamanho * 3);
      Printer.Canvas.TextOut(Coluna,Linha,'31');
      Coluna:= Coluna + (Tamanho * 3);


      Linha := Linha - Printer.Canvas.Font.Height + 30 ;
    end;
    Coluna := 20 ;



    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('nombre').AsString);
    Coluna:= Coluna + (Tamanho * 30 );
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('rut_t').AsString);
    Coluna:= Coluna + (Tamanho * 20);

    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d1').AsString);
    Coluna:= Coluna + (Tamanho * 3);

    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d2').AsString);
    Coluna:= Coluna + (Tamanho * 3);

    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d3').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d4').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d5').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d6').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d7').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d8').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d9').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d10').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d11').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d12').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d13').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d14').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d15').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d16').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d17').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d18').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d19').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d20').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d21').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d22').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d23').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d24').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d25').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d26').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d27').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d28').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d29').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d30').AsString);
    Coluna:= Coluna + (Tamanho * 3);
    Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d31').AsString);
    Coluna:= Coluna + (Tamanho * 3);




    Linha := Linha - Printer.Canvas.Font.Height + 5 ;
    Fdata.Query_print.Next;
    if Linha > Printer.PageHeight-20 then
    Begin
      Printer.NewPage;
      Linha := 20;
    end;

ecfisa 16-10-2015 22:35:45

Hola krewer.

No se a que partes de la salida de tu código deseas agregarle colores, pero supongamos que deseas poner en color rojo la siguiente línea:
Código Delphi [-]
Printer.Canvas.TextOut(20,Linha,'Horario');
Basta con que hagas:
Código Delphi [-]
   Printer.Canvas.Font.Color := clRed;
   Printer.Canvas.TextOut(20, Linha, 'Horario');
Otro ejemplo, si deseas la letra 'H' en color rojo y el resto ('orario') en color azul, harías:
Código Delphi [-]
  Printer.Canvas.Font.Color:= clRed;
  Printer.Canvas.TextOut(20, Linha, 'H');
  Printer.Canvas.Font.Color := clBlue;
  Printer.Canvas.TextOut(20 + Printer.Canvas.TextWidth('H'), Linha, 'orario');

Saludos :)

krewer 17-10-2015 15:20:21

Cita:

Empezado por ecfisa (Mensaje 498070)
Hola krewer.

No se a que partes de la salida de tu código deseas agregarle colores, pero supongamos que deseas poner en color rojo la siguiente línea:
Código Delphi [-]
Printer.Canvas.TextOut(20,Linha,'Horario');
Basta con que hagas:
Código Delphi [-]
   Printer.Canvas.Font.Color := clRed;
   Printer.Canvas.TextOut(20, Linha, 'Horario');
Otro ejemplo, si deseas la letra 'H' en color rojo y el resto ('orario') en color azul, harías:
Código Delphi [-]
  Printer.Canvas.Font.Color:= clRed;
  Printer.Canvas.TextOut(20, Linha, 'H');
  Printer.Canvas.Font.Color := clBlue;
  Printer.Canvas.TextOut(20 + Printer.Canvas.TextWidth('H'), Linha, 'orario');

Saludos :)

Muchas gracias

Pero en si a la parte del codigo que quiero colocarle colores independiente es a esta

Código Delphi [-]
Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d1').AsString);
Coluna:= Coluna + (Tamanho * 3);

Hice como me indicaste, pero por ejemplo si coloco esto asi

Código Delphi [-]
printer.Canvas.Font.Color:=clRed;
Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d1').AsString);
Coluna:= Coluna + (Tamanho * 3);

Me cambia todas las letras a rojo y no solo esa

krewer 17-10-2015 15:27:04

Cita:

Empezado por krewer (Mensaje 498077)
Muchas gracias

Pero en si a la parte del codigo que quiero colocarle colores independiente es a esta

Código Delphi [-]
Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d1').AsString);
Coluna:= Coluna + (Tamanho * 3);

Hice como me indicaste, pero por ejemplo si coloco esto asi

Código Delphi [-]
printer.Canvas.Font.Color:=clRed;
Printer.Canvas.TextOut(Coluna,Linha,Fdata.Query_print.FieldByName('d1').AsString);
Coluna:= Coluna + (Tamanho * 3);

Me cambia todas las letras a rojo y no solo esa

ecfisa, ya lo solucione, estaba confundido, muchas gracias me sirvio bastante tu ayuda :D:D:D:D:D:D


La franja horaria es GMT +2. Ahora son las 03:25:24.

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