Delphi World - Изменение модального статуса формы
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Изменение модального статуса формы

Автор: Mike Orriss

Пpиходит программист в магазин. Там пpодавщица - полная такая тетенька. Программист (несколько оглядевшись):
- Бyтылкy пива и пачкy пpезеpвативов.
Продавщица:
- Это ты девyшкy охмypить бyтылкой пива собpался? Вино надо доpогое покyпать.
Программист (отpешенно):
- Да нет. Пиво я выпью, когда она yйдет.

Вы не можете изменить статус формы с не-модального на модальный без ее закрытия и повторного открытия.

Тем не менее, вы можете достигнуть этой цели, блокируя (disabling) все остальные открытые формы. Следующий пример переключает модальный статус формы в зависимости от нахождения таблицы в режиме редактирования:


procedure TForm2.DataSource1StateChange(Sender: TObject);
var
  ix: integer;
  b: boolean;
begin
  with (Sender as TDataSource).DataSet do
    b := (State = dsBrowse);
  with Screen do
    for ix := 0 to FormCount - 1 do
      if Forms[ix] <> ActiveForm then
        Forms[ix].Enabled := b;
end;

Примечание: вам также потребуется предотвращение закрытия формы, пока таблица находится в режиме редактирования (через обработчик события OnCloseQuery).

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования