powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача параметров в форму
41 сообщений из 41, показаны все 2 страниц
Передача параметров в форму
    #40128450
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть несколько подходов передачи параметров в форму:
1. сделать свой конструктор
2. Создать экземпляр формы и добавить параметры вручную
Код: pascal
1.
2.
3.
4.
 form:= TForm.Create(nil);
   form.a:= 1;
   form.b:= 2;
   form.ShowModal; (Show)


3. На событие OnActivate

Какой подход используете?
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128460
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Третий точно не надо использовать. Первые два отличаются чисто косметически, их
применение - вкусовщина.

PS: Хотя применение конструктора позволит не забыть передать важный параметр.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128463
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если параметров много - свой конструктор, в который передаётся record TMyKolkhozFormParams
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128464
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4. создание/показ/удаление формы оборачивается в функцию, куда и запихиваются параметы
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128470
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже можно чтобы функция создавала специальный объект ленивой инициализации, и от него в вызывающий код выдавала только интерфейс.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128489
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В форме объявляю булевский публичный метод Execute, который заполняет переданные данные, вызывает ShowModal и, если закрыли по OK, возвращает введенные данные
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128496
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

5. TObject или record в отдельном модуле, что бы не было циклических ссылок
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128498
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cptngrb
Есть несколько подходов передачи параметров в форму:
1. сделать свой конструктор
2. Создать экземпляр формы и добавить параметры вручную
Код: pascal
1.
2.
3.
4.
 form:= TForm.Create(nil);
   form.a:= 1;
   form.b:= 2;
   form.ShowModal; (Show)



3. На событие OnActivate

Какой подход используете?

4. Создать объект параметров и ссылку на объект присвоить свойству Tag формы.
5. Послать окну формы сообщение, в сообщении будет ссылка на параметры (или сами параметры).
6. Назначить метод формы обработчиком исключений и выбросить объект исключения с параметрами.
7. Создать объект окна с заданным именем, в данных окна - параметры; пусть форма сама ищет ищет нужное окно и читает параметры.
8. Записать значения параметров в файл на диске.
9. В форме создать приемник - мэилслот/tcp сокет/..., отправлять форме параметры в виде потока данных.
10. Разместить константные параметры в ресурсах на этапе компиляции, пусть форма читает.
11. Наследовать все формы в т.ч. от интерфейсов SetParameter(имя, значение : тип), пусть форма реализует нужные интерфейсы...
... :)
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128500
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
var
  FrmSKL_POS_Edit: TFrmSKL_POS_Edit;

  function SKL_POS_Edit  (id: integer): boolean; // Редактирование места хранения

implementation

function SKL_POS_Edit(id: integer): boolean; // Редактирование места хранения
begin
  with TFrmSKL_POS_Edit.Create(Application) do begin
    Fid     := id;
    Fmode   := 1; // режим открытия окна 0 - просмотр; 1 - изменение существующего; 2 - создание
    Caption :=  format('Адрес хранения [%.0n]', [ Fid *1.0 ]);
    //
    PageControl.ActivePageIndex := 0;
    ActiveControl := Edit_POSIT;
    F5;
    Edit_EAN13.Enabled := True;
    Edit_NDOK.Enabled  := True;
    //
    Result := ShowModal = mrOk;
    //
    Free;
  end;//with
end;



Процедура F5 заполняет контролы формы данными, на основании режима (Fmode) и переданных параметров.

По канонам, это бы еще завернуть в try-finally, но у меня это неактуально т.к. после исключения приложение обычно закрывают.

Для одной формы может быть несколько процедур/функции для создания-вызова, с разным количеством параметров.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128505
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моей методе, форма существует только в момент когда отображается на экране, потом разрушается.
Это позволяет вообще не думать - занята эта форма или нет, позволяет вызывать ее вложенно неограниченное количество раз.

На практике это тормозов не вызывает, кроме одного замеченного мной случая - если форме есть Memo в котором в дизайн-тайме накидано много текста. Типа справка. Это заметно подтормаживает, особенно если замерить время создания.

Delphi7. Возможно на других версиях так не проявляется.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128525
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ, сильно.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128529
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
4. создание/показ/удаление формы оборачивается в функцию, куда и запихиваются параметы


если форма нужна для редактирования записи бд, то обычно проверяю результат ShowModal и если mrYes - то пишу в базу

ъъъъъ
создавать объекты и цеплять на Tag? Часто нужно ображаться к компонентам формы и выдергивать из них данные, например

Код: pascal
1.
2.
3.
4.
5.
6.
if Form.ShowModal = mrYes  then
begin
  ...
  field1.value:= Form.Edit1.text;
  ...
end;



Разве так не лучше читается?
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128533
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb

если форма нужна для редактирования записи бд, то обычно проверяю результат ShowModal и если mrYes - то пишу в базу

Я обычно делаю наоборот.
В функции сохранения данных в базу, если все получилось, делаю ModalResult := mrOk; что бы форма закрылась.
В противном случае можно получить ситуацию что форму закрыли а сохранение по какой-либо причине не произошло.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128553
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Первые два отличаются чисто косметически, их применение - вкусовщина.

Не соглашусь. Когда разработчики начинают злоупотреблять конструкторами - получается каша, в которой тяжело внедрять правильное наследование форм и другие хорошие универсальные решения. А раз их сложно внедрять - разработчик начинает находить обходные ноу-хау, и в итоге получается изрядно попахивающая конструкция.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128606
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
В форме объявляю булевский публичный метод Execute, который заполняет переданные данные, вызывает ShowModal и, если закрыли по OK, возвращает введенные данные
+1
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128637
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb
Разве так не лучше читается?

Так в первую очередь криво работает. Если с переданными значениями что-то не так (не проходят проверку целостности, например), что делать - заново открывать форму и тащить их обратно?

Во вторую очередь, здесь делается тупая и ненужная лишняя работа.

В третью очередь, этот код намертво сцеплен с конкретикой. Он не годится ни на что кроме решения одной очень узкой задачи в одном очень конкретном месте. Если потребуется решить похожую задачу - его разработчик сделает Ctrl-C Ctrl-V и чуть доработает напильником. В результате, например, если в приложении на 100 форм дозреют до исправления "в первую очередь" - разработчик побежит полностью переписывать сто мест (а то и двести, и триста).
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128653
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bk0010
_Vasilisk_
В форме объявляю булевский публичный метод Execute, который заполняет переданные данные, вызывает ShowModal и, если закрыли по OK, возвращает введенные данные
+1


+1
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128654
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb
Есть несколько подходов передачи параметров в форму:

Какой подход используете?
Вопрос плохо сформулирован и поэтому все отвечают разное.
Если параметров мало и форма простенькая (как по сложности,
так и по предназначению/функции) - вариант Димы/Василиска.

Если форма более монструозная и параметров/действий много -
лично я делал отдельный метод Init (не конструктор!), который
вызывался после создания и до Show[Modal]. Нечто похожее
привёл fraks со своей F5 (странное название для внешнего метода),
но у него наружу торчит колхоз с контролами - так делать нельзя
(ну, если проект серьёзный/поддерживаемый).
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128655
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
cptngrb

если форма нужна для редактирования записи бд, то обычно проверяю результат ShowModal и если mrYes - то пишу в базу
Я обычно делаю наоборот.
В функции сохранения данных в базу, если все получилось,
делаю ModalResult := mrOk; что бы форма закрылась.
В противном случае можно получить ситуацию что форму
закрыли а сохранение по какой-либо причине не произошло.

Звучит подозрительно криво... Когда срабатывает (вызывается)
"функция сохранения данных" - не по нажатию пользователем
кнопучки OK / Yes / Save?
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128699
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Если форма более монструозная и параметров/действий много -
лично я делал отдельный метод Init (не конструктор!), который
вызывался после создания и до Show[Modal]. Нечто похожее
привёл fraks со своей F5 (странное название для внешнего метода),
но у него наружу торчит колхоз с контролами - так делать нельзя
(ну, если проект серьёзный/поддерживаемый).


Не понял что такое внешний метод.
это метод формы в private разделе.

F5 он называется потому что обычно (но не всегда) на форме есть грид, данные в котором обновляются или заполняются первоначально по кнопке <F5> а кнопка эта выбрана потому что в винде, в браузерах, по <F5> идет обновление страницы или чего там есть.

Наружу и формы ничего не торчит т.к. эта функция, в которой создается и вызывается форма - она в модуле формы и есть.
Управление некоторыми контролами тут сделано в соответствии с Fmode которое определяет для какой функции создана форма.

Внутри procedure F5 видимость контролов не меняется, там только данные заполняются.

Может быть можно сделать и постройнее, но я единственный разработчик, с этим кодом работаю только я :)
И ни в каких иных командах никогда не работал. Так что колхоз и велосипеды - моё всё :)
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128700
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
fraks
пропущено...
Я обычно делаю наоборот.
В функции сохранения данных в базу, если все получилось,
делаю ModalResult := mrOk; что бы форма закрылась.
В противном случае можно получить ситуацию что форму
закрыли а сохранение по какой-либо причине не произошло.

Звучит подозрительно криво... Когда срабатывает (вызывается)
"функция сохранения данных" - не по нажатию пользователем
кнопучки OK / Yes / Save?

Функция сохранения может вызываться и по кнопочке Ok и по пунту в контекстному меню "Сохранить" <Ctrl+S> или <Enter> или <Ctrl+Enter> - все они имеют ModalResult := mrNone. В обработчике вызывается функция сохранения, и в конце этой функции пишется ModalResult := mrOk; после чего форма закрывается.

Делается так для того что бы если в функции сохранения вылетело исключение - то можно было бы как минимум посмотреть чего за данные мы там назаполняли.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128703
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И форм в autocreate у меня только 9 штук, включая главную форму и датамодули.
Остальные 255 форм создаются только вот таким методом - через функцию.
Соответственно обращаться к ним через переменную невозможно, этой переменной нет.
Вот эта вот
var
FrmSKL_POS_Edit: TFrmSKL_POS_Edit;
создается дельфями, но не используется т.к. нету autocreate.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128712
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Звучит подозрительно криво...

Не сказал бы. По мне - совершенно правильная схема. Ну разве что "сохранить" в контекстном меню - это оригинальная дизайнерская идея, а если в результате нажатия туда ещё и закрывается окно - тем более.
fraks
Функция сохранения может вызываться и по кнопочке Ok и по пунту в контекстному меню "Сохранить" <Ctrl+S> или <Enter> или <Ctrl+Enter> - все они имеют ModalResult := mrNone. В обработчике вызывается функция сохранения, и в конце этой функции пишется ModalResult := mrOk; после чего форма закрывается.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128731
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Если форма более монструозная и параметров/действий много - лично я делал отдельный метод Init (не конструктор!), который вызывался после создания и до Show[Modal].
Так никто не мешает все параметры упаковать в два record
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128732
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Гаджимурадов Рустам
Если форма более монструозная и параметров/действий много - лично я делал отдельный метод Init (не конструктор!), который вызывался после создания и до Show[Modal].
Так никто не мешает все параметры упаковать в два record

Имхо - два плохих решения.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128744
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня всё упаковано в интерфейсы. На вход форма принимает IParameters который фактически TDictionary<String, Variant> и ещё несколько типа режим, PK выбранной записи итд. Причем даже не форма, а нечто вроде ServiceLocator который выдаёт интерфейс для работы. Внутри там может быть несколько форм, разные формы, вообще не форма итд. После execute можно попросить данные результа. Выглядит вот так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
  var oiParams := MainApp.CreateParameters;

  oiParams.Add('partner', FHeader.Partner);
  oiParams.Add('owner', FHeader.Owner);
 
  var oiReference := MainApp.GetReference('sinvoice', GetParentForm(Self, False), Null, oiParams);
  if oiReference.Execute then
  begin
    oList := TIncList.Create;
    try
      oList.Duplicates := dupIgnore;
      oiReference.GetMarkedList(oList);
      AppendSInvoice(oList);
    finally
      FreeAndNil(oList);
    end;
  end;



В результате никакие формы в вызывающем коде не фигурируют вовсе, в uses не подключаются итд
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128750
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck,

В итоге ты лишился всех проверок, которые за тебя мог сделать компилятор
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128751
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

тем не менее, это шаг в правильном направлении. Осталось научиться совмещать то и другое и обойтись без лишних сущностей.

Контрольный вопрос, который на месте Михаила я бы себе задал - как часто у него в приложении повторяется такой код, как он привёл. Если один-два-три раза - почему бы и нет. Если "по разу на каждый вызов формы" - это, конечно, печально.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128753
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понимаю вопрос. Что значит сколько раз? Все "стандартные места" вообще сделаны ",декларативно", это как раз "кастомный вызов". Редакторы (формы редактирования) и вовсе никем из прикладников не вызываются вручную, все сослано в базовые формы. Сократить все вышепреведенное в единый метод? Возможно, но не вижу большого выигрыша.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128766
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> F5 он называется потому что ... по кнопке <F5> ...
fraks> в браузерах /// идет обновление

Боюсь спросить, как называлась бы процедуры,
которые людям привычны по Alt+F4, Windows+D и т.д. :)

fraks> Наружу и формы ничего не торчит т.к. эта функция, в которой
fraks> создается и вызывается форма - она в модуле формы и есть.

Да, вижу, виноват, недосмотрел. Тогда непонятно, зачем
в ней вручную контролы безусловно настраиваются, если
они никак от входного параметра (id) не зависят - лучше
всё что можно настроить в дизайн-тайм. Но не суть.


_Vasilisk_> Так никто не мешает все параметры упаковать в два record

Ну да, и получить вместо длинного списка параметров
один длинный рекорд. Те же Фаберже, но в профиль.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128770
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам

fraks> Наружу и формы ничего не торчит т.к. эта функция, в которой
fraks> создается и вызывается форма - она в модуле формы и есть.

Да, вижу, виноват, недосмотрел. Тогда непонятно, зачем
в ней вручную контролы безусловно настраиваются, если
они никак от входного параметра (id) не зависят - лучше
всё что можно настроить в дизайн-тайм. Но не суть.

Контролы настраиваются в зависимости от Fmode.
Для создания формы есть несколько подобных функций.

Тут функция для редактирования

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function SKL_POS_Edit(id: integer): boolean; // Редактирование места хранения
begin
  with TFrmSKL_POS_Edit.Create(Application) do begin
    Fid     := id;
    Fmode   := 1; // режим открытия окна 0 - просмотр; 1 - изменение существующего; 2 - создание
    Caption :=  format('Адрес хранения [%.0n]', [ Fid *1.0 ]);
    //
    PageControl.ActivePageIndex := 0;
    ActiveControl := Edit_POSIT;
    F5;
    Edit_EAN13.Enabled := True;
    Edit_NDOK.Enabled  := True;



При редактировании поля про EAN13 и NDOK смысл имеют, а вот при создании - нет.
Поэтому в этом же юните для этой же формы есть другая функция, с другими параметрами.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
function SKL_POS_Create(id_skl_skl, id_parent: integer; var id: integer): boolean; // Создание места хранения
begin
  with TFrmSKL_POS_Edit.Create(Application) do begin
    Fid_skl_skl := id_skl_skl;
    Fid_parent  := id_parent;
    Fmode       := 2; // режим открытия окна 0 - просмотр; 1 - изменение существующего; 2 - создание
    Caption     := 'Место хранения - Создание';
    //
    PageControl.ActivePageIndex := 0;
    ActiveControl := Edit_POSIT;
    FillCreateParam; // заполним контролы чем сможем
    Edit_EAN13.Enabled := False;
    Edit_NDOK.Enabled  := False;
    //
    Result := ShowModal = mrOk;
    id := Fid; // вернем id созданного элемента
    //
    Free;
  end;//with
end;
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128772
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> Контролы настраиваются в зависимости от Fmode.

Во-первых, этого нигде в процедуре не видно.
Во-вторых, Fmode это в принципе не входной
параметр процедуры. В общем, не по сабжу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128791
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks,

у меня все формы являюся наследниками от базовой.
У меня бы подобный пример выглядел бы так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
class function TFrmSKL_POS_Edit.ShowForm(id_skl_skl, id_parent: integer; var id: integer): boolean; // Создание места хранения
begin
  Result := false;
  with Create(Application) do 
  try
    Fid_skl_skl := id_skl_skl;
    Fid_parent  := id_parent;
    Fmode       := 2; // режим открытия окна 0 - просмотр; 1 - изменение существующего; 2 - создание
    Caption     := 'Место хранения - Создание';
    //
    PageControl.ActivePageIndex := 0;
    ActiveControl := Edit_POSIT;
    FillCreateParam; // заполним контролы чем сможем
    Edit_EAN13.Enabled := False;
    Edit_NDOK.Enabled  := False;
    //
    Result := ShowModal = mrOk;
    id := Fid; // вернем id созданного элемента
    //
  finally
    Free;
  end;//with
end



И вызов для каждой формы соответственно свой
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128792
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну похоже на мой вариант.

Только у меня заполнение отдельным методом,
ну и есть Fmode для "просмотора с выбором".

P.S. id := Fid почему-то не зависит от ModalResult.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128819
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Ну да, и получить вместо длинного списка параметров
один длинный рекорд. Те же Фаберже, но в профиль.
Чем это хуже специального метода Init()? Куда нужно передать все те же параметры
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128859
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_> Чем это хуже специального метода Init()?

Моё предложение было Init vs Create, точнее,
Create + Init(LongParams) vs Create(LongParams),
а ты предлагаешь LongParams в рекорд упаковать
(что ИМХО не лучше, а хуже).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128865
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
а ты предлагаешь LongParams в рекорд упаковать
(что ИМХО не лучше, а хуже)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
// вариант 1
Execute(< ...20 параметров ... >);

// вариант 2
Init(< ...20 параметров ... >);
Execute;

// вариант 3
Execute(TRecord.Create(< ...20 параметров ... >));


Имхо, обсуждение, что лучше, а что хуже - достаточно бессмысленно. Единственный плюс третьего - эти 20 параметров можно одним движением передать в какую-то третью подпрограмму, главный минус - дополнительно громоздкий код, а в остальном они одинаковые.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128866
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

Я предлагаю вместо Create + Init(LongParam) + ShowModal использовать Create + Execute(LongParam). А паковать ли LongParam в структуру - это уже дело вкуса.

А вот Init имеет смысл если объект формы переживает более одного ShowModal и в Init задавать те параметры, которые не будут меняться при показах. Короче полный аналог конструктора, но не конструктор
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128867
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не вижу выгоды в использовании record который создаётся через конструктор этого рекорда с параметрами. Тогда как вариант типа
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var
  oiSelector: IRecordSelector;
  rParams: TSelectorParams;
begin
  rParams.Options    := [TSelectorOption.UseCache];
  rParams.DataSet    := mtMTypeEdit;
  rParams.ID         := dbcMType.Value;
  rParams.TableName  := 'mtype';
  rParams.Columns := [rColumn];

  oiSelector := MainApp.GetSelector(Self, rParams);
  if oiSelector.Execute then
  begin
    dbcMType.Value := oiSelector.DocumentID;
  end;



несмотря на некоторую многословность, обладает самодокументированностью. Нет ничего хуже чем ковыряться в списке из 20 параметров, особенно если часть из них булевые флаги. Строки ExecProc(True, True, False, True, nil, '', 0) это прямо скажем плохой стиль.
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128927
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_> Я предлагаю вместо Create + Init(LongParam) + ShowModal
_Vasilisk_> использовать Create + Execute(LongParam).

А, чтобы ShowModal вручную не вызывать...
ИМХО, это дело вкуса, третьестепенный вопрос.

> А вот Init имеет смысл если объект формы переживает
> более одного ShowModal и в Init задавать те параметры,
> которые не будут меняться при показах.

Многоразовые тоже были (IIRC, просмотрщики
OLE и пр. медийки у меня были именно такие),
но были ли там долгоживущие параметры - не
помню, лень проверять. ИМХО это не так важно.

Вообще сама мысль "мы сделаем в Init/Execute
Show[Modal], чтобы не вызывать его отдельно"
не очень понятна (плюсов кроме экономии 1
строчки кода как-то незаметно).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача параметров в форму
    #40128928
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck> несмотря на некоторую многословность,
Michael Longneck> обладает самодокументированностью.

Дык не надо чураться комментариев.
Это, конечно, документирование, а не
самодокументирование, но не западло.


Michael Longneck> Нет ничего хуже чем ковыряться в списке из
Michael Longneck> 20 параметров, особенно если часть из них
Michael Longneck> булевые флаги. ... это прямо скажем плохой стиль.

+146%
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача параметров в форму
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]