📄 main.pas
字号:
unit main;
{$I frx.inc}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
frxServer, DB, ADODB, frxClass, frxADOComponents, frxDBSet, frxGZip,
frxDCtrl, frxDMPExport, frxGradient, frxChBox, frxCross, frxRich,
frxChart, frxBarcode, frxServerUtils, ActiveX, Registry, IniFiles, frxUtils;
type
TFastReport = class(TService)
ADOConnection: TADOConnection;
Serv: TfrxReportServer;
frxBarCodeObject1: TfrxBarCodeObject;
frxChartObject1: TfrxChartObject;
frxRichObject1: TfrxRichObject;
frxCrossObject1: TfrxCrossObject;
frxCheckBoxObject1: TfrxCheckBoxObject;
frxGradientObject1: TfrxGradientObject;
frxDotMatrixExport1: TfrxDotMatrixExport;
frxDialogControls1: TfrxDialogControls;
frxGZipCompressor1: TfrxGZipCompressor;
frxADOComponents1: TfrxADOComponents;
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceExecute(Sender: TService);
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServiceAfterInstall(Sender: TService);
private
{ Private declarations }
AppPath: String;
ConfFile: String;
AllowFile: String;
DenyFile: String;
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
const
CONFIG_FILE = 'server.conf';
ALLOW_FILE = 'allow.conf';
DENY_FILE = 'deny.conf';
var
FastReport: TFastReport;
dbMd: String;
implementation
uses ComObj;
{$R *.DFM}
var
DATABASE_FILE: String;
DBConnStr: String = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
FastReport.Controller(CtrlCode);
end;
function TFastReport.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TFastReport.ServiceStart(Sender: TService; var Started: Boolean);
var
ini: TIniFile;
begin
AppPath := GetAppPath;
ConfFile := AppPath + CONFIG_FILE;
AllowFile := AppPath + ALLOW_FILE;
DenyFile := AppPath + DENY_FILE;
ini := TIniFile.Create(ConfFile);
try
DATABASE_FILE := AppPath + ini.ReadString('Database', 'Connection', 'database\server.mdb');
finally
ini.Free;
end;
ADOConnection.ConnectionString := DBConnStr + DATABASE_FILE;
CoInitialize(nil);
try
ADOConnection.Open;
except
LogMessage('Database connection error');
end;
if ADOConnection.Connected then
begin
if FileExists(ConfFile) then
Serv.Configuration.LoadFromFile(ConfFile);
if FileExists(AllowFile) then
begin
Serv.AllowIP.Clear;
Serv.AllowIP.LoadFromFile(AllowFile);
end;
if FileExists(DenyFile) then
begin
Serv.DenyIP.Clear;
Serv.DenyIP.LoadFromFile(DenyFile);
end;
Serv.Open;
end else
LogMessage('Database not connected');
Started := True;
end;
procedure TFastReport.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
if ADOConnection.Connected then
ADOConnection.Close;
Serv.Close;
Stopped := True;
end;
procedure TFastReport.ServicePause(Sender: TService; var Paused: Boolean);
begin
Serv.Close;
Paused := True;
end;
procedure TFastReport.ServiceExecute(Sender: TService);
begin
while not Terminated do
begin
ServiceThread.ProcessRequests(True);
Sleep(100);
end;
end;
procedure TFastReport.ServiceContinue(Sender: TService; var Continued: Boolean);
begin
Serv.Open;
Continued := True;
end;
procedure TFastReport.ServiceAfterInstall(Sender: TService);
var
Registry: TRegistry;
key: String;
begin
Registry := TRegistry.Create;
try
{$IFNDEF Delphi4}
Registry.Access := KEY_READ;
{$ENDIF}
Registry.RootKey := HKEY_LOCAL_MACHINE;
key := 'System\CurrentControlSet\Services\' + Name;
if Registry.KeyExists(key) then
begin
{$IFNDEF Delphi4}
Registry.Access := KEY_WRITE;
{$ENDIF}
Registry.OpenKey(key, True);
Registry.WriteString('Description', 'FastReport Server service. http://www.fast-report.com');
Registry.CloseKey;
end;
finally
Registry.Free;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -