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”,如下图所示: ...
随机推荐
- IE浏览器GET传参后台乱码
ie里面 get传递的字符串 为 gb2312 ,后台用的是utf-8类型 所以用 POST传递字符串到后端 否则进行js参数转码 encodeURI(""); 后端解码
- djangoadmin导出csv
from django.contrib import admin from .models import Order,OrderItem from django.http import HttpRes ...
- 如何部署Scrapy 到Scrapyd上?
安装上传工具 1.上传工具 scrapyd-client 2.安装方法: pip install scrapyd-client 3.上传方法: python d:\Python27\Scripts\s ...
- retrifit
Retrofit 特点 性能最好,处理最快 使用REST API时非常方便: 传输层默认就使用OkHttp: 支持NIO: 拥有出色的API文档和社区支持 速度上比volley更快: 如果你的应用程序 ...
- CollectionFramework
- JUnit org.junit.runner.Request.classWithoutSuiteMethod解决方法
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- Mybatis学习(叁)
一.resultMap[结果映射 关系映射] 作用:当查询的数据与数据库中的数据不一致(表中字段和实体的属性不一样),通过resultMap进行一次映射. 可以使用简单的做法:(取别名) 二.多表查 ...
- 2016年Web前端面试题目汇总
转载: 2016年Web前端面试题目汇总 以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中未解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢 ...
- python 练习 17
#!/usr/bin/python # -*- coding: UTF-8 -*- f1 = 1 f2 = 1 for i in range(1,21): print '%12d %12d' % (f ...
- 最火的Android开源项目整理
一.代码库 1.from 代码家 整理比较好的源码连接 ******************************************************************* ...