powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача параметров в форму
16 сообщений из 41, страница 2 из 2
Передача параметров в форму
    #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
16 сообщений из 41, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача параметров в форму
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (2): Анонимы (1), Bing Bot 9 мин.
Читали форум (3): Анонимы (1), Bing Bot, Yandex Bot 3 мин.
Пользователи онлайн (9): Анонимы (6), Bing Bot, RePredeclared, Yandex Bot 2 мин.
x
x
Закрыть


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