Проблема с подключением пользовательской функции
Здравствуйте. У меня проблемка. Пользуюсь FR 4.3+Delphi 7. Прошерстил я форум и нашел как создать функцию написания прописью чисел.
Подключаю так:
И добавляю в список функций FR:
Вызываю в Фаст Репорте
Функция добавляется в список, но не работает. Т. е. вообще ничего не отображает. По идее если написать
В чем может быть проблема?? Подскажите пожалуйста!!
function Propis(Value: Integer): string;
var
Rend: boolean;
ValueTemp, ValueOst: Integer;
procedure Num(Value: byte);
begin
case Value of
1: if Rend = true then Result := Result + 'один ' else Result := Result + 'одна ';
2: if Rend = true then Result := Result + 'два ' else Result := Result + 'две ';
3: Result := Result + 'три ';
4: Result := Result + 'четыре ';
5: Result := Result + 'пять ';
6: Result := Result + 'шесть ';
7: Result := Result + 'семь ';
8: Result := Result + 'восемь ';
9: Result := Result + 'девять ';
10: Result := Result + 'десять ';
11: Result := Result + 'одиннадцать ';
12: Result := Result + 'двенадцать ';
13: Result := Result + 'тринадцать ';
14: Result := Result + 'четырнадцать ';
15: Result := Result + 'пятнадцать ';
16: Result := Result + 'шестнадцать ';
17: Result := Result + 'семнадцать ';
18: Result := Result + 'восемнадцать ';
19: Result := Result + 'девятнадцать ';
end
end;
procedure Num10(Value: byte);
begin
case Value of
2: Result := Result + 'двадцать ';
3: Result := Result + 'тридцать ';
4: Result := Result + 'сорок ';
5: Result := Result + 'пятьдесят ';
6: Result := Result + 'шестьдесят ';
7: Result := Result + 'семьдесят ';
8: Result := Result + 'восемьдесят ';
9: Result := Result + 'девяносто ';
end;
end;
procedure Num100(Value: byte);
begin
case Value of
1: Result := Result + 'сто ';
2: Result := Result + 'двести ';
3: Result := Result + 'триста ';
4: Result := Result + 'четыреста ';
5: Result := Result + 'пятьсот ';
6: Result := Result + 'шестьсот ';
7: Result := Result + 'семьсот ';
8: Result := Result + 'восемьсот ';
9: Result := Result + 'девятьсот ';
end
end;
procedure Num00;
begin
Num100(ValueTemp div 100);
ValueTemp := ValueTemp mod 100;
if ValueTemp < 20 then Num(ValueTemp)
else
begin
Num10(ValueTemp div 10);
ValueTemp := ValueTemp mod 10;
Num(ValueTemp);
end;
end;
procedure NumMult(Mult: int64; s1, s2, s3: string);
var
ValueRes: Integer;
begin
if Value >= Mult then
begin
ValueTemp := Value div Mult;
ValueRes := ValueTemp;
Num00;
if ValueTemp = 1 then Result := Result + s1
else if (ValueTemp > 1) and (ValueTemp < 5) then Result := Result + s2
else Result := Result + s3;
Value := Value - Mult * ValueRes;
end;
end;
begin
if (Value = 0) then Result := 'ноль'
else
begin
Result := '';
Rend := true;
NumMult(1000000000000, 'триллион ', 'триллиона ', 'триллионов ');
NumMult(1000000000, 'миллиард ', 'миллиарда ', 'миллиардов ');
NumMult(1000000, 'миллион ', 'миллиона ', 'миллионов ');
Rend := false;
NumMult(1000, 'тысяча ', 'тысячи ', 'тысяч ');
Rend := true;
ValueTemp := Value;
Num00;
end;
end;
Подключаю так:
function TForm1.frxReport1UserFunction(const MethodName: String; var Params: Variant): Variant;
begin
if MethodName='PROPIS' then //имя функции в верхнем регистре
begin
if Params[0]<>null then
Result := Propis(Params[0])
else
Result := Propis(0);
end;
end;
И добавляю в список функций FR:
frxReport1.AddFunction('function Propis(Value: Integer): string', 'Дополнительные функции', 'Цена прописью');
Вызываю в Фаст Репорте
[Propis(500)]
Функция добавляется в список, но не работает. Т. е. вообще ничего не отображает. По идее если написать
[Propis(0)]
то сразу ж долно в превью отобразится : "ноль". Но и это не работает. Проверял на форме c Edit:
Edit1.text := Propis(500)
Работает.В чем может быть проблема?? Подскажите пожалуйста!!
Комментарии
По аналогии я сделал пакет, который установил в систему и всё