Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.09.2013, 15:28
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию ShowModal + закрытие формы.

На главной форме кнопка для "Отчёта":
Код:
procedure TfMain.BarbReport(Sender: TObject);
begin
  fReport.ShowModal;
end;
На форме Отчёта:
Код:
procedure TfReport.BarbSaveAndPrint(Sender: TObject);
begin
    // Некие действия
    fReport.Close; // хочу закрыть эту форму с Отчётом
    fPreviewReport.ShowModal; // и тут же хочу открыть форму с предпросмотром отчёта для печати
  end;
end;
fReport не закрывает, а при попытке открыть fPreviewReport ошибка:
Код:
Cannot Make A Visible Window Modal error using ...

Последний раз редактировалось Uniq!, 21.09.2013 в 15:31.
Ответить с цитированием
  #2  
Старый 21.09.2013, 16:28
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вы пытаетесь из модальной формы открыть ещё одну модальную, что не допустимо. Можно сделать так - сначало скрыть, показать другую, а когда она отработает, закрыть первую форму
Код:
procedure TfReport.BarbSaveAndPrint(Sender: TObject);
begin
    // Некие действия
    {fReport.}Visible:= false;
    fPreviewReport.ShowModal; // и тут же хочу открыть форму с 
    {fReport.}Close; // хочу закрыть эту форму с Отчётом
предпросмотром отчёта для печати
  end;
end;
Ответить с цитированием
  #3  
Старый 22.09.2013, 00:47
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Alegun
Вы пытаетесь из модальной формы открыть ещё одну модальную, что не допустимо.
Вот я в этом не уверен.

Uniq!, если есть желание решить задачу без костылей, предлагаю описать ее ТЗ. Хотя кажется, что уже отвечал на тему правильного использования диалогов на этом форуме.
Ответить с цитированием
  #4  
Старый 22.09.2013, 01:08
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Оффтоп:
Цитата:
Сообщение от Freeman
Вот я в этом не уверен...
У ТС сначало из главной формы - fReport.ShowModal, потом из fReport (модальной) вызывается fPreviewReport.ShowModal, отсюда и ошибка вылазит - модальной может быть в один "квант" времени лишь кто-то один, потому показать вызываемую форму сборка и отказывается
Ответить с цитированием
  #5  
Старый 22.09.2013, 01:25
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Нужно открыть форму для оформления отчёта, при этом запретить терять фокус (т.е. сделать её модальной) а после оформления закрыть, и сразу же открыть форму для предпросмотра только что сделанного отчёта.
Ответить с цитированием
  #6  
Старый 22.09.2013, 01:38
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

В соседней теме я уже показал правильный пример использования модальных диалогов. В общем случае советы Borland предлагают разделять логику и отображение: вызовы ShowModal должны быть внешними по отношению к форме. То есть, кем форма создается, тем она и вызывается.
Ответить с цитированием
  #7  
Старый 22.09.2013, 01:41
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
...Вы пытаетесь из модальной формы открыть ещё одну модальную, что не допустимо...
...модальной может быть в один "квант" времени лишь кто-то один...
С чего это? Да хоть десяток последовательно открывай.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:48.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025