Последняя версия DataExpress 3 beta от 1 сентября 2019 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Песочница
ИзображениеИзображениеИзображение

Модули выражения. Проблемы при написании.

neitri
Мастер скриптов
Сообщения: 539
Зарегистрирован: Пн фев 13, 2017 5:42 pm

Модули выражения. Проблемы при написании.

Сообщение neitri » Ср мар 15, 2017 10:08 am

Столкнулся со следующей проблемой, модуль

Код: Выделить всё

{@function
OrigName=CR
Name=CR
Args=n
Result=n
Group=neitri
Description=
@}
function ClassicRound(a:double):double;
Begin
  result:=a;
End;

Вызываю его CR([Цена])
выполняется с ошибкой CR -> Invalid parameter
Как правильно передать число со знаком в модуль?

PS Хотя CR(12.34) Работает.
Помогли Тебе. Помоги проекту.
Реквизиты помощи Вы можете найти в окне "О программе"

Аватара пользователя
kroks
Интересующийся
Сообщения: 173
Зарегистрирован: Ср мар 01, 2017 8:23 pm

Re: Модули выражения. Проблемы при написании.

Сообщение kroks » Ср мар 15, 2017 10:24 am

Все работает!
Изображение

Немного поправил:

Код: Выделить всё

{@function
OrigName=Neitri_Krasavchik
Name=CR
Args=n
Result=n
Group=neitri
Description=Округление числа с плавающей запятой по математическим правилам
@}
function Neitri_Krasavchik(a:double):double;
Begin
  result:=a;
End;   
Отдал - возьми! Взял - отдай! Изображение

neitri
Мастер скриптов
Сообщения: 539
Зарегистрирован: Пн фев 13, 2017 5:42 pm

Re: Модули выражения. Проблемы при написании.

Сообщение neitri » Ср мар 15, 2017 11:20 am

Собираем грабли дальше :(

Код: Выделить всё

{@function
OrigName=Neitri_Krasavchik
Name=CR
Args=n
Result=n
Group=neitri
Description=Округление числа с плавающей запятой по математическим правилам
@}
function Neitri_Krasavchik(a:double):double;
Begin
  result:=roundto(a,-2);
End;   

При обновлении поля программа завершается с ошибкой.
Помогли Тебе. Помоги проекту.
Реквизиты помощи Вы можете найти в окне "О программе"

Аватара пользователя
kroks
Интересующийся
Сообщения: 173
Зарегистрирован: Ср мар 01, 2017 8:23 pm

Re: Модули выражения. Проблемы при написании.

Сообщение kroks » Ср мар 15, 2017 11:27 am

Может из-за того, что тип Extended?
neitri писал(а):При обновлении поля программа завершается с ошибкой.

З.Ы. Странно. У меня ничего вообще.
Отдал - возьми! Взял - отдай! Изображение

neitri
Мастер скриптов
Сообщения: 539
Зарегистрирован: Пн фев 13, 2017 5:42 pm

Re: Модули выражения. Проблемы при написании.

Сообщение neitri » Ср мар 15, 2017 12:01 pm

Я понял в чем проблема была. Я проверял тестом формы. При открытии окна в поле отображается 0 но значение поля null. По этому возникала ошибка. Если вызывать CR(NZ([Сумма],0) ошибки нет.
Помогли Тебе. Помоги проекту.
Реквизиты помощи Вы можете найти в окне "О программе"

Аватара пользователя
kroks
Интересующийся
Сообщения: 173
Зарегистрирован: Ср мар 01, 2017 8:23 pm

Re: Модули выражения. Проблемы при написании.

Сообщение kroks » Ср мар 15, 2017 12:06 pm

А, понятно. У меня вызов не был включен на старте, потому и не кусалось.
Отдал - возьми! Взял - отдай! Изображение

neitri
Мастер скриптов
Сообщения: 539
Зарегистрирован: Пн фев 13, 2017 5:42 pm

Re: Модули выражения. Проблемы при написании.

Сообщение neitri » Ср мар 15, 2017 12:27 pm

Код: Выделить всё

function cr(a:double):double;
var
t,q:extended;
Begin
  t:=0.1234567890123456789;
  result:=t/10;
End; 

выводит 0,01234567890123456
789 куда то теряются.

Код: Выделить всё

function cr(a:double):double;
var
t,q:extended;
Begin
  t:=0.1234567890123456789;
  q:=roundto(t,-2);
  result:=t/10;
End; 

А так уже возникает ошибка Invalid floating point operation
Помогли Тебе. Помоги проекту.
Реквизиты помощи Вы можете найти в окне "О программе"

Аватара пользователя
kroks
Интересующийся
Сообщения: 173
Зарегистрирован: Ср мар 01, 2017 8:23 pm

Re: Модули выражения. Проблемы при написании.

Сообщение kroks » Ср мар 15, 2017 12:58 pm

neitri писал(а):789 куда то теряются.

Ну так они за пределами возможного диапазона (дальше 16 символов)
Отдал - возьми! Взял - отдай! Изображение

Аватара пользователя
YurAnt
Эксперт
Сообщения: 3352
Зарегистрирован: Чт апр 13, 2017 8:57 am
Поблагодарили: 4 раза
Контактная информация:

Re: Модули выражения. Проблемы при написании.

Сообщение YurAnt » Чт май 04, 2017 4:32 pm

Подскажите плиз. Есть такой код (добавляем открытие EditWindow по Enter):

Код: Выделить всё

procedure GridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var K:TKeyEvent;
begin
K:=Self.Grid.OnKeyDown;
if key=13 then
begin
Self.Grid.OnKeyDown := nil;
Self.EditWindow.ShowModal;
Self.Grid.OnKeyDown:=K;
end;
end;
procedure Form_Create;
begin
if Self.EditWindow <> nil then
   Self.Grid.OnKeyDown := @GridKeyDown;
end;   

В чистом виде работает безупречно, но как ни пытался я его запихнуть в функцию выражений - ни в какую (одни еггоги с ShowModal, OnKeyDown := nil). Как именно пытался это сделать - показывать не буду (плохая примета :D )... Что тут необходимо поменять..?

штук 10 всяких полезных функций валяется без дела просто потому, что также "не воткнулись" в модуль... (мозгов и терпения не хватает)
Изображение

drts
Эксперт
Сообщения: 361
Зарегистрирован: Сб окт 29, 2016 11:35 pm
Откуда: Новороссийск
Благодарил (а): 25 раз
Поблагодарили: 4 раза

Re: Модули выражения. Проблемы при написании.

Сообщение drts » Чт май 04, 2017 4:59 pm

self... и такая конструкция

Код: Выделить всё

k:=Self.Grid.OnKeyDown;
тут не покатит. Нужно выявить родителя для sender.


Вернуться в «Разработка расширений»