91 lines
3.4 KiB
ObjectPascal
91 lines
3.4 KiB
ObjectPascal
unit fr_utils;
|
||
|
||
{$mode ObjFPC}{$H+}
|
||
|
||
interface
|
||
|
||
uses
|
||
SysUtils, Classes, fs_iinterpreter, xpMemParamManagerUnit, controls, frxClass, cgiDM;
|
||
type
|
||
|
||
{ TxpFRFunctions }
|
||
|
||
TxpFRFunctions = class(TfsRTTIModule)
|
||
private
|
||
class var fData: TNIDBDM;
|
||
class var fVars: TxpMemParamManager;
|
||
function CallMethod(Instance: TObject; AClassType: TClass; const AMethodName: String; var Params: Variant): Variant;
|
||
function _(const szMsgId: string): string;
|
||
public
|
||
constructor Create(AScript: TfsScript); override;
|
||
class procedure SetReport(Adata: TNIDBDM; AVariables: TxpMemParamManager);
|
||
end;
|
||
|
||
implementation
|
||
|
||
uses
|
||
//gnugettext,
|
||
numberinwords;
|
||
function TxpFRFunctions._(const szMsgId: string): string;
|
||
begin
|
||
Result := szMsgId;
|
||
if Assigned(fData) then
|
||
begin
|
||
result := fData.QueryValue(format('select interpretation from xp_vocabulary where term=%s',[TNidbDM.StringAsSQL(szMsgId)]),szMsgId);
|
||
end;
|
||
end;
|
||
constructor TxpFRFunctions.Create(AScript: TfsScript);
|
||
begin
|
||
inherited Create(AScript);
|
||
with AScript do
|
||
begin
|
||
AddMethod('function _(str:string):string', @CallMethod, 'LMS функции', 'Функция _()');
|
||
AddMethod('function Log(str:string):integer', @CallMethod, 'LMS функции', 'Функция LOG()');
|
||
AddMethod('function Variable(str:string):string', @CallMethod, 'LMS функции', 'Функция Variable()');
|
||
AddMethod('function AnsiLowerCase(str:string):string', @CallMethod, 'LMS функции', 'Функция AnsiLowerCase()');
|
||
|
||
AddMethod('function ЧислоСловами(number:integer;gender:integer;declension:integer):string', @CallMethod, 'LMS функции', 'Функция ЧислоСловами(число, род (0=М,1=Ж,2=С), падеж (0=И,5=П))');
|
||
AddMethod('function НомерСловами(number:integer;gender:integer;declension:integer):string', @CallMethod, 'LMS функции', 'Функция НомерСловами(число, род (0=М,1=Ж,2=С), падеж (0=И,5=П))');
|
||
|
||
AddMethod('function Нагрузка(reqname: string; paramNumber: integer):string', @CallMethod, 'LMS функции', 'Функция Нагрузка(параметр нагрузки, номер поля (1=не менее,2=не более))');
|
||
AddMethod('procedure Логотип(ControlName: string; ImageName: string)',@CallMethod,'LMS функции','Отображение логотипа');
|
||
end;
|
||
end;
|
||
|
||
class procedure TxpFRFunctions.SetReport(Adata: TNIDBDM;
|
||
AVariables: TxpMemParamManager);
|
||
begin
|
||
fData := AData;
|
||
fVars := AVariables;
|
||
end;
|
||
|
||
function TxpFRFunctions.CallMethod(Instance: TObject; AClassType: TClass;
|
||
const AMethodName: String; var Params: Variant): Variant;
|
||
begin
|
||
if AMethodName = '_' then Result := _(Params[0])
|
||
else
|
||
if AnsiSameText(AMethodName,'Log') then begin
|
||
result := true;
|
||
end
|
||
else
|
||
if AnsiSameText(AMethodName,'Variable') then
|
||
begin
|
||
if fVars<>nil then
|
||
Result := fVars[(Params[0])]
|
||
else
|
||
Result := '';
|
||
end
|
||
else
|
||
if AnsiSameText(AMethodName, 'AnsiLowerCase') then Result := AnsiLowerCase(Params[0])
|
||
else
|
||
if AnsiSameText(AMethodName, 'ЧислоСловами') then Result := number999(Params[0],Params[1],Params[2])
|
||
else
|
||
if AnsiSameText(AMethodName, 'НомерСловами') then Result := number999_ord(Params[0],Params[1],Params[2])
|
||
end;
|
||
|
||
|
||
|
||
initialization
|
||
fsRTTIModules.Add(TxpFRFunctions);
|
||
end.
|