由于显示的字段少,为了节省空间,一两列方式显示。现在我知道把QuickRep1.page.columns 设置成2,能够实现一两列方式显示,但是其中有一点它是先显示左边一列,显示满了,再显示右边一列,如果显示到右边时,只有几列的情况说浪费谈不上,但是报表不是很好看。
问一下,能不能这样显示:左边显示一行,右边显示一行,然后再左边显示一行,再右边显示一行。,这样下去,最终左右两边最多只能差一行,图例如下:
编号 名字 编号 名字
1 a 2 b
3 c 4 d
5 e
。。
请问这样的形式,quickrep1能不能实现?如何设置属性或程序?
最好给出具体实现方式。
问一下,能不能这样显示:左边显示一行,右边显示一行,然后再左边显示一行,再右边显示一行。,这样下去,最终左右两边最多只能差一行,图例如下:
编号 名字 编号 名字
1 a 2 b
3 c 4 d
5 e
。。
请问这样的形式,quickrep1能不能实现?如何设置属性或程序?
最好给出具体实现方式。
补足多余空行不是办法,我所要的是那种格式并且怎么来实现
to mrfanghansheng(☆☆☆木鱼☆☆☆)
你所说的缩纸,不合我意,因为我所要的A4纸,纸张大小已经固定,为了充分利用纸张的目的我想采用我所说的那种格式,题意我已经说明,先左后右的方式现在能够实现,但是要是采用左一右一的方式,怎么来实现?
function TPrintCardForm.PrintProc(aBingMa: Integer): string;
var
PDevice, PDriver, pPort: array[0..255] of Char;
hDMode: THandle;
PDMode: PDeviceMode;
Y: Integer;
vFlag: Integer;
i: Integer;
begin
vFlag := 0;
QryPatient.First;
while not QryPatient.Eof do
begin
if QryPatient.FieldByName('Selected').AsString = '√' then
begin
CreateTempTable;
with QryBm do
begin
First;
while not Eof do
begin
for i := 1 to FieldByName('ShuLiang').AsInteger do
begin
if vFlag = 0 then
begin
//获得打印机的DeviceMode结构句柄
Printer.GetPrinter(pDevice, pDriver, pPort, hDMode);
//如果句柄为0,表示打印机没有装载
if hDMode = 0 then
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(pDevice, pDriver, pPort, hDMode);
end;
if hDMode <> 0 then
begin
//根据TDeviceMode的句柄获得指向该结构的指针变量
PDMode := GlobalLock(hDMode);
if PDMode <> nil then
with PDMode^ do
begin
DMFields := DMFields or DM_PAPERLENGTH;
dmPaperLength := 700; //设置打印页长
dmFields := dmFields or DM_PAPERWIDTH;
dmPaperWidth := 2100; //设置打印页宽
end;
GlobalUnLock(hDMode); //解锁,释放内存
Printer.PrinterIndex := Printer.PrinterIndex;
end;
Printer.Canvas.font.Name := '宋体';
Printer.BeginDoc; //开始打印
Printer.Canvas.font.Size := 11;
Printer.Canvas.TextOut(50, 70,
QryPatient.FieldByName('XingMing').AsString);
Printer.Canvas.TextOut(200, 70,
QryPatient.FieldByName('ChuangHao').AsString);
Printer.Canvas.TextOut(250,70,
QryPatient.FieldByName('ZhuYuanHao').AsString);
Printer.Canvas.font.Size := 9;
Printer.Canvas.TextOut(350, 100,
'┌──┬──┬──┬──┬──┐');
Printer.Canvas.TextOut(350, 120,
'│ │ │ │ │ │');
Printer.Canvas.TextOut(350, 280,
'└──┴──┴──┴──┴──┘');
Printer.Canvas.TextOut(375, 115, '编号');
Printer.Canvas.TextOut(375, 140, '名字');
Y := 120;
Printer.Canvas.font.Size := 10;
with QryDoctorAdvice do
begin
First;
while not Eof do
begin
if FieldByName('BingMa').AsInteger =
QryBM.FieldByName('BingMa').AsInteger then
begin
Printer.Canvas.TextOut(5, Y,
FieldByName('YiZhuMS').AsString);
Printer.Canvas.TextOut(250, Y,
FieldByName('JiLiang').AsString);
Y := Y + 40;
end;
Next;
end;
end;
vFlag := 1;
end
else
begin
Printer.Canvas.font.Size := 11;
Printer.Canvas.TextOut(800, 70,
QryPatient.FieldByName('XingMing').AsString);
Printer.Canvas.TextOut(950, 70,
QryPatient.FieldByName('ChuangHao').AsString);
Printer.Canvas.font.Size := 9;
Printer.Canvas.TextOut(1080, 100,
'┌──┬──┬──┬──┬──┐');
Printer.Canvas.TextOut(1080, 260,
'│ │ │ │ │ │');
Printer.Canvas.TextOut(1080, 280,
'└──┴──┴──┴──┴──┘');
Printer.Canvas.TextOut(1105, 115, '编号');
Printer.Canvas.TextOut(1105, 115, '名字');
Y := 120;
Printer.Canvas.font.Size := 10;
with QryDoctorAdvice do
begin
First;
while not Eof do
begin
if FieldByName('BingMa').AsInteger =
QryBM.FieldByName('BingMa').AsInteger then
begin
Printer.Canvas.TextOut(750, Y,
FieldByName('YiZhuMS').AsString);
Printer.Canvas.TextOut(1000, Y,
FieldByName('JiLiang').AsString);
Y := Y + 40;
end;
Next;
end;
end;
Printer.EndDoc; //结束打印
vFlag := 0;
end
end;
Next;
end;
end;
end;
QryPatient.Next;
end;
if vFlag=1 then Printer.EndDoc; //结束打印
end;