![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 12.09.2007
Сообщений: 34
|
![]()
Есть 2 формы, обе MDIChild:
Первая форма: Код:
Код:
1. Почему? По логике вещей по указателю на экземпляр класса я должен иметь возможность нормально работать с ним. 2. Каким образом можно это реализовать (обращение к методу другой MDIChild формы)? |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 26.03.2012
Сообщений: 665
|
![]()
Зачем вам вообще указатель - PDBase = ^TDBase;?
И по описанию вашей логики, я понял, что TRecordEditor должен быть показыватся модально, нет? |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 26.03.2012
Сообщений: 665
|
![]()
А в принципе я бы тут сделал не так, либо mvc прикрутил, либо на худой конец class function добавил в TRecordEditor.
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 12.09.2007
Сообщений: 34
|
![]()
Постараюсь полностью описать что хочу сделать:
Необходимо разработать редактор баз данных состоящий из 2 частей - формы с набором записей в базе данных и формы для редактирования данных записей. Реализовать все в одной форме не получается, т.к. некоторых базы содержат в себе несколько десятков полей, пользователь просто запутается в них. Для реализации этого создал 2 формы: Форма TDBase, которая отображает все записи в базе данных. Форма отображает все записи базы данных, путь к которой хранится в переменной vBase. Список полей, которые необходимо отобразить, хранятся в одноименном ini файле. По клику на конкретную запись открывается форма TRecordEditor, которая позволяет отредактировать выбранную запись. Форма TRecordEditor - отображает полностью всю запись с возможностью редактирования. По закрытию этой формы данные сохраняются, после чего форма, из которой была открыта запись, должна обновиться (чтоб пользователь увидел результаты изменения записи). За обновление формы у меня отвечает метод Load формы TDBase. Вот какраз в обновлении формы TDBase после закрытия формы TRecordEditor и возникает проблема. В моем понимании - форма TRecordEditor должна содержать указатель на форму из которой она была вызвана (форму-родитель), для того чтоб знать, какую именно форму надо обновить после закрытия. Имея указатель на форму-родитель, я вызываю метод формы родителя (Href^.Load, где Href - указатель на форму-родитель). Метод вызывается нормально - но главная гадость - метод не видит внутренних переменных экземпляра класса (т.е. эту самую переменную vBase формы TDBase). Почему так происходит - понять не могу ![]() class function - не устраивает, т.к. во первых экземпляр формы у меня уже создан, во вторых - метод работает с внутренними переменными класса и объектами, размещенными на форме. Не хотелось-бы переписывать и адаптировать. mvc - придется все переделывать. Не хотелось-бы, но если альтернатив нет - куда ж деться. П.С. TRecordEditor - не модальная. Последний раз редактировалось Aiden; 28.04.2012 в 16:16. |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Что мешает, если уж пошли по такому пути, свойство сделать типа TDBase? И загнать в него из 1-ой формы DBase или Self, которые и так уже указатели. Можно и конструктор 2-ой формы переопределить и передать ему в качестве параметра это же.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 26.03.2012
Сообщений: 665
|
![]()
Для того чтобы вызвать метод формы указатель как "собаке пятая нога", vHref : TDBase вот так достаточно, а указатели удалите, чтобы не сталкиватся там где не надо.
Про модальность я так и не понял, вы даете возможность редактировать сразу 100 записей за раз, и в чем прикол? Я еще понимаю когда окно редактирования одно (не модальное) но на кой их сразу куча? |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 12.09.2007
Сообщений: 34
|
![]()
Модальность не устраивает тем, что пока модальное окно не закроешь - в другую базы не залезть. Зачем надо в другую базу лезть если редактируешь одну из записей - не понятно. Поэтому запрет на редактирование нескольких записей устанавливаю через перебор дочерних окон с проверкой свойства Base. Если форма TRecordEditor с свойством Base, равным свойству Base формы TDBase уже существует - просто вывожу предупреждение.
Заменил указатель на TDBase - все работает. Большое спасибо. Последний раз редактировалось Aiden; 28.04.2012 в 16:46. |
![]() |
![]() |
![]() |
#8 | |
Форумчанин
Регистрация: 26.03.2012
Сообщений: 665
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Быстрый вызов метода формы из другого потока | Swarog | Общие вопросы Delphi | 3 | 21.05.2011 20:34 |
Вызов переменной из другой формы | pavellyba | Общие вопросы Delphi | 2 | 26.03.2011 12:42 |
Вызов переменной из другой формы | darkahoy | Общие вопросы .NET | 8 | 19.11.2010 14:46 |
delphi вызов одной формы из другой | hi-end1 | Помощь студентам | 4 | 17.10.2009 19:53 |
Работа с компонентами и их вызов из другой формы | Патрон | Общие вопросы Delphi | 3 | 09.12.2008 04:20 |