想打印窗体上一个panel上面的一些label控件的caption,如何实现左转/右转打印输出 ( 积分: 100 )

  • 主题发起人 主题发起人 xuegaoyili
  • 开始时间 开始时间
X

xuegaoyili

Unregistered / Unconfirmed
GUEST, unregistred user!
如题:想把一个panel上面的一些label控件设置好caption后,进行打印,通过设置打印机
可以实现横/竖两种打印方式,现在是想要实现打印输出为左转后打印,右转后打印..
我认为可能需要得到panel上面的label的位置自己生成一个图像,然后通过旋转图像达到
目的.....但现在不知道如何生成这个能表现panel上面label位置的图像....请指点一下
 
如题:想把一个panel上面的一些label控件设置好caption后,进行打印,通过设置打印机
可以实现横/竖两种打印方式,现在是想要实现打印输出为左转后打印,右转后打印..
我认为可能需要得到panel上面的label的位置自己生成一个图像,然后通过旋转图像达到
目的.....但现在不知道如何生成这个能表现panel上面label位置的图像....请指点一下
 
还有一点.panel上面还有一些图像image控件显示图片,我希望生成的图中没有image中的图片,只是一个以白色为底,以panel上面的label对应位置画上对应的文字成为图
 
我原来也碰到了这样的功能,后改用FR来完成了,在报表里设置比这个要方便多了.何必这么麻烦呢??
 
楼上说的方法可以的
 
用FR能实现右转和左转吗
 
写得比较匆忙,下面的代码是把panel的东西,画到一个image里面去,你可以用下面的bmp变量,是内存里面的一幅图片,怎么处理都可以
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
Panel2: TPanel;
Image1: TImage;
Button2: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
bmp : TBitmap;
DestR, SourceR : TRect;
begin
bmp := TBitmap.Create;
bmp.Width := Panel1.Width;
bmp.Height := Panel1.Height;
DestR := Rect(0, 0, bmp.Width, bmp.Height);
SourceR := Rect(Panel1.Left, Panel1.Top, Panel1.Left + Panel1.Width, Panel1.Height + Panel1.Top) ;
bmp.Canvas.CopyRect(DestR, Form1.Canvas, SourceR);
Image1.Picture.Assign(bmp);
bmp.Free;
end;

end.

object Form1: TForm1
Left = 143
Top = 98
Width = 765
Height = 366
BorderIcons = [biSystemMenu, biMinimize]
Caption = '演示拷贝Panel内容'
Color = clBtnFace
Font.Charset = GB2312_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = '宋体'
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
PixelsPerInch = 96
TextHeight = 12
object Panel1: TPanel
Left = 16
Top = 8
Width = 361
Height = 273
Caption = 'Panel1'
TabOrder = 0
object Label1: TLabel
Left = 68
Top = 40
Width = 36
Height = 12
Caption = 'Label1'
end
object Label2: TLabel
Left = 96
Top = 96
Width = 36
Height = 12
Caption = 'Label2'
end
object Label3: TLabel
Left = 108
Top = 144
Width = 36
Height = 12
Caption = 'Label3'
end
object Button2: TButton
Left = 224
Top = 76
Width = 75
Height = 25
Caption = 'Button2'
TabOrder = 0
end
object Memo1: TMemo
Left = 116
Top = 176
Width = 185
Height = 89
ImeName = '中文 (简体) - 拼音加加3.11'
Lines.Strings = (
'Memo1')
TabOrder = 1
end
end
object Button1: TButton
Left = 668
Top = 296
Width = 75
Height = 25
Caption = '拷贝'
TabOrder = 1
OnClick = Button1Click
end
object Panel2: TPanel
Left = 384
Top = 8
Width = 361
Height = 273
Caption = 'Panel2'
TabOrder = 2
object Image1: TImage
Left = 1
Top = 1
Width = 359
Height = 271
Align = alClient
AutoSize = True
Center = True
end
end
end
 
谢谢楼上的.先试一下
 
呵呵.一定会给chenbin分的.你的代码是没问题.为什么我在panel上先放了一个TScrollBox,再在TScrollBox中放一个Image,用你的代码改成
bmp := TBitmap.Create;
bmp.Width := ImgBackPic.Width;
bmp.Height := ImgBackPic.Height;
DestR := Rect(0, 0, bmp.Width, bmp.Height);
SourceR := Rect(pnlShowPanel.Left, pnlShowPanel.Top, ImgBackPic.Width, ImgBackPic.Height) ;
bmp.Canvas.CopyRect(DestR, MainForm.Canvas, SourceR);
ImgBackPic.Picture.Assign(bmp);
bmp.Free;
得到的图像是一个很小的局部被放大的效果...
 
先给你一个小小的建议,
TScrollBox中放一个Image这句话, 这个Image的名字是什么,还有,贴测试的代码的时候最好不要控件特意命名,就用系统产生的就可以了,省的别人帮你调试的时候还特意去修改名字,很痛苦的,对吧
你的代码我没仔细看,也怪我没写好,给你误导了,
SourceR := Rect(pnlShowPanel.Left, pnlShowPanel.Top, ImgBackPic.Width, ImgBackPic.Height) ;
这句话,改成这样
SourceR := Rect(pnlShowPanel.Left, pnlShowPanel.Top, pnlShowPanel.Left + ImgBackPic.Width, pnlShowPanel.Top + ImgBackPic.Height) ;
这样,就是加个左和上的位置,就不会出现局部放大的情况了,反正CopyRect前面的参数是目标区域,中间是源Canvas,最后一个源区域,控制好就行了
 
谢谢楼上的兄弟.哈哈.你的建议我收了.以后知道了....
能不能给个QQ号呀
 
多人接受答案了。
 
后退
顶部