RM报表 刷新打印机列表
procedure TRMReport.ShowPreparedReport;
var
s: string;
lPreviewForm: TRMPreviewForm;
begin
RMCurReport := Self;
Flag_PrintBackGroundPicture := True;
if (not FThreadPrepareReport) and (EndPages.Count = ) then Exit; FCurrentBand := nil;
FCurrentPage := nil;
FMasterReport := Self;
FDocMode := rmdmPreviewing;
s := RMLoadStr(SPreview);
if ReportInfo.Title <> '' then
s := s + ' - ' + ReportInfo.Title
else if FileName <> '' then
s := s + ' - ' + ExtractFileName(FileName)
else
s := s + ' - ' + RMLoadStr(SUntitled); if Assigned(Preview) then
begin
FCurPreview := Preview;
Preview.ShowReport(Self);
end
else
begin
if csDesigning in ComponentState then
lPreviewForm := TRMPreviewForm.Create(nil)
else
lPreviewForm := TRMPreviewForm.Create(Self);//这里
{ TRMPreviewForm }
TRMPreviewForm = class(TForm)
ImageList1: TImageList;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
FDoc: Pointer;
FViewer: TRMPreview;//这里 包括 预览对象
FPopupMenu: TRMPopupMenu;
FPopupMenuPrint: TRMPopupMenu;
{ TRMPreview }
TRMPreview = class(TRMVirtualPreview)
private
FShowToolbar: Boolean;
FOnBtnExitClickEvent: TNotifyEvent;
FOnSaveReportEvent: TRMPreviewSaveReportEvent;
Dock971: TRMDock;
ToolbarStand: TRMToolbar;
BtnExit: TRMToolbarButton;
btn100: TRMToolbarButton;
btnOnePage: TRMToolbarButton;
btnPageSetup: TRMToolbarButton;
btnPageWidth: TRMToolbarButton;
btnShowOutline: TRMToolbarButton;
ToolbarSep972: TRMToolbarSep;
//{$IFDEF USE_TB2K}
// btnPrint: TRMSubmenuItem;
//{$ELSE}
btnPrint: TRMToolbarButton; //打印按钮
//{$ENDIF}
procedure TRMPreview.btnPrintClick(Sender: TObject);
begin
if (Report = nil) or (not btnPrint.Visible) then Exit; Print;//打印方法
end;
procedure TRMVirtualPreview.Print;
var
lSavePrinterIndex: Integer;
lNeedSave: Boolean;
lPages: string;
lForm: TRMPrintDialogForm;
begin
if FPrepareReportFlag then Exit;
if (GetEndPages = nil) or (RMPrinters.Count = ) then Exit; lForm := TRMPrintDialogForm.Create(nil);//打印对话框
procedure TRMPrintDialogForm.FormShow(Sender: TObject);
begin
cmbPrinters.Items.Assign(RMPrinters.Printers);//读取打印机列表
cmbPrinters.Items.Delete();//删除虚拟打印机
FOldIndex := CurrentPrinter.PrinterIndex;
if FOldIndex <= then
cmbPrinters.ItemIndex :=
else
cmbPrinters.ItemIndex := FOldIndex - ;
if cmbPrinters.ItemIndex < then
cmbPrinters.ItemIndex := ;
chkCollateClick(nil); cmbPrintAll.ItemIndex := ;
cmbPrintAll.Left := Label5.Left + Label5.Width + ; cmbScalePapers.ItemIndex := -; cmbPrintersChange(nil);
FSpinOffsetTop.Value := FPrintOffsetTop / ;
FSpinOffsetLeft.Value := FPrintOffsetLeft / ;
end;
constructor TRMPrinterList.Create;
begin
inherited Create; FLock := TCriticalSection.Create; FPrinters := TStringList.Create;
BuildPrinterList;//读取打印机列表
GetDefaultPrinter;
end;
procedure TRMPrinterList.BuildPrinterList;
var
lLineCur, lPort: PChar;
lBuffer, lPrinterInfo: PChar;
lFlags, lCount, lNumInfo: DWORD;
I: Integer;
lLevel: Byte;
tmp: TRMPrinterInfo;
lStr: string;
begin
FLock.Acquire;
try
FreePrinterList; FPrinters.Clear;
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
lFlags := PRINTER_ENUM_CONNECTIONS or PRINTER_ENUM_LOCAL;
lLevel := ;
end
else
begin
lFlags := PRINTER_ENUM_LOCAL;
lLevel := ;
end; lCount := ;
EnumPrinters(lFlags, nil, lLevel, nil, , lCount, lNumInfo);
if lCount > then
begin
GetMem(lBuffer, lCount);
try
if not EnumPrinters(lFlags, nil, lLevel, PByte(lBuffer), lCount, lCount, lNumInfo) then
Exit; lPrinterInfo := lBuffer;
for I := to lNumInfo - do
begin
if lLevel = then
begin
with PPrinterInfo4(lPrinterInfo)^ do
begin
tmp := TRMPrinterInfo.Create(nil, pPrinterName, nil);
FPrinters.AddObject(pPrinterName, tmp);
Inc(lPrinterInfo, sizeof(TPrinterInfo4));
end;
end
else
begin
with PPrinterInfo5(lPrinterInfo)^ do
begin
lLineCur := pPortName;
lPort := FetchStr(lLineCur);
while lPort^ <> # do
begin
lStr := Format(SDeviceOnPort, [pPrinterName, lPort]);
tmp := TRMPrinterInfo.Create(nil, pPrinterName, lPort);
FPrinters.AddObject(lStr, tmp);
lPort := FetchStr(lLineCur);
end; Inc(lPrinterInfo, sizeof(TPrinterInfo5));
end;
end;
end;
finally
FreeMem(lBuffer, lCount);
end;
end; tmp := TRMPrinterInfo.Create(nil, PChar(RMLoadStr(SDefaultPrinter)), nil);
FPrinters.InsertObject(, RMLoadStr(SDefaultPrinter), tmp); //默认打印机 tmp := TRMPrinterInfo.Create(nil, PChar(RMLoadStr(SVirtualPrinter)), nil); // 虚拟打印机
FPrinters.InsertObject(, RMLoadStr(SVirtualPrinter), tmp);
finally
Flock.Release;
end;
end;
procedure TRMPrinterList.Refresh;
begin
FLock.Acquire;
try
BuildPrinterList;
finally
Flock.Release;
end;
end;
RM报表 刷新打印机列表的更多相关文章
- [C#] 获取打印机列表
一:获得本地安装的打印机列表 注:(如果在"设备和打印机"中已经添加了局域网的打印机设备,也算是本地安装的打印机:没有添加的则算作局域网打印机) 1,通过 C# 中 Printer ...
- C# 获取打印机列表以及串口
C# 获取打印机列表以及默认打印机.串口列表. /// <summary> /// 获取本地已安装的打印机 /// </summary> /// <returns> ...
- C#获取本地打印机列表,并将指定打印机设置为默认打印机
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- C-Lodop获取打印机列表Create_Printer_List
C-Lodop获取打印机列表Create_Printer_List,此方法Lodop不支持,是C-Lodop特有的函数,客户端本地打印单独用c-lodop,或集中打印等,可以获得本机或云主机的打印机列 ...
- Lodop在页面获取打印机列表 选择打印机预览
利用GET_PRINTER_COUNT,获取打印机个数,然后用GET_PRINTER_NAME(intPrinterIndex);循环获取打印机名称,添加到list列表里,可以让用户在页面就选择打印机 ...
- 怎么在Win7系统清除DNS缓存和刷新DHCP列表
如何清除DNS缓存?开始-运行,如下图所示: 2 在谈出的对话框中输入“cmd”,如下图所示: 3 在出现的DOS命令窗口输入“ipconfig /flushdns”,然后就清除DNS缓存了,在我们遇 ...
- 获取WINDOWS打印机列表
获取WINDOWS打印机列表 如何知道WINDOWS已经安装了哪些打印机? 1) usesVcl.Printers 2) Printer.Printers // property Printers: ...
- 关于调用notifyDataSetChanged刷新PullToRefreshListView列表无反应解决办法
文章转载自:关于调用notifyDataSetChanged刷新PullToRefreshListView列表无反应解决办法 | TeachCourse
- 清除DNS缓存和刷新DHCP列表
ipconfig /release 只是释放IP地址,然后还需要ipconfig /renew在重新获取一下 如何清除DNS缓存?开始-运行,如下图所示: 在谈出的对话框中输入“cmd”,如下图所示: ...
随机推荐
- Broadcast Receviewer
使用Braodcast Receiver 一.新建一个空的工程,命名为LearnBroadcastReceiver 二.为主界面添加一个按钮 三.新建一个broadcast receiver,命名为M ...
- Eclipse 设置文件的默认打开方式
web开发中,我们在编辑JSP/xml的时候,会碰到一个非常郁闷的事,直接双击打开的JSP页面,当我们在编辑的时候会到处跳,这个我是深有体会,所以我们就用右击 open with,但是久而久之我们会感 ...
- php学习注意点
1 多阅读手册和源代码 没什么比阅读手册更值得强调的事了–仅仅通过阅读手册你就可以学习到很多东西,特别是很多有关于字符串和数组的函数.就在这些函数里面包括许多有用的功能,如果你仔细阅读手册,你会经常发 ...
- KD-tree
就是K维空间上的二叉查找树. 每个node对应k维空间的超矩形区域 在方差最大的维度上,比较数据与kd-tree的根节点.中间节点,在该维度上的中值处划分,得到新的子空间,直到不能再分. 用于最近邻查 ...
- Office 多版本共存
1 32位共存 假如已经安装了Office 2003(必定是32位的),那么安装 32位Office 2010 时会出现如下错误: 图1.1 解决办法: 1.将下述三个注册表项导出到文件2003A.r ...
- java 零碎1
1. java 程序的入口必须是 static 类型的,接口中不允许有 static , 而且接口中的方法必须是public. 2. java 回收主要针对的是堆区的回收. 3. java.exe 是 ...
- Unity视频播放的各种实现方式汇总
http://www.taidous.com/bbs/article-860-1.html Unity视频播放有很多种实现方式,可根据要求来选择适当的实现,这里总结一下: 1. MovieTextu ...
- MySQL OCP 考试,一个不错的网站
http://www.aiotestking.com/oracle/category/exam-1z0-883-mysql-5-6-database-administrator/page/10/ 里面 ...
- 抓包工具Fidder设置(移动端抓包)
1.下载安装fiddler,下载链接:http://fiddler2.com/get-fiddler(我用的是免安装的fiddler2) 2.设置fiddler 打开Fiddler, Tool ...
- Facade 运行机制
举一个常见的例子在routes.php路由文件中的Route就是使用了laravel的Facade; config/app.php 文件中的aliases数组: 再例如其中的mail: 里面只是简单的 ...