Конференция "Начинающим" » Получить ссылку на объект по его методу [D7, D2005, XP, 2003]
 
  • Дмитрий (08.08.17 18:10) [0]
    Имею датасет в модуле данных.
    Имею функцию, которая создает стандартные формы-таблицы.
    Создаю такую форму, которая среди прочего содержит метод FilterRecord, который присваиваю датасету в процессе инициализации формы.

    Как пользуясь ссылкой FilterRecord, получить ссылку на форму?
  • Игорь Шевченко © (08.08.17 18:48) [1]
    TMethod(FilterRecord).Data ?
  • Дмитрий (08.08.17 19:30) [2]
    Благодарю, сработало.
  • Германн © (09.08.17 01:01) [3]

    > Создаю такую форму, которая среди прочего содержит метод
    > FilterRecord

    Любому методу формы передается неявный параметр Self, содержащий ссылку (указатель) на конкретный экземпляр данного класса формы, в котором вызван сей метод. Может это та самая печка, от которой и нужно плясать в данной задаче?
  • Rouse_ © (09.08.17 13:51) [4]
    Сереж, а если инстанс класса не является наследником формы, то что ему приходится делать? :)
  • Дмитрий (09.08.17 18:17) [5]

    > Любому методу формы передается неявный параметр Self,

    Насколько я понимаю, для этого нужно вызвать метод формы и изнутри параметр Self будет доступен.
    Указатель требуется вне контекста формы для ее активации.
    Ее вообще может еще не быть, тогда она создается.
    Если она есть, по указателю форма выводится  на передний план.
  • Германн © (10.08.17 00:54) [6]

    > Rouse_ ©   (09.08.17 13:51) [4]

    Саш, в топике чётко было указано, что FilterRecord это метод формы. Если автору использование Self не подходит по неким соображениям, то это его дело.

    P.S. Мне только не очень нравится, что некий датасет в модуле данных в качестве обработчика своего события имеет метод некоей формы, которая может быть ещё и не создана. А если и создана, то неизвестно когда, зачем и почему? И её приходится искать по ссылке на метод.
    Но это только моё ИМХО.
  • Дмитрий (11.08.17 16:44) [7]
    Мне самому не очень нравится.
    На тот момент иначе не придумал.
    Какая-то проблема с присвоением процедурного типа.
    Привязал метод к форме.
  • Дмитрий (11.08.17 17:48) [8]
    Переменные связанные только с формой тоже используются в фильтрации.
  • Leonid Troyanovsky © (13.08.17 13:54) [9]

    > Дмитрий   (11.08.17 16:44) [7]

    > Какая-то проблема с присвоением процедурного типа.

    Проблем нет: присваивают  метод, а не обычную (регулярную) процедуру.

    Ну, и датамодулю знать о формах необязательно.
    Проще наоборот:  формы используют (uses) датамодуль.

    Да, и если где-то хранятся ссылки на то, что может быть уничтожено,
    необходимо пользоваться механизмом Notification, RTFM.

    --
    Regards, LVT.
  • Германн © (14.08.17 01:31) [10]

    > Проще наоборот:  формы используют (uses) датамодуль.

    В данном случае даже не только проще, но и логичнее. О каком OnFilterRecord может идти речь, если нет формы, в которой пользователь может задать параметры фильтра?
  • Дмитрий (14.08.17 15:31) [11]
    Когда пользователь задает параметр фильтра форма уже есть.
    Иначе у пользователя не выйдет.

    Ссылки не хранятся, но возможна попытка повторного создания формы с использованием того же датасета.
    Когда-то планировалась такая возможность, из которой путного не выросло.
  • Германн © (15.08.17 03:01) [12]

    > Дмитрий   (14.08.17 15:31) [11]
    >
    > Когда пользователь задает параметр фильтра форма уже есть.
    >
    > Иначе у пользователя не выйдет.
    >
    > Ссылки не хранятся, но возможна попытка повторного создания
    > формы с использованием того же датасета.
    > Когда-то планировалась такая возможность, из которой путного
    > не выросло.
    >

    Вот насчёт "повторного создания формы с использованием того же датасета" стоит объясниться.
    Эти формы сами что-ли живут своей жизнью и создаются, когда им вздумается?
  • Inovet © (15.08.17 03:57) [13]
    > [11] Дмитрий   (14.08.17 15:31)
    > но возможна попытка повторного создания формы с использованием
    > того же датасета

    А нужен ли датамодуль в этом случае. Размещай датасеты на форме.
  • Дмитрий (15.08.17 18:42) [14]
    Есть у меня набор функций, которые создают типовую форму-таблицу.
    В том числе список для выбора.
    Датасет передается как аргумент в функцию, сам может лежать где угодно.
  • Германн © (16.08.17 02:25) [15]

    > Дмитрий   (15.08.17 18:42) [14]
    >
    > Есть у меня набор функций, которые создают типовую форму-
    > таблицу.
    > В том числе список для выбора.

    Очень похоже на описание конструктора Lego. Но не на программу.
  • Дмитрий (17.08.17 14:07) [16]
    Разумеется, ведь модульность это только для Лего.
    Стандартизация вообще к программированию никак и нигде.
  • Leonid Troyanovsky © (17.08.17 14:45) [17]

    > Дмитрий   (17.08.17 14:07) [16]

    > Стандартизация вообще к программированию никак и нигде.

    Не знаю как тут со стандартизацией, но  в  [14] подход явно не "наш".

    Бо, обычно объекты создают не функциями (регулярными), а
    конструкторами (пусть даже наборами конструкторов).

    Вот когда определен правильный дизайн, тогда и становится неважным,
    где  находится нофелет, т.к. для формы  важнее  источник данных.

    --
    Regards, LVT.
  • Германн © (18.08.17 01:54) [18]

    >  Дмитрий   (17.08.17 14:07) [16]
    >
    > Разумеется, ведь модульность это только для Лего.
    > Стандартизация вообще к программированию никак и нигде.
    >

    Вот такая "модульность" это как раз Лего. Когда тупо смотришь на модуль и думаешь как бы его пристроить, чтобы получилось хоть что-то.
    В программировании всё-таки "модули" создаются осознанно. Для конкретных целей.
 
Конференция "Начинающим" » Получить ссылку на объект по его методу [D7, D2005, XP, 2003]
Есть новые Нет новых   [86759   +21][b:0.001][p:0.002]