Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2010, 12:11   #1
Maddy
Пользователь
 
Регистрация: 18.01.2010
Сообщений: 17
По умолчанию Форма не закрывается когда из под нее вызывается процедура1

Если из под формы1 нажатием кнопки пользователь запускает процедуру в которой необходимо закрыть первую форму1 и написанно форма1.закрыть! а она [цензура] не закрывается (может быть потому что из под формы и были запущены процессы... )! соответственно когда должно произойти событие
Форма1.ShowModal; то так как форма1 и так открыта никаких действий не происходит и процесс продолжает дальше идти в ненужном направлении.. как мне это исправить? как обойти эту проблему?

P.S. Текст программы могу выложить. просот он на буке и мне лень это делать сразу... без необходимости

Последний раз редактировалось mihali4; 18.01.2010 в 12:15.
Maddy вне форума Ответить с цитированием
Старый 18.01.2010, 12:39   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что-то я ничего не понял...
Тут точно нужно код смотреть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.01.2010, 12:59   #3
Maddy
Пользователь
 
Регистрация: 18.01.2010
Сообщений: 17
По умолчанию

вот код кнопки той формы из под которой запускается процедура electric_calculate
Код:
procedure TGridForm.grid1Click(Sender: TObject);  { щелчек по таблице в форме отчета  - ГРИД}
begin
if grid1.cells[2,grid1.row]='' then ButtonDoc.Enabled:=false  
else ButtonDoc.Enabled:=true;
MessageDlgPos(' Вы выбрали сердечник  '+MassivImenTablic[grid1.row-2]+' '+NameArray[grid1.row-2] ,mtInformation ,
  mbOKCancel, 0, 250, 200);
  GridForm.Close;
  GridForm.ButtonExit.Click;
  electric_calculate(grid1.row-2); {Вот та процедура1 Которую вывает пользователь из формы GridForm}
end;
Вот кусок кода процедуры electric_calculate
Код:
  If Flag21=false Then Begin Dialog2('   Ошибка 852: Неверно выбранна ширина материала для такой марки стали.Либо база данных не содержит 
информации о заданной  толщине данной марки материала сердечника!!');
   {НАДО вернуться к началу и выбрать другой сердечник так как запас слишком большой  но перед этим надо показать табличку  конкурентных 
серлечников без кнопоки с возможностью выбора другого сердечника.}
   MessageDlgPos(' Попробуйте выбрать другой седечник  '  ,mtInformation ,
   mbOKCancel, 0, 250, 200) ;
   if GridRow.GridForm.Showing=False then
   GridRow.GridForm.ShowModal       
   Else  GridRow.GridForm.Close;{вот если форма была открыта до этого ее надо закрыть 
чтобы опять ее показать пользователю на следующей строке}
   GridRow.GridForm.ShowModal // На этой строке фозникает ошибка о том что нельза сделать  форму видимой
   end;
Появляется сообщение об ощибке вот такое "Cannot make a visible window modal "

Как обойти эту проблему?! ваши предложение спасибо)

Последний раз редактировалось mihali4; 29.01.2010 в 11:47.
Maddy вне форума Ответить с цитированием
Старый 18.01.2010, 13:05   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
   if GridRow.GridForm.Showing=False then
   GridRow.GridForm.ShowModal       
   Else  GridRow.GridForm.Close;{вот если форма была открыта до этого ее надо закрыть чтобы опять ее показать пользователю на следующей строке}
   //GridRow.GridForm.ShowModal // На этой строке фозникает ошибка о том что нельза сделать  форму видимой
Чтобы вновь показать после закрытия, ее нужно создать.
mihali4 вне форума Ответить с цитированием
Старый 18.01.2010, 13:24   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ее нужно создать.
А почему? разве Close уничтожает форму?
мне кажется тут проблема в указанной автором строке.
Она не нужна.
Просто написать:
Код:
   if GridRow.GridForm.Showing=False then
   GridRow.GridForm.ShowModal       
   Else  GridRow.GridForm.Close;
Зачем после IF еще раз Форму модально открывать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.01.2010, 13:49   #6
Maddy
Пользователь
 
Регистрация: 18.01.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Код:
   if GridRow.GridForm.Showing=False then
   GridRow.GridForm.ShowModal       
   Else  GridRow.GridForm.Close;{вот если форма была открыта до этого ее надо закрыть чтобы опять ее показать пользователю на следующей строке}
   //GridRow.GridForm.ShowModal // На этой строке фозникает ошибка о том что нельза сделать  форму видимой
Чтобы вновь показать после закрытия, ее нужно создать.
Поправил код
Код:
   GridRow.GridForm.ShowModal[/COLOR]       
   Else begin
  GridRow.GridForm.Close
  GridRow.GridForm.FormCreate(Sender);
  GridRow.GridForm.ShowModal ;// На этой строке ПО ПРЕЖНЕМУ фозникает ошибка о том что форму нельзя сделать вилимой  
  end;





Цитата:
Сообщение от Stilet Посмотреть сообщение
А почему? разве Close уничтожает форму?
мне кажется тут проблема в указанной автором строке.
Она не нужна.
Просто написать:
Код:
   if GridRow.GridForm.Showing=False then
   GridRow.GridForm.ShowModal       
   Else  GridRow.GridForm.Close;
Зачем после IF еще раз Форму модально открывать?
Проблема в том что не зависимо от того открыта или нет форма ее нужно Показать пользователю чтобы он смог сделать выбор другого пути развития.
пошагово смотрю на процесс и вижу что процедура не может закрыть форму пока процедура не дойдет до конца.( а до конца то она не дойдет без ошибок!) как мне ее прервать в таком случае?
Как сделать брайк после команды закрыть форму!? { Напишите если не трудно - Breake; или как? лень копаться в справочниках)} тогда будет вообще все в ажуре- форму вообще не надо будет закрывать! она открыта - выбирай другой путь дорогой мой пользователь)

и почему у меня не вставляються картинки?

Последний раз редактировалось Maddy; 18.01.2010 в 14:01.
Maddy вне форума Ответить с цитированием
Старый 18.01.2010, 14:12   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Эти неуклюжие строки
Код:
   if GridRow.GridForm.Showing=False then
   GridRow.GridForm.ShowModal       
   Else  GridRow.GridForm.Close;{вот если форма была открыта до этого ее надо закрыть чтобы опять ее показать пользователю на следующей строке}
   GridRow.GridForm.ShowModal // На этой строке фозникает ошибка о том что нельза сделать  форму видимой
следует заменить на
Код:
GridRow.GridForm:=GridRow.GridForm.Create(Application);
GridRow.GridForm.ShowModal;
GridRow.GridForm.Free;
и не мучиться...
mihali4 вне форума Ответить с цитированием
Старый 29.01.2010, 09:01   #8
Maddy
Пользователь
 
Регистрация: 18.01.2010
Сообщений: 17
По умолчанию

Вашем коде форма уже созданна чтобы ее создать заново ее надо разрушить, а так как из под этой формы запускаються процедуры которые пересчитывают значения в форме, она (форма) являеться прерогативной процедурой из которой изначально запускаеться процедура (!) форму нельзя закрывать. Пришлось обойти этот "косяк" просто изменив функционирование программы.

В общем вопрос остаеться открытым, если кому интересно на него ответить, Но мне это уже никакой пользы не принесет.

Последний раз редактировалось mihali4; 29.01.2010 в 11:48.
Maddy вне форума Ответить с цитированием
Старый 29.01.2010, 11:50   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
чтобы ее создать заново ее надо разрушить, а так как из под этой формы запускаються процедуры
Типичный пример неверного построения программы в целом и распределения процедур по юнитам в частности.
mihali4 вне форума Ответить с цитированием
Старый 29.01.2010, 15:03   #10
Maddy
Пользователь
 
Регистрация: 18.01.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Типичный пример неверного построения программы в целом и распределения процедур по юнитам в частности.
А ты схемку верного набросай) сказать что где-то тут ошибка любой может , а вот верно указать как надо сделать...
Maddy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция не вызывается с другого Unita Seran4ek Общие вопросы Delphi 7 03.01.2010 18:55
не вызывается Paint в borland 5 primeplus Общие вопросы C/C++ 4 08.08.2009 08:14
Не вызывается процедура. Что не так? KingMaker Общие вопросы Delphi 4 12.04.2009 00:59
форма под значками ERASERROR Общие вопросы Delphi 3 19.01.2008 14:32
Как узнать когда браузер скачивает, а когда нет? iPod Работа с сетью в Delphi 1 07.05.2007 15:16