Последняя версия DataExpress 2021.10.21

Изображение Скачать | Изображение Что нового?

Эмулятор ролевого сценария для формы

Все о том как сделать что-то с помощью скриптов.
Аватара пользователя
RONSHIF
Заглянувший
Сообщения: 7
Зарегистрирован: 02 апр 2021, 21:43
Благодарил (а): 6 раз

Эмулятор ролевого сценария для формы

Сообщение RONSHIF » 10 апр 2021, 09:23

Здравствуйте, уважаемое сообщество.
Пока не очень ориентируюсь в тонкостях DataExpress.
Есть небольшая база данных. Два журнала и два ' справочника. Одну форму по условиям, необходимо переводить в режим
"Edit only". Форма отображается представлении - ' Таблица + поля редактирования.
Условие для перевода этой формы в т.н. статус "Edit only" - количество записей в форме.
В РОЛЕВОМ сценарии все работает почти идеально. Режим формы = "только редактирование".
Неудобство в том, что момент перевода этой формы в режим "Edit only" в реал тайм не определен.
Пока сделал оперативную заплатку в таком виде:

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

[list=]
procedure Form_state (Sender: TObject);
begin
   if MainWindow.pages.ActivePage.caption='Название формы' then
   begin
     with MainWindow.ToolBar do
     begin
      Buttons[4].Visible := False;
      Buttons[8].Visible := False;
     end;
     with self.grid.popupmenu do
     begin
      items[MI_FORM_APPEND].Visible := False;
      items[MI_FORM_DELETE].Visible := False;
      items[MI_FORM_DUPLICATE].Visible := False;
      items[MI_FORM_DUPLICATEALL].Visible := False;
     end;
   end;
end;

procedure Form_Create;
begin
  self.OnAfterScroll := @Form_state;
end; [/list] 

///////////////
Нужен совет для решения задачи. Как перевести именно форму в режим "Edit only".

Аватара пользователя
admin
Разработчик
Сообщения: 5936
Зарегистрирован: 14 мар 2016, 11:32
Откуда: Ленинградская
Благодарил (а): 74 раза
Поблагодарили: 591 раз

Эмулятор ролевого сценария для формы

Сообщение admin » 10 апр 2021, 22:18

Вполне рабочий вариант. Только вместо события OnAfterScroll используйте OnStateChange.

Аватара пользователя
RONSHIF
Заглянувший
Сообщения: 7
Зарегистрирован: 02 апр 2021, 21:43
Благодарил (а): 6 раз

Эмулятор ролевого сценария для формы

Сообщение RONSHIF » 10 апр 2021, 22:50

admin писал(а):Вполне рабочий вариант. Только вместо события OnAfterScroll используйте OnStateChange.

Спасибо. На событии 'OnAfterScroll код действительно "семафорит". Переделанный рабочий код ниже, с учетом 'OnChange других вкладок:
//

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

var
   OldChange: TNotifyEvent;

procedure MainPageChange(Sender: TObject);
var
  i:integer;

begin
   OldChange(MainWindow.Pages);
   //MsgBox('Рабочий цикл события формы', self.FormCaption); * семафор события
   for i:=0 to  MainWindow.Pages.PageCount-1 do // **
   begin
   if MainWindow.Pages.Pages[MainWindow.Pages.ActivePageIndex].Caption <> 'Название Этой формы'
   then
      begin
        MainWindow.ToolBar.Buttons[4].Visible := True;
        MainWindow.ToolBar.Buttons[8].Visible := True;
      end else if MainWindow.Pages.Pages[MainWindow.Pages.ActivePageIndex].Caption = 'Название Этой формы'
   then
      begin
        MainWindow.ToolBar.Buttons[4].Visible := False;
        MainWindow.ToolBar.Buttons[8].Visible := False;
      end;
    end;// **
end;


procedure Form_state (Sender: TObject);
begin
   if MainWindow.pages.ActivePage.caption='Квартиры' then
   begin
     with self.grid.popupmenu do
     begin
      items[MI_FORM_APPEND].Visible := False;
      items[MI_FORM_DELETE].Visible := False;
      items[MI_FORM_DUPLICATE].Visible := False;
      items[MI_FORM_DUPLICATEALL].Visible := False;
     end;
   end;
end;

procedure Form_Create;
begin
  self.OnStateChange := @Form_state;
  OldChange := MainWindow.Pages.OnChange;
  MainWindow.Pages.OnChange := @MainPageChange;
end;


Вернуться в «Общие вопросы.»