Функции
Я передаю данные из Делфей в Fast Report через OnGetValue (из массива). Мне нужно создать функцию F([a]) в Report'e, чтобы в зависимости от [а] (где [a] - элемень массива, переданный из Делфей) менялся текст в Report'овском Memo.
Function f(a:string):string;
begin
If a='...' then f:='...'; //Если можно Memo1:='...';
If a='...' then f:='...'; //Или F:='...', а в Memo '[f([a])]' - не знаю
...
end;
Не бейте за язык, но как правильно писать не знаю.
Где писать функцию, где обращение к ней?
Помогите, пожалуйста.
Function f(a:string):string;
begin
If a='...' then f:='...'; //Если можно Memo1:='...';
If a='...' then f:='...'; //Или F:='...', а в Memo '[f([a])]' - не знаю
...
end;
Не бейте за язык, но как правильно писать не знаю.
Где писать функцию, где обращение к ней?
Помогите, пожалуйста.
Комментарии
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
frxReport1.AddFunction('Function FSigh0(a:string):string;','Primex','');
frxReport1.LoadFromFile('Report.fr3');
frxReport1.ShowReport;
end;
procedure TForm1.frxReport1GetValue(const ParName: string; var ParValue: Variant);
var i:integer;
begin
i:=1;
while Form1.StringGrid1.Cells[0,i]<>'' do
if ParName = Form1.StringGrid1.Cells[0,i] then
ParValue := Form1.StringGrid1.Cells[1,i]
end;
Function FSigh0(a:string):string;
begin
If a='100' then Result:='да' else Result:='нет';
end;
function TForm1.frxReport1UserFunction(const MethodName: String;var Params: Variant): Variant;
begin
if MethodName='FSigh0' then
Result:=FSigh0(Params);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//
Form1.StringGrid1.Cells[0,0]:='переменная';
Form1.StringGrid1.Cells[1,0]:='значение';
Form1.StringGrid1.Cells[0,1]:='s';
Form1.StringGrid1.Cells[1,1]:='100';
end;
Событиям OnGetValue и OnUserFunction были поставлены соответствующие процедура и функция. В самом отчете один объект Memo c текстом 'Результат = [FSigh0('100')]'. Делфи все это откомпилировала и запустила, но в отчете только 'Результат =', а не 'Результат = да'.
В документации было написано, что функция появится в списке functions. Это имелось ввиду на стадии программирования? У меня в списке функций моей не появилось и раздела 'Primex' тоже.
И как посчитать значение функции от s в Мемо [FSigh0(s)] или [FSigh0()]?
И Params это массив параметров.
в Мемо [FSigh0()]
в общем читаем справку или ищем топик FAQ на форуме
Только если у функции 2 параметра в Мемо писать:
[FSigh0(<a,b>)] или [FSigh0(<a>,)] или по-другому?
Версия 3.11
Простейший код вызывает ошибку: "Could not convert variant of type (Array Variant) into type (String)"
//так подключаю
function TFDataModule.frxReportKartUserFunction(const MethodName: String;
var Params: Variant): Variant;
begin
if SameText(MethodName,'SUMPROPIS') then Result := SumNumToFull(Params[0])
end;
//так добавляю
frxReportKart.AddFunction('function SumPropis(S: real): string','Дополнительные','Сумма прописью');
frxReportKart.ShowReport();
// так использую в самом отчете
[sumpropis([<frxDBDatasetKart."KartOfficeSumma">])]
[sumpropis(<frxDBDatasetKart."KartOfficeSumma">)]
благодарю!