在qrdbtext的onprint事件里判断就可以了
解决方案 »
- 优先问题
- 如何获得tdxdbgrid当前行的行号?
- 有谁知道怎样才能怎样才能使在TDxDBGrid控件中,拖中右面的的滚动条向下时,使DBGRID中的原选中列定住,不随滚动条滚动
- FastReport怎样和ADO控件联用制作报表?我为什么总预览不出记录?哪位大侠能提供点原码?
- 打开excel文件的密码是多少啊!!急,拜托各位!得到答案马上结贴
- 插入的日期值为错误值?
- 开始学习delphi,散分交友!
- 很急的问题,在线等4小时
- adodataset 和 adotable 之间有那些区别
- 关于DELPHI现在还有学习的价值吗?讨论。。。
- delphi有没有人搞cgi?统计贴(Nizvoo)
- 请问各位:在登陆窗体中有如下一段代码,请问有何错误?
除非你在query的afterscroll事件中判断beizhu是否为空,然后再动态创建qrdbtext控件,否则在设计期放好的控件还是会存在和占用位置的
下面是我写的程序:
procedure Tfrm_gzt.preview;
var i,v_count:integer;
v_name:string;
v_code:string;
const lable='qrlable';
text='qrdbtext';
begin
v_sql_str:=v_sql_str+',A16,A34,A35';
qry_gzt.close;
qry_gzt.SQL.text:='select b.xm,a.gzh,'+v_sql_str+' from '+v_tablename+' a,'+v_zhigongname+' b'
+' where a.bh=b.bh order by a.bh';
qry_gzt.Open; qry_auto.Close;
qry_auto.SQL.Text:='select code,name from gzxxwh_zdb where code<>''BH'''
+' and code<>''A34'' and code<>''A16'' and code<>''A35'' and riqi='''+v_tablename+'''';
qry_auto.Open; v_count:=qry_auto.RecordCount;
for i:=0 to qry_gzt.FieldCount-1 do
begin
qry_auto.Close;
qry_auto.SQL.text:='select code,name from gzxxwh_zdb '
+' where code='''+qry_gzt.Fields[i].FieldName+'''';
qry_auto.Open;
v_name:=qry_auto.fieldbyname('name').asstring;
v_code:=qry_auto.fieldbyname('code').asstring;
if (v_code='A16') or (v_code='A34') or (v_code='A35') then
continue;
if v_name='' then
continue;
tQRLabel.Create(self).name:=lable+inttostr(i);
with (tqrlabel(findcomponent(lable+inttostr(i)))) do
begin
left:=v_width*i;
top:=10;
parent:=DetailBand1;
caption:=v_name;
alignment:=tacenter;
width:=v_width;
if (i>=v_column) and (i<v_column*2) then
begin
left:=v_width*(i-v_column);
top:=50;
parent:=DetailBand1;
caption:=v_name;
alignment:=tacenter;
end;
if (i>=v_column*2) then
begin
left:=v_width*(i-v_column*2);
top:=90;
parent:=DetailBand1;
caption:=v_name;
alignment:=tacenter;
end;
end;
tqrdbtext.create(self).Name:=text+inttostr(i);
with (tqrdbtext(findcomponent(text+inttostr(i)))) do
begin
left:=v_width*i;
top:=30;
parent:=DetailBand1;
caption:=v_name;
dataset:=qry_gzt;
datafield:=v_code;
alignment:=taRightJustify;
width:=v_width;
mask:='0.00'; if (i>=v_column) and (i<v_column*2) then
begin
left:=v_width*(i-v_column);
top:=70;
parent:=DetailBand1;
caption:=v_code; end;
if i>=v_column*2 then
begin
left:=v_width*(i-v_column*2);
top:=110;
parent:=DetailBand1;
caption:=v_code; end;
end;
qry_gzt.Next;
end;
tQRLabel.Create(self).name:=lable+inttostr(qry_gzt.fieldcount+1);
with (tqrlabel(findcomponent(lable+inttostr(qry_gzt.fieldcount+1)))) do
begin
left:=0;
top:=10;
parent:=DetailBand1;
caption:='姓名';
alignment:=tacenter;
end;
tqrdbtext.create(self).Name:=text+inttostr(qry_gzt.fieldcount+1);
with (tqrdbtext(findcomponent(text+inttostr(qry_gzt.fieldcount+1)))) do
begin
left:=0;
top:=30;
parent:=DetailBand1;
dataset:=qry_gzt;
datafield:='xm';
alignment:=tacenter;
end;
//打印说明项
v_count:=v_count+6;
tQRLabel.Create(self).name:=lable+inttostr(v_count+2);
with (tqrlabel(findcomponent(lable+inttostr(v_count+2)))) do
begin
left:=0;
if v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
begin top:=40*((qry_gzt.fieldcount-3)div(v_column)+1)+10;
end
else
begin
top:=40*((qry_gzt.fieldcount-3)div(v_column))+10;
end;
parent:=DetailBand1;
caption:='补资';
//alignment:=tacenter;
width:=30;
visible:=false;
end;
tqrdbtext.create(self).Name:=text+inttostr(v_count+2);
with (tqrdbtext(findcomponent(text+inttostr(v_count+2)))) do
begin
left:=40;
if v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
begin top:=40*((qry_gzt.fieldcount-3)div(v_column)+1)+10;
end
else
begin
top:=40*((qry_gzt.fieldcount-3)div(v_column))+10;
end;
parent:=DetailBand1;
dataset:=qry_gzt;
datafield:='A16';
width:=40*16;
onprint:=textprint;
alignment:=taLeftJustify;
end;
tQRLabel.Create(self).name:=lable+inttostr(v_count+3);
with (tqrlabel(findcomponent(lable+inttostr(v_count+3)))) do
begin
left:=0;
if v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
begin top:=40*((qry_gzt.fieldcount-3)div(v_column)+2)-10;
end
else
begin
top:=40*((qry_gzt.fieldcount-3)div(v_column)+1)-10;
end; width:=30;
parent:=DetailBand1;
caption:='扣款';
onprint:=textprint;
alignment:=taLeftJustify;
end;
tQRDBText.create(self).Name:=text+inttostr(v_count+3);
with (tQRDBText(findcomponent(text+inttostr(v_count+3)))) do
begin
left:=30;
if v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
begin top:=40*((qry_gzt.fieldcount-3)div(v_column)+2)-10;
end
else
begin
top:=40*((qry_gzt.fieldcount-3)div(v_column)+1)-10;
end;
width:=40*16;
parent:=DetailBand1;
dataset:=qry_gzt;
datafield:='A35';
alignment:=taLeftJustify;
left:=40;
onprint:=textprint;
end;
tQRLabel.Create(self).name:=lable+inttostr(v_count+4);
with (tqrlabel(findcomponent(lable+inttostr(v_count+4)))) do
begin
left:=0;
if v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
begin top:=40*((qry_gzt.fieldcount-3)div(v_column)+3)-30;
end
else
begin
top:=40*((qry_gzt.fieldcount-3)div(v_column)+2)-30;
end;
width:=30;
parent:=DetailBand1;
caption:='房租项';
//alignment:=tacenter;
end;
tQRDBRichText.create(self).Name:=text+inttostr(v_count+4);
with (tQRDBRichText(findcomponent(text+inttostr(v_count+4)))) do
begin
left:=30;
if v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
begin top:=40*((qry_gzt.fieldcount-3)div(v_column)+3)-30;
end
else
begin
top:=40*((qry_gzt.fieldcount-3)div(v_column)+2)-30;
end;
left:=40;
parent:=DetailBand1;
width:=40*16;
dataset:=qry_gzt;
datafield:='A34';
alignment:=taLeftJustify;
end;// DetailBand1.Height:=60*((qry_gzt.fieldcount)div(v_column)+1)-20*(qry_gzt.fieldcount)div(v_column)+90; if v_column* ((qry_gzt.fieldcount-3)div(v_column))<qry_gzt.fieldcount-3 then
begin DetailBand1.Height:=40*((qry_gzt.fieldcount-3)div(v_column)+1)+90;
end
else
begin
DetailBand1.Height:=40*((qry_gzt.fieldcount-3)div(v_column))+90;;
end;end;
工资号 姓名 工资 补资
0001 fjy
工资号 姓名 工资 补资
0001 fjy 560 123
工资号 姓名 工资
0001 fjy 560
象第二行补资没有,就不显示了
if xxx.asstring = '' then
对应的qrlabel.caption := ‘’;