Иллюстрированный самоучитель по Турбо Паскалю
Создание группы и изменение ее состава
Создание группы осуществляется за счет создания экземпляра объекта-наследника
TGroup и присоединения к нему всех видимых элементов группы. Любой видимый
объект, т.е. наследник TView, имеет два поля: Owner и Next. Поле Owner указывает
на владельца этого элемента, а поле Next - на следующий равный ему подэлемент
группы. При включении видимого элемента в группу его поля изменяются так, что
Owner содержит ссылку на экземпляр группы-владельца, a Next имеет значение NIL.
После добавления к группе еще одного элемента поле Next ранее включенного
элемента изменяет свое значение и содержит ссылку на этот новый элемент. Таким
образом создается связанный список подэлементов группы (рис. 17.4).
Для присоединения элемента должны использоваться методы Insert или ExecView.
Метод Insert присоединяет очередной видимый элемент к списку подэлементов
группы. В зависимости от набора связанных с подэлементом признаков этот элемент
может размещаться в центре (признаки ofCenterX и/или ofCenterY), стать активным
(ofSelectable) и, наконец, появиться на экране (sfVisible). После создания
подэлемента управление передается следующему за обращением к Insert оператору
программы.
Метод ExecView осуществляет те же действия, что и метод Insert, однако после
создания видимого подэлемента управление будет передано в него и оператор,
следующий за обращением к ExecView, получит управление только после уничтожения
этого подэлемента. Более точно процесс взаимодействия с программой элемента,
присоединенного к группе методом ExecView, можно описать следующим образом.
Любой видимый элемент наследует виртуальный метод Valid, с помощью которого он
может сигнализировать своему владельцу о том, насколько успешно он выполнил
возложенные на него обязанности. Обычно Valid возвращает True, если успешно
создан и размещен в динамической памяти экземпляр объекта, и False,- в противном
случае. Объект может перекрыть метод Valid и возвратить False, если он хочет
оставить управление у себя,- именно так, например, поступает объект TDialog.
Метод ExecView приостанавливает исполнение следующего оператора программы до тех
пор, пока все подэлементы группы не вернут Valid = True. Таким образом, метод
ExecView используется в том случае, когда среди подэлементов группы есть хотя бы
один элемент, реализующий диалог с пользователем.
Метод Delete удаляет подэлемент группы из связанного списка.
Puc. 17.4. Связанный список элементов группы