Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Объект и все такое  (Прочитано 187 раз)

Серега

  • Старожил
  • ****
  • Сообщений: 275
    • Просмотр профиля
Объект и все такое
« : 10 Ноября 2025, 12:14:30 »
Добрый день!
Прилетела задачка. Как бы была страница (pVCU) и куча подстраниц. И выполнялась процедура из глобального модуля:
Код: (delphi)
procedure SelectRoutes(aNameSubPage, aNameTC:String; tblRoutes_U4XXXMXX_XXX:TM_Table);
var
  aQuery: string;
  aSubPage: TM_Subpage;
begin
  aSubPage := pVCU.FindSubpageByName(aNameSubPage);
  if aSubPage <> nil then
  begin
    aQuery := 'SELECT ... FROM ... WHERE TC=' ... ' + QuotedStr(aNameTC);
    tblRoutes_U4XXXMXX_XXX.RunSQL(aQuery, tsSaveFixRow);
  end else
    begin
      ShowMessageClient(GetClientName, 'Предупреждение!', 'Выберите ТС.');
      Exit;
    end;
end;
Теперь подстраницы стали каждая страницей, а страница как бы стала подстраницей у каждой страницы, как бы поменялись названия а функционал тот же.
Понятно что скрипт работать не будет, так как поменялись названия страниц. Эксперимент не удался, ругается на имя. И теперь вопрос.
Можно ли заменить в скрипте название страницы на подстановку для конкретной страницы, которую указываем в параметрах при вызове?
То есть вот эту строку:
Код: (delphi)
aSubPage := pVCU.FindSubpageByName(aNameSubPage);
заменить на эту строку:
Код: (delphi)
aSubPage := aNameSubPage.FindSubpageByName('pVCU');
Возможно так сделать не получиться. Не хотелось бы писать это на каждую подстраницу.
Можете как то прокомментировать?
« Изменён: 12 Ноября 2025, 17:50:48 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3194
    • Просмотр профиля
    • Simple-Scada
Re: Объект и все такое
« Ответ #1 : 12 Ноября 2025, 17:57:17 »
Цитировать
Возможно так сделать не получиться. Не хотелось бы писать это на каждую подстраницу.
Можете как то прокомментировать?
Если мы правильно поняли из кода, параметр aNameSubPage является обычной строкой. У строк, конечно, нет метода FindSubpageByName. Он есть только у страниц (объектов типа TM_Page). При необходимости можно сначала получить нужную страницу, а затем найти принадлежащую ей подстраницу.
В процедуру SelectRoutes передаётся указатель на таблицу. Если нужно получить подстраницу, которой принадлежит таблица, то вместо поиска лучше вызвать метод tblRoutes_U4XXXMXX_XXX.GetOwner. Он вернёт подстраницу, которой принадлежит таблица (либо окно, если таблица находится в окне).

Серега

  • Старожил
  • ****
  • Сообщений: 275
    • Просмотр профиля
Re: Объект и все такое
« Ответ #2 : 13 Ноября 2025, 17:03:10 »
В теме какой то читал про эту функцию. Ну теперь, после Ваше ответа, точно стоит изучить ее подробнее.
Спасибо!