娃娃鸭《Delphi 6集成开发环境》笔记VI
来源:互联网 发布:淘宝卖书需要什么证 编辑:程序博客网 时间:2024/04/30 12:40
娃娃鸭《Delphi 6集成开发环境》笔记VI
打印
1、TPrinter 对象
Delphi 中的TPrinter 类可以方便地实现通常的打印任务。通过Printer 全局函数可以返回
TPrinter 类的一个对象,该对象在Printers 单元中定义。可以把Printer 全局函数看作一个全局
变量,并利用这个全局变量来与打印机进行打印操作。
利用Printer 来实现打印的一般过程如下:
(1) 调用BeginDoc 过程向打印机发送一个打印作业(此时还没有在打印机上开始打
印)。
(2)通过一个Text 变量或调用Canvas 对象方法建立打印输出。
(3)调用EndDoc 过程结束当前的打印作业,该打印作业开始在打印机上打印。
(4)如果出现问题,调用Abort 过程取消当前打印的作业。
通常,在打印前要进行打印预览。在打印预览的时候,往往要将打印的结果在屏幕上显示出来。这时,就要注意屏幕的分辨率和打印机的分辨率的差别了。读取屏幕信息可以通过全局变量Screen 来实现,Screen 为TScreen 类的一个实例,在创建工程的时候就自动创建了,并在程序开始运行时读取了屏幕的一些设置信息。
值得注意的一点是TPrinter.Canvas。TPrinter.Canvas 对于窗体来说像一个画布,在它上面可以显示文本和图形。不同的是, TPrinter.Canvas 表示的是打印输出的画布,而非显示用的画布。大多数用来显示文本、图像和画图的程序可以用同一种方式来打印输出。
procedure TForm1.Button1Click(Sender: TObject);
begin
PrinterSetupDialog1.Execute; //选择输出的打印机以及其他打印控制选项
end;
procedure TForm1.Button2Click(Sender: TObject);
var
lines: integer;
prntext: system.text;
//将prntext声明为一个在system程序单元中定义的文本文件
begin
if PrintDialog1.Execute then
assignprn(prntext); //将prnsetup分配给打印机
rewrite(prntext); //调用rewrite函数,为输出打开已分配的文件
printer.Canvas.font := memo1.font;
//把当前Memo1的字体指定给打印对象的Canvas的字体属性
for lines := 0 to memo1.lines.count - 1 do
writeln(prntext, memo1.lines[lines]);
//把Memo的内容写到打印机对象
System.close(prntext);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.lines.loadfromfile('C:/doc/1.txt');
//在Form建立时读入文件C:/dos/os2.tx
end;
2、打印位图
打印位图也很简单。下面列出了相应代码。
procedure TBMPForm.mmiPrintClick(Sender:TObject)
begin
inherited;
with ImgMain.Picture.BitMap do
begin
Printer.BeginDoc;
Printer.Cavas.StretchDraw(Cavas.ClipRect,ImgMain.Picture.Bitmap);
Printer.EndCode;
end;
end;
3、打印TMemo 组件中的内容
事实上,用AssignPrn()来打印文本行相当简单。AssignPrn()可以为当前打印机分配一个文本文件变量,它与Rewrite()和CloseFile()等过程一起使用。下面几行代码说明了用法:
var
f:TextFile;
begin
AssignPrn(f);
try
Rewrite(f);
Writeln(f, 'Print the output');
finally
CloseFile(f);
end;
end;
向打印输出一行文字与向文件中输出一行文字一样,可以使用下面的语句:
Writeln(f,'This is my line of text');
4、打印RTF 格式的文本
RTF 格式文本的打印同样简单,只要调用一个方法就行了。相应代码如下所示:
procedure TMdiRtfForm.mmiPrintClick(Sender:TObject);
begin
inherited;
reMain.Print(Caption);
end;
5、获取显示当前打印机的分辨率
Windows 下的打印分辨率对打印程序有至关重要的作用,利用函数GetDeviceCaps()可以得到打印分辨率。
var
iHorizontal,iVertical:integer;
begin
iHorizontal:=GetDeviceCaps(printer.handle,LOGPIXELSX);
iVertical:= GetDeviceCaps(printer.handle,LOGPIXELSY);
ShowMessage('水平分辨率:'+inttostr(iHorizontal)+chr(12)+ '垂直分辨率:'+Inttostr(iVertical));
end;
6、尽量不要使用AssignPrn
尽管AssignPrn 简化了文本打印操作,是输出到打印机像输出到文件一样简单。但简单带来的是一系列不方便:用户无法知道当前打印的行数,无法准确控制行距,也无法灵活改变字体字型,所以最好使用Canvas 属性。
7、用打印机的点数做度量单位
var
PointX:integer;
PointY:integer;
Begin
PointX := GetDeviceCaps(printer.Handle,LOGPIXELSX);
PointY := GetDeviceCaps(printer.Handle,LOGPIXELSY);
Printer.Canvas.rectangle(0,0,PointX*1,PointY*2);
End;
8、获取默认打印机的信息
在Windows 的Win.ini 文件中有下面的一些配置信息:
[Window]
load=
run=
NullPort=None;
Device=HP LaserJet III,HPPCL5MS,LPT1:
…
其中windows 节的Device 键中默认打印机的信息,可以通过Windows API 函数
GetProfileString 获取该信息。函数GetProfileString 的原型如下:
DWORD GetProfileString(
LPCTSTR lpAppName, //指定节名的字符串
LPCTSTR lpKeyName, //指定键名的字符串
LPCTSTR lpDefault, //没有找到键名返回的字符串
LPCTSTR lpReturnString, //找到键名返回的字符串
DWORD nSize //lpReturnedString的字节数
);
文件管理
我们处理的文件通常分为三种:文本文件、类型文件和无类型文件。
文本文件指可被任意文本编辑器读取的ASCII文本。
类型文件指包含由程序员定义的数据类型的文件。
无类型文件包含了其他所有的类型,它是对包含任意格式或无格式数据的文件的统称。
1、文本文件(text file)
操作步骤如下:
1. 声明变量:
var
MyTextFile:Textfile;
2. 首先要打开此文本文件。
打开一个文件需要两步:首先是AssignFile() ,它可以将文件变量与一个文件关联起来。
例如:
AssignFile(MyTextFile,’MyTextFile.txt’);
这时,可以进行第二步:打开文件。有三种方式可以打开文件:使用Rewrite 过程创建并打开文件;对于一个已存在的文件,此操作将使文件被覆盖;使用Reset 过程只读地打开一个文件;使用Append 过程可以向已存在的文件追加文本。注意Reset 将以可读写方式打开类型文件和无类型文件。
3. 使用CloseFile来关闭一个已打开的文件。
代码实例:分别以几种方式
var
MyTextFile: Textfile;
begin
assignfile(MyTextfile, 'MyTextFile.txt');
reset(MyTextFile); // rewrite(MyTextFile);//append(MyTextFile);
try
{操作文件}
finally
CloseFile(MyTextFile);
end;
end;
2、类型文件(typed file)
如果使用file 声明文件对象时使用了一定的类型,例如Byte、Integer 和用户自定义的类型等,则称定义的文件为类型文件。
TPerson = packed record
FirstName:String[20];
LastName:String[20];
Age:Integer;
SocialCode:Integer;
end;
PersonFile:file of TPerson;
来读取单独一条TPersonRec 类型的记录
var
PersonFile: file of TPerson;
Person: TPerson;
begin
assignfile(PersonFile, 'PersonFile.dat');
reset(PersonFile);
try
if not Eof(PersonFile) then
read(PersonFile, Person);
finally
CloseFile(PersonFile);
end;
end;
程序用来向文件中追加一条记录:
var
PersonFile: file of TPerson;
Person: TPerson;
begin
assignfile(PersonFile, 'PersonFile.dat');
reset(PersonFile);
seek(PersonFile, FileSize(PersonFile)); //为使文件指针的位置位于末尾,在写记
//录前调用了Seek 过程
try
write(PersonFile, Person);
finally
CloseFile(PersonFile);
end;
end;
3、无类型文件
个无类型文件的声明:
var
UnTypedFile:File;
对无类型文件数据的读写操作就可以利用数据块实现。可以利用BlockRead 从无类型文件读出数据,也可以利用BlockWrite 向无类型文件写入数据。这两个过程的声明如下:
procedure BlockRead(var F:File;var Buf;Count:Integer[;var Result:Integer]);
procedure BlockWrite(var F:File;var Buf;Count:Integer[;var Result:Integer]);
BlockRead 和BlockWrite 都至少有三个参数。第一个是无类型文件变量f;第二个是包含写入或读出的数据的缓冲区变量Buf;Count 则用来指定本次操作读写记录的数量。Result 是一个可选参数,当进行读操作时,它返回实际读取的记录数目;当进行写操作时,它返回实际写入的记录数目。如果Result 和Count 数值不一致则可能是磁盘空间不足。
何从一个文件中读取128 字节的一个记录:
var
UnTypedFile: file;
Buf: array[0..128] of byte;
Num: Integer;
begin
assignfile(UnTypedFile, 'UnTypedFile.dat');
reset(UnTypedFile);
try
BlockRead(UnTypedFile, Buf, 1, Num);
finally
CloseFile(UnTypedFile);
end;
end;
向文件中写一个128字节的记录:
var
UnTypedFile: file;
Buf: array[0..128] of byte;
Num: Integer;
begin
assignfile(UnTypedFile, 'UnTypedFile.dat');
reset(UnTypedFile);
if FileExists('UnTypedFile.dat') then
Reset(UnTypedFile)
else
Rewrite(UnTypedFile);
try
Seek(UnTypedFile, FileSize(UnTypedFile));
FillChar(Buf, SizeOf(buf), 'Y');
BlockWrite(UnTypedFile, Buf, 1, Num);
finally
CloseFile(UnTypedFile);
end;
end;
4、文件对话框组件
1.TOpenDialog 组件
2.SaveDialog
3.OpenPictureDialog
OpenPictureDialog 组件具体用法基本与OpenDialog 组件相同,只是对话框在显示的时候还多了一个可以预览图形的矩形区域。如果选中的图形文件可以被TPicture 类识别,则图形会在预览区域中显示。一般TPictrue 类可以识别.BMP、.ICO、.WMF 和.EMF 等类型的图形文件。
4.SavePictureDialog
5、文件管理常用函数和过程
1.Append 过程
Append 过程为在一个已经存在的文件的最后添加文本做准备工作。
过程原型如下:
procedure Append(var F: Text);
2.AssignFile 过程
AssignFile 过程将一个外部文件的文件名与一个file 类型的变量关联,对file 类型的变量进行初始化。
过程原型如下:
procedure AssignFile(var F; FileName: string);
3.AssignPrn 过程
AssignPrn 将一个text file 变量与打印机关联,写向text file 变量的内容将直接送往打印机。过程原型如下:
procedure AssignPrn(var F: Text);
4.CloseFile 过程
CloseFile 过程用来关闭文件,同时将文件记录盘上的文件与相关文件变量断开联系。过程原型如下:
procedure CloseFile(var F);
注意:
通常将CloseFile 语句放在finally 语句块中执行,如6.1 节的例子中那样。这样,一旦文件操作代码出现异常也可以关闭文件。
5.DeleteFile 函数
Delete 函数将一个文件从记录盘上删除,如果文件不存在或无法删除,则返回False。函数原型如下:
function DeleteFile(const FileName: string): Boolean;
6.Eof 函数
Eof函数判断是否到了文件的结尾。如果文件为空或当前位置在最后一个字符之后,则返回True;否则,返回False。
函数原型如下:
function Eof [ (var F: Text) ]: Boolean; // 用于文本文件
function Eof(var F): Boolean; // 用于类型文件和无类型文件
7.Eoln 函数
Eoln 函数测试文件指针是否指向一行的最后,适用于文本文件。如果当前的位置在一行的末尾或Eof(F)函数返回的是True,则Eoln 返回的是True;否则,返回False。函数原型如下:
function Eoln [(var F: Text) ]: Boolean;
8.Erase 过程
Erase 过程删除一个已经存在的文件。如果文件被打开,先关闭该文件再执行删除操作。
过程原型如下:
procedure Erase(var F);
9.EileExists 函数
测试指定文件名的文件是否存在。如果文件存在,返回True;否则,返回False。函数原型如下:
function FileExists(const FileName: string): Boolean;
10.FileGetAttr 函数
获取一个文件的属性设置。函数原型如下:
function FileGetAttr(const FileName: string): Integer;
11.Write 过程
Write 过程用来向一个文件中添加内容。过程原型如下:
procedure Write( [var F: Text; ] P1 [ , P2,..., Pn] ); // 文本文件
procedure Write(F, V1,...,Vn); // 有类型文件
12.Writeln 过程
Writeln 过程用来向文本文件中添加一行内容,即在写入内容后面有回车换行符。过程原型如下:
procedure Writeln([ var F: Text; ] P1 [, P2, ...,Pn ] );
实例:拷贝:
var
SourceF, EndF: file;
NRead, NWrite: integer;
Buff: array[1..1024] of char;
begin
AssignFile(SourceF, Edit1.Text);
Reset(SourceF, 1);
AssignFile(EndF, Edit2.Text);
Rewrite(EndF, 1);
//显示文件大小信息
Edit3.Text := IntToStr(FileSize(SourceF)) + 'B';
repeat
//从源文件向缓冲区读
BlockRead(SourceF, Buff, SizeOf(Buff), NRead);
//从缓冲区向目标文件读
BlockWrite(EndF, Buff, SizeOf(Buff), NWrite);
until (NRead = 0) or (NWrite <> NRead);
CloseFile(SourceF);
CloseFile(EndF);
end;
6、目录操作常用函数和过程
1.ChDir 过程
改变当前的目录。如果指定路径中包含有驱动器号(盘符),则相应地改变当前的驱动器。
过程原型如下:
procedure ChDir(S: string);
2.CreateDir 函数
新建一个目录。如果创建成功,则返回True;否则,返回False。函数原型如下:
function CreateDir(const Dir: string): Boolean;
3.DirectoryExists 函数
检测指定的目录是否存在。如果存在,函数则返回True;否则,返回False。函数原型如下:
function DirectoryExists(Name: string): Boolean;
如果在参数Name中指定的不是绝对路径,则使用相对路径,默认在当前目录中进行查询。
4.ForceDirectories 函数
创建指定的目录。通常在创建一个目录的时候,其父级目录必须存在。但是使用
ForceDirectories创建目录的时候就没有这个限制,可以将所需的所有目录一次创建。如果创建成功,则函数返回True;如果有任何一个目录创建失败,则返回False。
函数原型如下:
function ForceDirectories(Dir: string): Boolean;
5.GetCurrentDir 函数
获取当前的目录的绝对路径。函数原型如下:
function GetCurrentDir: string;
6.GetDir 过程
获取指定驱动器中的当前目录。
过程原型如下:
procedure GetDir(D: Byte; var S: string);
参数D 为指定的驱动器。当D 的数值为0 时,表示默认的驱动器;数值为1,表示A驱动器;数值为3,表示C 驱动器……
如果指定的驱动器不存在,则参数S 的数值设置为当前的目录.
7.MkDir 过程
新建一个目录。过程原型如下:
procedure MkDir(S: string);
8.RemoveDir 函数
删除一个存在的目录,目录必须为空。函数原型如下:
function RemoveDir(const Dir: string): Boolean;
如果删除目录成功,则返回True;否则,返回False。
9.RmDir 过程
删除一个存在的目录,目录必须为空。过程原型如下:
procedure RmDir(S: string);
10.SelectDirectory 函数
通过显示一个对话框来让用户选择一个目录。
注意:在使用前要在uses语句中添加包含FileCtrl的说明。
函数原型如下:
function SelectDirectory(const Caption: string; const Root: WideString;
out Directory: string): Boolean; overload;
function SelectDirectory(var Directory: string; Options: TSelectDirOpts;
HelpCtx: Longint): Boolean; overload;
11.SetCurrentDir 函数
设置系统的当前目录。函数原型如下:
function SetCurrentDir(const Dir: string): Boolean;
7、驱动器操作常用函数
1.DiskFree 函数
获取指定驱动器中剩余空间的字节数。
函数原型如下:
function DiskFree(Drive: Byte): Int64;
2.DiskSize 函数
获取指定驱动器容量,单位为字节数。函数原型如下:
function DiskSize(Drive: Byte): Int64;
8、文件名操作常用函数
1.ExpandFileName 函数
将当前驱动器名(盘符)、路径名和指定的文件名合成一个绝对文件名。函数原型如下:
function ExpandFileName(const FileName: string): string;
返回值为合成的绝对文件名。
2.ExpandUNCFileName 函数
获取一个以UNC 格式的包括网络驱动器名的绝对文件名。函数原型如下:
function ExpandUNCFileName(const FileName: string): string;
3.ExtractFileDir 函数
从绝对文件名中获取目录名。函数原型如下:
function ExtractFileDir(const FileName: string): string;
4.ExtractFileDrive 函数
从绝对文件名中获取驱动器号(盘号)。函数原型如下:
function ExtractFileDrive(const FileName: string): string;
5.ExtractFileExt 函数
从绝对文件名中获取文件名的扩展名。函数原型如下:
function ExtractFileExt(const FileName: string): string;
6.ExtractFileName 函数
从绝对文件名中获取文件名。函数原型如下:
function ExtractFileName(const FileName: string): string;
7.ExtractFilePath 函数
从绝对文件名中获取路径名。函数原型如下:
function ExtractFilePath(const FileName: string): string;
8.ExtractRelativePath 函数
从绝对文件名中获取相对于某一个路径的相对路径名。函数原型如下:
function ExtractRelativePath(const BaseName, DestName: string): string;
9.ExtractShortPathName 函数
将长文件名转化成短文件名。函数原型如下:
function ExtractShortPathName(const FileName: string): string;
- 娃娃鸭《Delphi 6集成开发环境》笔记VI
- 娃娃鸭《Delphi 6集成开发环境》笔记
- 娃娃鸭《Delphi 6集成开发环境》笔记
- 娃娃鸭《Delphi 6集成开发环境》笔记
- 娃娃鸭《Delphi 6集成开发环境》笔记 IV
- 娃娃鸭《Delphi 6集成开发环境》笔记V
- 娃娃鸭Delphi面向对象编程思想刘艺笔记
- 娃娃鸭Delphi面向对象编程思想刘艺笔记
- php学习笔记之1.1集成开发环境配置
- 集成开发环境(IDE)学习笔记系列
- 娃娃鸭学Ruby-6、句法结构
- 2.4 集成开发环境
- IDE 集成开发环境
- IDE 集成开发环境
- VxWorks 集成开发环境
- Eclipse集成开发环境
- 集成开发环境IDE
- 集成开发环境 Eclipse
- 串口通信
- 什么是SIP/SIP的意义
- 【转】2007年最受欢迎的资源top100
- 网站整合discuz论坛
- 要成为Java高手需要注意的25个学习目标
- 娃娃鸭《Delphi 6集成开发环境》笔记VI
- "" 和string.empty的区别
- [ZT]B 树、B- 树、B+ 树、B* 树都是什么
- SharePoint 2007 成功搭建
- WPF学习笔记二
- 学习笔记_VC++深入详解(第一章)(part1)
- 不要轻易下结论
- Linux下C语言编程 -- 进程通信、消息管理
- 中文核心期刊目录(2008年版).