Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Повторный запуск Form.Show


Santa   (26.07.11 11:27

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

 if SForm=nil then begin
   NewFormSpis(SForm,Applet);
   if SForm=nil then exit;
 end;
 SForm.Form.Show;


Если происходит создание формы, то проблем с отображением формы нет, а вот если форма уже была закрыта, то показ формы не происходит, хотя если в данном месте сделать проверку, то свойство Visible устанавливается в true. В чем может быть загвоздка?

P. S. Delphi 7, Windows XP, версия библиотеки от 26.06.2011


AndreyRus ©   (26.07.11 11:51[1]

Попробуй поменяй SForm.Form.Show; на  SForm.Show;


Дмитрий К ©   (26.07.11 12:29[2]

Вместо закрытия форму нужно скрывать:
procedure TForm2.KOLFormClose(Sender: PObj; var Accept: Boolean);
begin
 Accept := False;
 Form.Hide;
end;


Santa   (26.07.11 12:35[3]


> Попробуй поменяй SForm.Form.Show; на  SForm.Show;



> Вместо закрытия форму нужно скрывать:

не помогло


Santa   (26.07.11 12:41[4]

Проверил на Win2K Server, ситуация аналогична.
Сделал пустой проект и тоже проверил - ситуация аналогична.


Дмитрий К ©   (26.07.11 12:51[5]

Код показывай.


Santa   (26.07.11 12:56[6]


> Код показывай.

Пустой проект, две кол-формы(не автосоздаваемые) и на главной форме одна кнопка с кодом:

procedure TForm1.Button1Click(Sender: PObj);
begin
 if Form2=nil then begin
   NewForm2(Form2,Applet);
   if Form2=nil then exit;
 end;
 Form2.Form.Show;
end;

При первом нажатии форма нормально показывается, при втором не показывается вообще, вышеприведенные советы на процесс не влияют.


Santa   (26.07.11 13:00[7]

Дмитрий К.
Извиняюсь, не на той форме Hide прописал, все заработал, сча с основным проектом буду разбираться, спасибо, за помощь.


rdnks   (28.07.11 04:21[8]

другая загвоздка, кол 3.14х, стандартный мск-проект. Создаются вторичные формы динамически, то временем, много с кучей контролов. Код громоздк. При закрытии что accept = true, что false - ресурсы не освобождаются. Некоторые контролы создаются своим кодом, в основном панели из пакета GRush. Как сказано в документации в autofree добавлять не надо, ибо сами должны уничтожаться. Такой же код генерирует и мск. Возможные утечки проверил, вроде всё чисто. Но освобождается память только таким кодом:

procedure Tfrm.KOLForm1Close (bla-bla-bla);
begin
Accept := false;
Уничтожаем по списку Plist динамические контролы aka FreeObj;
Form.Free;
end;

И то не вся.
Это как минимум ненормально. В ранних версиях этого не наблюдалось, память чистилась нормально. Что за нафиг такой? Код адекватней привести не могу, так как не с пк пишу. Возможен ли косяк в самой библиотеке на моментах автодеструкторов? Где хоть концы рыть? Не хочется чтобы тратились десятки а то и сотни метров памяти впустую.


rdnks   (28.07.11 16:10[9]

Забыл добавить, что при accept = true не вызывается событие OnDestroy, при уничтожении же формы Form.Free вызывается.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо