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

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

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

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

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

Угу. Спасибо... :)
Изображение

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

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

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

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

procedure GridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var K:TKeyEvent;
fm: TdxForm;
begin
Fm := TdxGrid(Sender).Form;
K:=fm.OnKeyDown;
if key=13 then
begin
fm.Grid.OnKeyDown := nil;
fm.EditWindow.ShowModal;
fm.Grid.OnKeyDown:=K;
end;
end;     
{@function
OrigName=test
Name=test
Args=
Result=s
Group=Параметры приложения
Description=<br>
<b></b>
Пример:<br><br>
<code></code> <br><br>
@}
function test: String;

begin
  Result := '';
  if Self.EditWindow <> nil then
   Self.Grid.OnKeyDown := @GridKeyDown;
end;         

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

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

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

Чудненько! Спасибо. Немного передвинул вверх проверку EditWindow (срабатывала 1 раз зараза) и убрал Result (мне кажется он вообще не нужен...).
Вы не против оформить функцию как совместную? :) ;)

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

procedure GridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var K:TKeyEvent;
fm: TdxForm;
begin
Fm := TdxGrid(Sender).Form;
if fm.EditWindow<>nil then
begin
K:=fm.OnKeyDown;
if key=13 then
begin
fm.Grid.OnKeyDown := nil;
fm.EditWindow.ShowModal;
fm.Grid.OnKeyDown:=K;
end;
end
else Fm.Free;
end;

{@function
OrigName=EKFOR
Name=EKFOR
Args=
Result=
Group=Полезное
Description=<b>EKFOR</b> <i> (Enter_Key_For_Open_Rec)</i>;
@}
procedure EKFOR;
begin
  Self.Grid.OnKeyDown := @GridKeyDown;
end;
Изображение

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

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

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

А не... косяк. Все равно срабатывает один раз... :(
Изображение

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

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

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

Не претендую на авторство, тут ещё надо добавить ограничение на запуск функции - чтобы она запускалась 1 раз в надписи, чтобы при пересчёте повторно не запускалась. Посмотрите, как это сделано у admin или у меня. И все должно работать

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

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

Сообщение neitri » Чт май 04, 2017 6:05 pm

Зачем нужна эта проверка?

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

if Self.EditWindow <> nil then
Помогли Тебе. Помоги проекту.
Реквизиты помощи Вы можете найти в окне "О программе"

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

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

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

neitri писал(а):Зачем нужна эта проверка?

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

if Self.EditWindow <> nil then

Эта фишка наверное больше готовилась к режиму "только таблица". В другом пока не гонял... Не могу представить пока - нужно такое в ином режиме или нет...
Изображение

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

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

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

drts писал(а):надо добавить ограничение на запуск функции - чтобы она запускалась 1 раз в надписи, чтобы при пересчёте повторно не запускалась. Посмотрите, как это сделано у admin или у меня. И все должно работать

Пока не совсем понял как это организовано у вас и admin-а. Я так понимаю можно просто создать какую-нибудь переменную во время Form_Create и от нее отталкиваться?
Изображение

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

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

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

Не в form_create, а в функции создать параметр формы. Посмотрите в модулях есть коммент - функция должна выполняться 1 раз. И проверять его. А насчёт result, т.к. это функция, она должна что-то возвращать. Например пустую строку.

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

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

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

drts писал(а):А насчёт result, т.к. это функция, она должна что-то возвращать. Например пустую строку.

Я это понял, но нам же в ней ничего возвращать не нужно и параметров она не имеет. Я ее того - в процедуру...
Изображение


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