Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
Нубский вопрос. Может даже не по uniGUI, а по ООП и Delphi. Уж не кидайтесь камнями Есть фрейм (форма редактирования объявления) и есть модуль данных с наборами данных. Фрейм может быть создан несколько раз, т.е. разные экземпляры одного типа, но в зависимости от вида объявления, нужно показывать те или иные поля, например, Цена1 или Цена2. Есть поле у фрейма для datamodule Код: pascal 1. 2. при создании фрейма создается и модуль данных Код: pascal 1. и вот тут проблема: когда создается второй фрейм, то при создании модуля данных он не создается, а переменная dm получает тут первый, ранее созданный модуль данных. А должно быть 2 разных экземпляра модуля данных. Т.е. на каждый фрейм свой экземпляр модуля данных. Как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 18:17 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
X11 когда создается второй фрейм, то при создании модуля данных он не создается, а переменная dm получает тут первый, ранее созданный модуль данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 18:28 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
в датамодуле нет глобальной переменной P.S. у фрейма тоже нет глобальной переменной ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 18:30 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
Ради эксперимента сделал на фрейме кнопку Код: pascal 1. 2. 3. 4. 5. создаю 2 фрейма нажимаю ее у второго фрейма, и переключаюсь на первый и вижу, что LookupCombobox, привязанный к qTypes пустой, т.е. датасет закрыт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 18:33 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
Ищи ошибку. Если у тебя датамодуль не реализован в виде синглтона, то должно нормально работать всё. Сказок не бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 18:46 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
Нету синглтона. И фрейм тоже не синглтон. я сам в шоке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 18:53 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
В общем, так. Пришлось добавить уникальность имени Код: pascal 1. Я так понял, что визуальные элементы цеплялись по имени к уже существующему модулю. Но я не понимаю, ведь переменная объявлена в секции private ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 20:21 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
X11 просто фанат фреймов. По иному ты не можешь писать код ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 20:49 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
в uniGUI удобнее именно так кстати их мега-демо, который всё в одном именно на фреймах и построен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 21:14 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
X11 и вот тут проблема: когда создается второй фрейм, то при создании модуля данных он не создается, а переменная dm получает тут первый, ранее созданный модуль данных. Я думаю, что ты нам бессовестно лжёшь Если выполняется строка dm := TDmEditObjects.Create(self) (то есть на неё можно поставить брейкпоинт, и выполнение на неё придёт), то новый модуль данных таки создаётся. Это можно проконтролировать в отладчике, засунув в watch выражение pointer(dm). Чтобы добиться такого поведения, как ты говоришь, нужно перекрывать метод NewInstance, чего в твоём модуле данных, я уверен, никто не делал. Есть другой эффект, который, скорее всего, и происходит. У модуля данных есть свойство Name. Когда создаётся первый модуль данных, оно получает значение "dmEditObjects". Когда создаётся второй модуль данных, в Self уже есть компонент с именем dmEditObjects - поэтому свойство Name нового модуля устанавливается в dmEditObjects_1. Когда создаётся третий - в dmEditObjects_2 итп. А вот теперь надо понять, как работает сериализация. В твоём фрейме используются компоненты из модуля данных. В dfm это записано примерно так: Datasource = dmEditObjects.Query123. Когда фрейм создаётся, парсер читает dfm, доходит до этой ссылки, ищет компонент с именем "dmEditObjects", находит, ищет в нём компонент с именем "Query123", снова находит - и в результате все фреймы, сколько бы их ни было, оказываются завязаны на первый из созданных модулей данных. Как следствие, они показывают одно и то же и ты интерпретируешь это как "создаётся только один модуль". Последний вопрос - как избавиться от этой проблемы и сделать всё как надо. Тут есть варианты. Самые тупые разработчики откажутся от использования модулей данных и будут создавать все запросы кодом в ран-тайме либо побросают их на фрейм. Чуть более адекватные - создадут модуль данных, после чего руками привяжут все ссылки на него, примерно так: Код: pascal 1. 2. 3. 4. Ну а правильный метод очевиден, если прочитать предыдущий рассказ: нужно создать модуль данных, дать фрейму инициализироваться (прочитать и проинтерпретировать dfm) и после этого убрать у модуля свойство Name: Код: pascal 1. Тогда следующий созданный модуль данных снова получит имя DmEditObjects, фрейм правильно привяжется и всё будет в порядке. Для того, чтобы сбрасывать это свойство, удобнее всего доопределить у фрейма метод Loaded и делать там это присваивание после inherited. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 21:32 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
softwarerПоследний вопрос - как избавиться от этой проблемы и сделать всё как надо. Тут есть варианты. Самые тупые разработчики откажутся от использования модулей данных и ... побросают их на фрейм. Чуть более адекватные - создадут модуль данных, после чего руками привяжут все ссылки на него Всегда было интересно - а чем лучше "умный правильный адекватный" метод "тупого бросания их на фрейм" (ну кроме патологических случаев когда компонентов 148)? Про контейнеры невизуальных компонент молчу, это вопрос сбоку. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 21:47 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
softwarer, спасибо как я уже написал, дело в name но все же... экземпляр живет ведь в секции private или это все (видимость) касается лишь редактора кода, а в исполняемом скомпилированном файле нет никаких private/public и т.д.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 21:49 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
softwarer Самые тупые разработчики откажутся от использования модулей данных я не согласен ибо нужно смотреть на каждый частный случай например, зачем создавать модуль данных для одного единственного набора данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 21:50 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
X11 экземпляр живет ведь в секции private Экземпляр живёт в оперативной памяти, по какому-то адресу. Указатель на экземпляр живёт в секции private. Другой указатель на экземпляр живёт в списке Self.Components (где Self - тот компонент, который передаётся как Owner в модуль данных). Вся сериализация идёт через второй указатель. Первый можно вообще грохнуть, и это ни на что не повлияет (ну, точнее, повлияет только на те строки программного кода, которые к нему прямо обращаются. если их нет, то программа отлично будет компилироваться и работать и без него). X11 а в исполняемом скомпилированном файле нет никаких private/public и т.д.? Конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 21:54 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам а чем лучше "умный правильный адекватный" метод Ровно тем же, чем отделить Class1 от Class2, а Unit1 от Unit2 лучше, чем держать их вместе. Если ты не сторонник подхода "всегда делать любое приложение в одном файле", то, наверное, сам ощущаешь, когда лучше разделить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2021, 21:59 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
X11 переключаюсь на первый и вижу, что LookupCombobox, привязанный к qTypes пустой, т.е. датасет закрыт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 16:58 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
Никак. Я имел ввиду TUniDBLookupComboBox. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 17:03 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
X11 Никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 17:07 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
softwarer> Ровно тем же, чем отделить Class1 от Class2, softwarer> а Unit1 от Unit2 лучше, чем держать их вместе. Это не ответ. В Class1/Unit1 должно быть то, что относится к ним, а в Class2/Unit2 должно быть то, что относится к ним. Возвращаясь к конкретному вопросу - откуда категоричная уверенность, что "токмо DataModule, без него никак, иначе разработчики тупые" ? P.S. Поскольку формулировка была несколько другая - уточняю - именно так оно и воспринимается, когда кто-то говорит "самые тупые разработчики побросают на фрейм". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2021, 17:13 |
|
||
|
Создание Datamodule при создании формы (во фрейме)
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Это не ответ. Это ответ на тот вопрос, который ты задал. Гаджимурадов Рустам откуда категоричная уверенность, что "токмо DataModule, без него никак, иначе разработчики тупые" ? Не знаю. Ты это придумал - ты и скажи, откуда она. Гаджимурадов Рустам P.S. Поскольку формулировка была несколько другая - уточняю - именно так оно и воспринимается, когда кто-то говорит "самые тупые разработчики побросают на фрейм". Я отвечаю за то, что я сказал, но не отвечаю за то, что вы услышали. В вопросе модуль данных задан как исходное - то есть, он нужен, или, по крайней мере, автор считает, что нужен. Разработчика, который откажется от модуля данных там, где он нужен, и побросает на фрейм потому, что кривизна рук не позволяет сделать нормально, я считаю... не очень грамотным, назовём так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2021, 10:52 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40057457&tid=2037461]: |
0ms |
get settings: |
6ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
131ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 458ms |

| 0 / 0 |
