Fórum Simular Caracteres Expandidos/Condensados #178683
31/08/2003
0
Olá Pessoal,
Preciso alterar a largura dos caracteres de uma fonte qualquer sem alterar sua altura, ou seja, preciso simular caracteres expandidos e condensados de impressoras matriciais.
Nas impressoras matriciais podemos usar comandos para expandir ou condensar a largura dos caracteres: 5 cpi, 10 cpi, 17 cpi, etc... sem que isso altere a altura dos mesmos, preciso criar uma função para simular tal condição.
Tentei criar um objeto TBitMap no tamanho exato, (largura e altura), da série de caracteres inserir o texto com Canvas e depois copiá-lo com StretchDraw conforme segue:
Var
bitm: TBitMap;
txt: String;
pTxt, xx: Integer;
Begin
txt:=´Teste Ampliação de Caracteres´;
xx:=6;
bitm.Create;
bitm.Height:=Printer.Canvas.TextHeight(txt);
bitm.Width:=Printer.Canvas.TextWidth(txt);
bitm.Canvas.Font:=Printer.Canvas.Font;
bitm.Canvas.Font.Height:=bitm.Height;
bitm.Canvas.TextOut(0,0,txt);
pTxt := (bitm.Width * 10) div xx;
box1:=Rect(0,0,pTxt-1,bitm.Height-1);
Printer.Canvas.StretchDraw(box1,bitm);
End;
O funcionamento foi perfeito, (xx representa a largura dos novos caracteres em cpi), porém o tempo necessário para montar uma página de texto é enorme, alguém teria uma solução de como posso realizar tal tarefa de uma forma mais rápida?
Antecipadamente agradeço a ajuda.
Luiz A.Barreto
Preciso alterar a largura dos caracteres de uma fonte qualquer sem alterar sua altura, ou seja, preciso simular caracteres expandidos e condensados de impressoras matriciais.
Nas impressoras matriciais podemos usar comandos para expandir ou condensar a largura dos caracteres: 5 cpi, 10 cpi, 17 cpi, etc... sem que isso altere a altura dos mesmos, preciso criar uma função para simular tal condição.
Tentei criar um objeto TBitMap no tamanho exato, (largura e altura), da série de caracteres inserir o texto com Canvas e depois copiá-lo com StretchDraw conforme segue:
Var
bitm: TBitMap;
txt: String;
pTxt, xx: Integer;
Begin
txt:=´Teste Ampliação de Caracteres´;
xx:=6;
bitm.Create;
bitm.Height:=Printer.Canvas.TextHeight(txt);
bitm.Width:=Printer.Canvas.TextWidth(txt);
bitm.Canvas.Font:=Printer.Canvas.Font;
bitm.Canvas.Font.Height:=bitm.Height;
bitm.Canvas.TextOut(0,0,txt);
pTxt := (bitm.Width * 10) div xx;
box1:=Rect(0,0,pTxt-1,bitm.Height-1);
Printer.Canvas.StretchDraw(box1,bitm);
End;
O funcionamento foi perfeito, (xx representa a largura dos novos caracteres em cpi), porém o tempo necessário para montar uma página de texto é enorme, alguém teria uma solução de como posso realizar tal tarefa de uma forma mais rápida?
Antecipadamente agradeço a ajuda.
Luiz A.Barreto
Luiz A.barreto
Curtir tópico
+ 0
Responder
Posts
01/09/2003
Nigro
Esse procecdimento não vai dar certo mesmo pois o tempo gasto pelo canvas é porque para a impressora tudo aquilo são gráficos, não sei se ajuda mas tente colocar no seu relatório fontes nativas de impressora, mas creio que nem assim, pois como falei Canvas para a impressora é gráfico.
Nigro
Nigro
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)