|
|
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
Ну так создавайте изначально так, чтобы такой формы небыло Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:41 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
Arioch2) иметь один единственный реестр в приложении - глобальную переменную А ещё лучше не глобальную, а локальную для класса Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:42 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
Ariochgoldmi45Arioch, Зачем создавать то, что уже есть? MDIChildren и MDIChildCount 1) лаконичнее. Одна строка - вызов стандартной функции TList<t>.Contains гораздо меньше, чем расписанный вами if с циклами. Следовательно, меньше шансов тупой ошибки. Да, Contains лаконичнее. Но ошибка может вкрасться на другом этапе (к примеру, забыв добавить переменную в список). И кода будет ни сколько не меньше: необходимо создавать список, его удалять, добавлять в него переменную. Возможно, необходимы отдельные методы, как у вас. Arioch2) гибче. Например, в дальнейшем нужно будет иметь несколько MDI-Parent окон. Или с MDI будет переход на что-то другое (табы, докающиеся плавающие окна, ...) Согласен. Код имеет ограничения и вы предлагаете более гибкий подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:42 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
DimaBrНу так создавайте изначально так, чтобы такой формы небыло Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Дважды вызывать функцию MDIChildren[i] - долго и потенциально моежт привести к опискам (например - несколько циклом, или индексы более разнообразные и сложные) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 13:50 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
client6aacНо за наставление на путь истинный - спасибо! в общем, несколько вариантов тебе накидали, плюсы-минусы упомянули, планировтаь будущее программы и оценивать их - дело уже твоё. главное, не забывай, что "90% кода в интернете - говно" - https://www.gunsmoker.ru/2010/05/90.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 14:02 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
ToAll Я приятно удивлен, что вроде такой пустяковый вопросик вызвал такую достаточно бурную и конструктивную реакцию комьюнити. Всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 14:10 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
А почему нельзя открыть (создать) дочернюю форму два раза? У меня вообще все дочерние формы создаются TfrmMDIChild.Create(Self); Надо сотню открыть? На здоровье! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 14:56 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
Якобы, задача такая, что не надо. Скрестим пальцы, чтобы он не ошибся. Есть тезис "не изобретать велосипеды" goldmi45Зачем создавать то, что уже есть? MDIChildren и MDIChildCo И есть тезис "писать программу так, как будто через год её будет дописывать маньяк-убийца, которому расскажут, где живёт твоя семья" zinpubНо Arioch прав, гораздо лучше реестр окон, в который можно добавить собственные свойства\методы При этом тезис client6aacВ текущей логике приложения как раз и нужно открытие окошек в единственном экземпляре. - это ставка в азартной игре "угадай, как дела обстоят не в реальности, а на самом деле". Обычно мы угадываем, но иногда ошибаемся. Очевидно, что заранее мы не знаем, где ошибёмся, иначе не ошиблись бы провокация: Хороший код такой, который легко ломается (т.е. от любого чиха перестаёт компилироваться). Код, который компилируется даже после заметных изменений - плохой. Пример - да хотя бы вечный срач про контроль типов (строгий / не строгий / никакого и статический / динамический), например https://www.sql.ru/forum/1309685/incompatible-types. Собираем мой бред в кучку. goldmi45Зачем создавать то, что уже есть? MDIChildren и MDIChildCo "Бизюзловно" - прозюзюкала Зази. Если программа пишется на один раз и через неделю её выкинут на помойку навсегода - то экономия на велосипедах сыграет. Если "В текущей логике приложения как раз и нужно" и ни-ког-да никакой другйо логики не будет. Но! если "другая логика" всё же случится, то "в класс-реестр можно добавить собственные свойства\методы". А это значит, что в само объявление этих методов (списки/типы параметров, названия) можно зашить "требования к реальному миру". И при нарушении этих требований - компиляция сломается. И это - хороший код DimaBr Код: pascal 1. Тут мы предполагаем, что "TMdiBaseFormClass" - полный и уникальный идентификатор формы. ЕСЛИ потом у нас будут несколько форм одного класса, то будет что-то вроде Код: pascal 1. 2. 3. 4. 5. 6. 7. После этого всё позабытые нами вызовы "CreateFrom( MySuperMDIClass )" просто не соберутся. Даже если мы захотим их пропустить - Delphi не даст. Но это - объявление метода. А вот сам цикл - все равно будет собираться. DimaBr Код: pascal 1. 2. 3. 4. 5. 6. Если это цикл по любой причине начал копи-паститься в разных местах - мы обязательно где-нибудь его да забудем. Потому что "то, что уже есть" - никак на наши реалии не завязано. И поэтому не овалится (к сожалению), если мы реалии поменяем. Таким образом, использование этого "из коробки" функционала - это очень сильная ставка на YAGNI. Ну и "охотничья байка". Есть стандартный срач в БД - суррогатный или натуральный должен быть ключ таблиц. Должен ли уникальный идентификатор строки в таблице иметь реальный смысл или быть полностью очищен от любых пересечений с реальностью. Несколько лет назад мне надо было быстро сделать самописку для внутренних нужд компании. Среди прочего там была таблицы контрагентов - юр/лиц. В качестве Primary Key я там поставил ИНН. Сразу многие запросы стали проще, а при просмотре вторичных таблиц вместу асбтрактного случайного номера - был реальный и осмысленный ИНН. Удобно и быстро. ....перед этим я всю контору обошёл и у всех спросил, могут ли в России быть два юр-лица с одинаковым ИНН. И мне все сказали, что конечно же нет, и вообще "программе это никогда не понадобится". Ну и я "срезал угол". Тем более, что надо было быстро. Прошло полгода. У самописки появились пользователи, у пользователей появились привычки, в БД появились данные. И вдруг ко мне приходят и говорят, что программа остановила работу. Надо ввести контр-агента ,а не получается, ругается на повтор ИНН. - значит, вы его уже раньше ввели в БД, берите готовый. - нет, тот "Василёк", а нужен "Ромашка". - значит "Василёк" переименовался в ромашку. Переименуйте в БД и используйте. - нет, это разные юр-лица и нам нужны ОБА СРАЗУ - если это разные юр-лица, то у них и ИНН разные, ищите опечатку. - нет опечаток. Юр-лица разные, а ИНН общий - ЧТО ???? ...оказалось, что хотя вообще-то ИНН - "индивидуальный номер", но конкретно у филиалов банокв в разных городах ИНН был общий, а различались только КПП. Но ИНН уже был PK, на него уже были построены многие Foreign Key, но это были завязаны запросы и куски кода. И всё это уже было полгода в реальной работе. ....а мне надо бросив все срочно вспомнить как та программа писалась, сделать ИНН неуникальным - в программе и БД, и при этом не потерять данные, ни в чём не изменить поведение программы, и чтобы никто из пользователей вообще не заметил обновления. ...но вообще конечно же, YAGNI и "В текущей логике приложения как раз и нужно" Делайте ваши ставки, господа! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 16:19 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
Док, - Долго ли умеючи? - Умеючи-то долго! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 17:39 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
экак Вас поперло... пора уже выдыхать:D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 17:44 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
У меня обычно используется вот такой вариант: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Туда же можно засунуть и создание формы, при желании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2019, 10:48 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
client6aac, на дороге MDI вы еще не дошли до вопроса "Как сделать, чтобы при максимизации одного окна, другие оставались в нормальном состоянии?" и иже с ними. Может вам не надо MDI, а то придется велосипедить долго и упорно. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2019, 15:15 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
А зачем вообще переменная? Код: pascal 1. 2. 3. 4. 5. 6. После выхода из метода переменная сама обнулится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2019, 11:13 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
Old NickА зачем вообще переменная? Код: pascal 1. 2. 3. 4. 5. 6. После выхода из метода переменная сама обнулится. А зачем вообще переменная? Если она не нужна - так и не нужно ее делать. Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2019, 04:36 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
fraks, зачем вообще Show? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2019, 06:03 |
|
||
|
Закрытие MDIChild-формы
|
|||
|---|---|---|---|
|
#18+
ТСу необходимо создавать в единственном экземпляре дочерние окна. Последние три писателя - нечитатели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2019, 08:53 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39782787&tid=2039722]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 488ms |

| 0 / 0 |
