請問動態切換印表機, 列印出來字體破碎 |
尚未結案
|
spencerkuo
一般會員 發表:21 回覆:34 積分:11 註冊:2003-08-15 發送簡訊給我 |
各位大大求救
請問
我動態create Tprinter 結果在列印的時候
(可以看我的source), 我是用動態的資料列印到各不同的印表機
但是如果切換列印太快的話, 列印出來的字會破碎
還有如果列印太長後面列印出來的行距會越來越大
聽說這是delphi的tprinter 的bug
可否介紹幾個比較好的printer 元件用用,
因為這樣列印出來真的是到了不能接受的程度了
我的程式碼如下
var
myprinter : Tprinter;
str :string;
i, j, v : integer myprinter := Tprinter.create;
if astring.Count > 9 then
for j := 1 to myPrinter.Printers.Count do
if uppercase(myPrinter.printers[j-1])= uppercase(cdsTemp2.fieldbyname('name').asstring) then
begin
myPrinter.PrinterIndex:=j-1;
with myprinter do
begin
BeginDoc;
Canvas.Font.Name:='細明體';
Canvas.Font.size:=10;
for i := 0 to astring.Count-1 do
begin
str := astring[i];
v := 0 (i * Canvas.TextHeight(astring[i]));
Canvas.TextOut(0,v,str);
EndDoc;
end;
end;
myprinter.free;
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
shieh2700
高階會員 發表:0 回覆:127 積分:100 註冊:2002-06-13 發送簡訊給我 |
1. EndDoc 的位置似乎怪怪的
2. begin 與 end 似乎無法匹配(不成對)
3. 由程式內容看來, 應該只會輸出至其中一台印表機
(這功能看來很眼熟, 你是寫 F&B 系統的嗎?) 僅供參考...
const pName : String = 'FinePrint'; //測試印表機 var aStr : TStrings; //輸出資料 i : Integer; //計數器 v : Integer; //縱座標 pIdx : Integer; //印表機序號 pFont : TFont; //輸出字體 begin //測試資料 Begin // aStr := TStringList.Create; for i := 0 to 10 do aStr.Add( '[' IntToStr(i) ']TEST' ); //測試資料 End // pFont := TFont.Create; pFont.Name := '細明體'; pFont.Size := 30; if aStr.Count > 9 then begin pIdx := Printer.Printers.IndexOf( pName ); if pIdx > -1 then begin with Printer do begin PrinterIndex := pIdx; BeginDoc; Canvas.Font := pFont; v := 0; for i := 0 to aStr.Count-1 do begin Canvas.TextOut( 0, v, aStr[i] ); Inc( v, Canvas.TextHeight( aStr[i] ) ); end; EndDoc; end; end; end; pFont.Free; aStr.Free; end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |