|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
Есть несколько подходов передачи параметров в форму: 1. сделать свой конструктор 2. Создать экземпляр формы и добавить параметры вручную Код: pascal 1. 2. 3. 4.
3. На событие OnActivate Какой подход используете? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 15:20 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
Третий точно не надо использовать. Первые два отличаются чисто косметически, их применение - вкусовщина. PS: Хотя применение конструктора позволит не забыть передать важный параметр. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 15:35 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
Если параметров много - свой конструктор, в который передаётся record TMyKolkhozFormParams ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 15:37 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
4. создание/показ/удаление формы оборачивается в функцию, куда и запихиваются параметы ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 15:38 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
Даже можно чтобы функция создавала специальный объект ленивой инициализации, и от него в вызывающий код выдавала только интерфейс. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 15:45 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
В форме объявляю булевский публичный метод Execute, который заполняет переданные данные, вызывает ShowModal и, если закрыли по OK, возвращает введенные данные ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 16:17 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
cptngrb, 5. TObject или record в отдельном модуле, что бы не было циклических ссылок ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 16:27 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
cptngrb Есть несколько подходов передачи параметров в форму: 1. сделать свой конструктор 2. Создать экземпляр формы и добавить параметры вручную Код: pascal 1. 2. 3. 4.
3. На событие OnActivate Какой подход используете? 4. Создать объект параметров и ссылку на объект присвоить свойству Tag формы. 5. Послать окну формы сообщение, в сообщении будет ссылка на параметры (или сами параметры). 6. Назначить метод формы обработчиком исключений и выбросить объект исключения с параметрами. 7. Создать объект окна с заданным именем, в данных окна - параметры; пусть форма сама ищет ищет нужное окно и читает параметры. 8. Записать значения параметров в файл на диске. 9. В форме создать приемник - мэилслот/tcp сокет/..., отправлять форме параметры в виде потока данных. 10. Разместить константные параметры в ресурсах на этапе компиляции, пусть форма читает. 11. Наследовать все формы в т.ч. от интерфейсов SetParameter(имя, значение : тип), пусть форма реализует нужные интерфейсы... ... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 16:28 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
Код: 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.
Процедура F5 заполняет контролы формы данными, на основании режима (Fmode) и переданных параметров. По канонам, это бы еще завернуть в try-finally, но у меня это неактуально т.к. после исключения приложение обычно закрывают. Для одной формы может быть несколько процедур/функции для создания-вызова, с разным количеством параметров. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 16:30 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
По моей методе, форма существует только в момент когда отображается на экране, потом разрушается. Это позволяет вообще не думать - занята эта форма или нет, позволяет вызывать ее вложенно неограниченное количество раз. На практике это тормозов не вызывает, кроме одного замеченного мной случая - если форме есть Memo в котором в дизайн-тайме накидано много текста. Типа справка. Это заметно подтормаживает, особенно если замерить время создания. Delphi7. Возможно на других версиях так не проявляется. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 16:35 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
ъъъъъ, сильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 17:02 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
DimaBr 4. создание/показ/удаление формы оборачивается в функцию, куда и запихиваются параметы если форма нужна для редактирования записи бд, то обычно проверяю результат ShowModal и если mrYes - то пишу в базу ъъъъъ создавать объекты и цеплять на Tag? Часто нужно ображаться к компонентам формы и выдергивать из них данные, например Код: pascal 1. 2. 3. 4. 5. 6.
Разве так не лучше читается? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 17:07 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
cptngrb если форма нужна для редактирования записи бд, то обычно проверяю результат ShowModal и если mrYes - то пишу в базу Я обычно делаю наоборот. В функции сохранения данных в базу, если все получилось, делаю ModalResult := mrOk; что бы форма закрылась. В противном случае можно получить ситуацию что форму закрыли а сохранение по какой-либо причине не произошло. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 17:19 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Первые два отличаются чисто косметически, их применение - вкусовщина. Не соглашусь. Когда разработчики начинают злоупотреблять конструкторами - получается каша, в которой тяжело внедрять правильное наследование форм и другие хорошие универсальные решения. А раз их сложно внедрять - разработчик начинает находить обходные ноу-хау, и в итоге получается изрядно попахивающая конструкция. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 17:57 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
_Vasilisk_ В форме объявляю булевский публичный метод Execute, который заполняет переданные данные, вызывает ShowModal и, если закрыли по OK, возвращает введенные данные ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2022, 21:37 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
cptngrb Разве так не лучше читается? Так в первую очередь криво работает. Если с переданными значениями что-то не так (не проходят проверку целостности, например), что делать - заново открывать форму и тащить их обратно? Во вторую очередь, здесь делается тупая и ненужная лишняя работа. В третью очередь, этот код намертво сцеплен с конкретикой. Он не годится ни на что кроме решения одной очень узкой задачи в одном очень конкретном месте. Если потребуется решить похожую задачу - его разработчик сделает Ctrl-C Ctrl-V и чуть доработает напильником. В результате, например, если в приложении на 100 форм дозреют до исправления "в первую очередь" - разработчик побежит полностью переписывать сто мест (а то и двести, и триста). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2022, 02:55 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
bk0010 _Vasilisk_ В форме объявляю булевский публичный метод Execute, который заполняет переданные данные, вызывает ShowModal и, если закрыли по OK, возвращает введенные данные +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2022, 10:13 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
cptngrb Есть несколько подходов передачи параметров в форму: Какой подход используете? Если параметров мало и форма простенькая (как по сложности, так и по предназначению/функции) - вариант Димы/Василиска. Если форма более монструозная и параметров/действий много - лично я делал отдельный метод Init (не конструктор!), который вызывался после создания и до Show[Modal]. Нечто похожее привёл fraks со своей F5 (странное название для внешнего метода), но у него наружу торчит колхоз с контролами - так делать нельзя (ну, если проект серьёзный/поддерживаемый). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2022, 10:41 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
fraks cptngrb если форма нужна для редактирования записи бд, то обычно проверяю результат ShowModal и если mrYes - то пишу в базу В функции сохранения данных в базу, если все получилось, делаю ModalResult := mrOk; что бы форма закрылась. В противном случае можно получить ситуацию что форму закрыли а сохранение по какой-либо причине не произошло. Звучит подозрительно криво... Когда срабатывает (вызывается) "функция сохранения данных" - не по нажатию пользователем кнопучки OK / Yes / Save? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2022, 10:44 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Если форма более монструозная и параметров/действий много - лично я делал отдельный метод Init (не конструктор!), который вызывался после создания и до Show[Modal]. Нечто похожее привёл fraks со своей F5 (странное название для внешнего метода), но у него наружу торчит колхоз с контролами - так делать нельзя (ну, если проект серьёзный/поддерживаемый). Не понял что такое внешний метод. это метод формы в private разделе. F5 он называется потому что обычно (но не всегда) на форме есть грид, данные в котором обновляются или заполняются первоначально по кнопке <F5> а кнопка эта выбрана потому что в винде, в браузерах, по <F5> идет обновление страницы или чего там есть. Наружу и формы ничего не торчит т.к. эта функция, в которой создается и вызывается форма - она в модуле формы и есть. Управление некоторыми контролами тут сделано в соответствии с Fmode которое определяет для какой функции создана форма. Внутри procedure F5 видимость контролов не меняется, там только данные заполняются. Может быть можно сделать и постройнее, но я единственный разработчик, с этим кодом работаю только я :) И ни в каких иных командах никогда не работал. Так что колхоз и велосипеды - моё всё :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2022, 18:47 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам fraks пропущено... Я обычно делаю наоборот. В функции сохранения данных в базу, если все получилось, делаю ModalResult := mrOk; что бы форма закрылась. В противном случае можно получить ситуацию что форму закрыли а сохранение по какой-либо причине не произошло. Звучит подозрительно криво... Когда срабатывает (вызывается) "функция сохранения данных" - не по нажатию пользователем кнопучки OK / Yes / Save? Функция сохранения может вызываться и по кнопочке Ok и по пунту в контекстному меню "Сохранить" <Ctrl+S> или <Enter> или <Ctrl+Enter> - все они имеют ModalResult := mrNone. В обработчике вызывается функция сохранения, и в конце этой функции пишется ModalResult := mrOk; после чего форма закрывается. Делается так для того что бы если в функции сохранения вылетело исключение - то можно было бы как минимум посмотреть чего за данные мы там назаполняли. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2022, 18:51 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
И форм в autocreate у меня только 9 штук, включая главную форму и датамодули. Остальные 255 форм создаются только вот таким методом - через функцию. Соответственно обращаться к ним через переменную невозможно, этой переменной нет. Вот эта вот var FrmSKL_POS_Edit: TFrmSKL_POS_Edit; создается дельфями, но не используется т.к. нету autocreate. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2022, 18:55 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Звучит подозрительно криво... Не сказал бы. По мне - совершенно правильная схема. Ну разве что "сохранить" в контекстном меню - это оригинальная дизайнерская идея, а если в результате нажатия туда ещё и закрывается окно - тем более. fraks Функция сохранения может вызываться и по кнопочке Ok и по пунту в контекстному меню "Сохранить" <Ctrl+S> или <Enter> или <Ctrl+Enter> - все они имеют ModalResult := mrNone. В обработчике вызывается функция сохранения, и в конце этой функции пишется ModalResult := mrOk; после чего форма закрывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2022, 21:00 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Если форма более монструозная и параметров/действий много - лично я делал отдельный метод Init (не конструктор!), который вызывался после создания и до Show[Modal]. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2022, 22:56 |
|
Передача параметров в форму
|
|||
---|---|---|---|
#18+
_Vasilisk_ Гаджимурадов Рустам Если форма более монструозная и параметров/действий много - лично я делал отдельный метод Init (не конструктор!), который вызывался после создания и до Show[Modal]. Имхо - два плохих решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2022, 22:59 |
|
|
start [/forum/topic.php?fid=58&msg=40128533&tid=2036686]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 266ms |
total: | 415ms |
0 / 0 |