请问,有什么方法可以实现“套打”-- 如电费单,本身有表格,只需要在固定位置打印某些内容,并走纸。
如果有控件推荐,则更好。
多谢!
如果有控件推荐,则更好。
多谢!
解决方案 »
- 急!D7写的软件在台湾,香港其他国家显示乱码问题
- Delphi中使用DBGrid修改数据表主键错误问题
- WideString与String的转换 急
- 关于从delphi向api函数中的指针参数传递实参的问题
- 急问,delphi查询语句如何写,谢谢!!!(见内)
- 瞧一瞧,看一看,有分相送,請求大力幫忙
- 请问在StringGrid中如何定义一个事件,让它在光标从某一行移动到另一行的时候触发。
- 关于oracle数据库中blob数据类型的保存问题????
- 问一个很笨的问题,在delphi7里怎样设计报表啊?
- 哪位大虾知道那里有较好delphi的源程序下载!必有重谢!
- 再开一贴,请同行帮忙,也是100分
- 新手请教fastreport赋值问题!
而使用QRLabel控件,且控件位置放於Page Header 中,Detail檔不放任何控件.頁面紙張設計
與套打紙張相同大小且位置相對齊.
在Detail的OnBeforePrint事件中寫數據賦值代碼及控制換頁,以下是我使用的代碼,僅參考:procedure TQRBaseRadioCount.DetailBand1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean); //開始打印
begin
QuickRep1.DataSet.First;
SetDataPrint;
While not QuickRep1.DataSet.Eof do
begin
QuickRep1.NewPage;
SetDataPrint;
end;
end;procedure TQRBaseRadioCount.SetDataPrint; //為QRLabel控件設置數據源
var I: Integer;
begin
For I:=17 to 56 do
TQRLabel(FindComponent('QRLabel'+IntToStr(I))).Caption := '';
I:=17;
while not QuickRep1.DataSet.Eof do
begin
TQRLabel(FindComponent('QRLabel'+IntToStr(I))).Caption := SetValue(QuickRep1.DataSet.FieldByName('Code_Type').AsString);
Inc(I);
TQRLabel(FindComponent('QRLabel'+IntToStr(I))).Caption :=SetPrint(FloatToStr(Round(QuickRep1.DataSet.FieldByName('YearTotal_Ratio_yet').AsFloat*1000)/1000),I);
Inc(I);
TQRLabel(FindComponent('QRLabel'+IntToStr(I))).Caption :=SetPrint(FloatToStr(Round(QuickRep1.DataSet.FieldByName('Total_Ratio_Befo').AsFloat*1000)/1000),I);
Inc(I);
TQRLabel(FindComponent('QRLabel'+IntToStr(I))).Caption :=SetPrint(FloatToStr(Round(QuickRep1.DataSet.FieldByName('Total_Ratio').AsFloat*1000)/1000),I);
Inc(I);
QuickRep1.DataSet.Next;
if I>=56 then Exit;
end;
end;Function TQRBaseRadioCount.SetValue(LableValue:String):String;
//處理在換行時漢字被拆成半個的情況
var s:string;
I:Integer;
Boo:Boolean;
begin
Result := '';
I:=1;
while Length(LableValue)-I>=0 do
begin
S:=copy(LableValue,I,1);
Result:=Result+S;
if I mod 24=0 then Boo:= True; //24為一行最多顯示的字符數
If Ord(s[1]) >=128 then
begin
Inc(I);
S:=copy(LableValue,I,1);
Result:=Result+S;
if I mod 24=0 then Boo:= True;
end;
if Boo then begin Boo:=False; Result:=Result+#13; end;
Inc(I);
end;
end;Function TQRBaseRadioCount.SetPrint(lableValue:String;INTOrder:Integer):String;
begin //處理值,當數值字段值為0則顯示為空
Result := '';
if INTOrder>104 then Exit;
if LableValue = '0' then LableValue:='';
Result := LableValue;
end;