|
|
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
Пишем MDI приложение. В нем есть базовая форма для всех MDIChild-фор, пусть TMdiBaseForm, от которой наследуются все остальные дочерние формы; При закрытии дочерних формы не сворачиваем их, а именно закрываем: Код: pascal 1. 2. 3. 4. Все формы создаются типовым способом: Код: pascal 1. 2. 3. Все работает как надо, до момента закрытия формы. После этого переменная frmMdiChildren1 остается ненулевая и форма повторно не создается. Так вот вопрос: как занулить переменную формы после ее закрытия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 12:24 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
client6aac, Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 12:40 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
client6aac, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Использование Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 12:41 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
client6aacПосле этого переменная frmMdiChildren1 остается ненулевая и форма повторно не создается. А где место в котором вы обнуляете переменную ? Зачем вообще существует переменная frmMdiChildren1 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 12:47 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
DimaBrА где место в котором вы обнуляете переменную? Вот вопрос то и был об этом... может не совсем корректно выразил мысль... Если закрытие окна происходит в базовой форме, которая не знает ничего о переменных, то где и как правильно занулять переменную формы? DimaBrЗачем вообще существует переменная frmMdiChildren1 ? Для того, что бы понять создавалась форма ранее или нет. Если будет создано стопитцот разных окошек и искомое потеряется где-то в самом низу, то клацнув в главном меню на пунктик вызова этого окна мы или выведем его наверх (если оно было ранее создано), либо создадим. В общем-то, нужное решение было дано в третьем посте, за что goldmi45 отдельное спасибо. Наверное тему можно закрывать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:02 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
client6aac, Код: pascal 1. 2. 3. 4. 5. 6. Открываем Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:06 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
Но это - корявый метод... Лучше закрывать\открывать "Главной формой" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:07 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
client6aacТак вот вопрос: как занулить переменную формы после ее закрытия? Удалить эту переменную вообще. Она не нужна. Реестр существующих окон держать в другом виде, например Код: pascal 1. 2. Ну и не забывать оттуда удалять закрываемые формы. P.S. именно такой реестр на самом деле редко практичен: он не позволяет открывать НЕСКОЛЬКО окон одного класса. Впрочем, как и переменная "frmMdiChildren1" не может содержать несколько указателей на несколько окон сразу. А в реальности часто по другому. Например в браузере открыто несколько разных веб-страничек, в Excel открыто несколько разных файлов: класс один и тот же, а окон много: уникальный идентификатор окна состоит не только из класса, но и ещё каких-то данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:08 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
zinpubclient6aac, Код: pascal 1. 2. 3. 4. 5. 6. [/src] Не годится... Action := caFree; делаем в базовой форме, которая ничего не знает про Form2 Arioch В текущей логике приложения как раз и нужно открытие окошек в единственном экземпляре. Но за наставление на путь истинный - спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:18 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
список MDI окон у нас по факту есть но держать ссылки на формы в своем ObjectList(OwnObjects=FALSE!!!) никто не мешает при закрытии нужно пробегать по нему и удалять из него ссылку на удаляемую форму вопрос именно - для чего нам этот список более практичным выглядит вариант когда это список моих объектов, которые содержат всякие данные и В ТОМ ЧИСЛЕ ссылку на форму... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:21 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
Arioch Вот только что созрела мысль, что в Вашем варианте с Дикшионари я тоже не очень понимаю как удалять Айтем из словаря при закрытии формы при условии, что все это должно быть реализовано в базовой форме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:22 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
А две одинаковые формы (одного типа) не могут быть созданы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:22 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
DimaBrА две одинаковые формы (одного типа) не могут быть созданы ? нет, при попытке создания второго экземпляра формы, нужно вывести наверх уже имеющийся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:25 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
goldmi45client6aac, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Или проще Код: pascal 1. 2. 3. 4. http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Generics_Collections_TList_Contains.html Но вообще привязывать реестр (реестры) открытых окон к TMainForm - стрёмная идея. Потом если понадобиться распутать - то хрен распутаешь, спагетти зависимостей нарастёт. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:25 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
Arioch, я не пойму как это все делать из БАЗОВОЙ формы:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:27 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
goldmi45Arioch, Зачем создавать то, что уже есть? MDIChildren и MDIChildCount 1) лаконичнее. Одна строка - вызов стандартной функции TList<t>.Contains гораздо меньше, чем расписанный вами if с циклами. Следовательно, меньше шансов тупой ошибки. 2) гибче. Например, в дальнейшем нужно будет иметь несколько MDI-Parent окон. Или с MDI будет переход на что-то другое (табы, докающиеся плавающие окна, ...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:27 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
client6aaczinpubclient6aac, Код: pascal 1. 2. 3. 4. 5. 6. [/src] Не годится... Action := caFree; делаем в базовой форме, которая ничего не знает про Form2 Ну Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:30 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
client6aacя не пойму как это все делать из БАЗОВОЙ формы:) 1) пробросить в базовую формы ссылку на содержащий её реестр 2) иметь один единственный реестр в приложении - глобальную переменную ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:30 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
client6aacНе годится... Action := caFree; делаем в базовой форме, которая ничего не знает про Form2 так From2 тут явно один из потомков базовой формы, то же самое, что frmMdiChildren1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:32 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
Но Arioch прав, гораздо лучше реестр окон, в который можно добавить собственные свойства\методы... итд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:32 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
zinpub Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Зачем? переменная Sender перестаёт существовать через мгновение, когда ты выходишь из процедуры! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:33 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
Arioch Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Вот так лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:36 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
Ariochzinpub Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Зачем? переменная Sender перестаёт существовать через мгновение, когда ты выходишь из процедуры! Тьфу... Да! затупил... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:36 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
krapotkinболее практичным выглядит вариант когда это список моих объектов, которые содержат всякие данные и В ТОМ ЧИСЛЕ ссылку на форму. после чего этот список начинает расти, а либо поиск, либо удаление объектов в массиве - операции дорогие свалить ВСЕ объекты в одну кучу - спорное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:38 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39780310&tid=2039722]: |
0ms |
get settings: |
4ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
142ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 414ms |

| 0 / 0 |
