Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обращение к дочерней форме MDI из модальной. Обращение к дочерней форме MDI 
:(
    Опции темы
AlexV1
Дата 26.2.2003, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 27.1.2003

Репутация: нет
Всего: нет



Есть приложение MDI, в котором главная форма frmMain (fsMDIForm),
дочерняя форма frmChld1 (fsMDIChild) и третья - не главная и не дочерняя,
а совершенно отдельная форма frmMyDialog (fsNormal).
Форма frmMyDialog вызывается из frmChld1 по кнопке. Затем из frmMyDialog нужно
обратиться к контролу lblTitle формы frmChld1. Как это правильно сделать ?
Если так:
frmChld1.lblTitle.caption:=...,
то во время выполнения программы выдает Access Violation ...
Может через главную форму frmMain типа
frmMain.Children[1].lblTitle.caption:=...
Но так нельзя, не находит lblTitle.
PM MAIL   Вверх
SmaLL
Дата 26.2.2003, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 557
Регистрация: 17.12.2002
Где: Voronezh

Репутация: 1
Всего: 2



Цитата(AlexV1 @ 26.2.2003, 07:47)

Может через главную форму frmMain типа
frmMain.Children[1].lblTitle.caption:=...
Но так нельзя, не находит lblTitle.

Если обращаться через главную форму, то надо писать так
Код

(frmMain.Children[1] as TfsMDIChild).lblTitle.caption:=...

А вообще это плохой метод, лучше пересмотреть логику программы.



--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
AlexV1
Дата 26.2.2003, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 27.1.2003

Репутация: нет
Всего: нет



Цитата
(frmMain.Children[1] as TfsMDIChild).lblTitle.caption:=...


Так уже пробовал. Не работает

PM MAIL   Вверх
SmaLL
Дата 26.2.2003, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 557
Регистрация: 17.12.2002
Где: Voronezh

Репутация: 1
Всего: 2



Тебе обязательно из модальной формы менять капшн чилдрена?
Может лучше пусть сам чилдрен меняет свой капшн? Пусть модальное окно возвращает какое-нибудь значение после закрытия, а чилдрен будет его брать и совать в свой капшн.


--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
AlexV1
Дата 26.2.2003, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 27.1.2003

Репутация: нет
Всего: нет



Лучше бы сразу из модального окна суваться в дочернее.

Если перестроить логику программы, то как ?
Есть гл.форма MDI и несколько дочерних окон.
В одной из дочерних окон нужно сделать кнопку вызова модальной формы настроек, причем изменение настроек в модальной форме должны тут же отображаться в дочерней форме, из которой была вызвана форма настроек.
PM MAIL   Вверх
SmaLL
Дата 26.2.2003, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 557
Регистрация: 17.12.2002
Где: Voronezh

Репутация: 1
Всего: 2



Цитата(AlexV1 @ 26.2.2003, 09:44)
Лучше бы сразу из модального окна суваться в дочернее.

Конечно лучше - если по быстрому, но это плохой стиль программирования.
А спешка, как говориться нужна при ловле блох. wink.gif
Лучше если модальная форма не будет знать ничего о вызвавшей еЁ дочерней форме.
Если, например, ты захочешь использовать это же модальное окно для настроек какого-нибудь другой дочерней формы, то модальная форма должна будет знать обо всех дочерних формах. А это лишний код, низкая гибкость и т.д. и т.п.
Цитата
Если перестроить логику программы, то как ?
Есть гл.форма MDI и несколько дочерних окон.
В одной из дочерних окон нужно сделать кнопку вызова модальной формы настроек, причем изменение настроек в модальной форме должны тут же отображаться в дочерней форме, из которой была вызвана форма настроек.

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

Pref.Values['caption']:= 'Caption from modal window';
Pref.Values['PosX']:= '10';
Pref.Values['PosY']:= '15';
.....

Потом в дочерней форме после вызова модальной формы можно прочитать эти значения:
Код

 MDIChild.Caption:= Values['caption'];
 MDIChild.Left:= Values['PosX'];
 MDIChild.Top:= Values['PosY'];
...



--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
AlexV1
Дата 26.2.2003, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 27.1.2003

Репутация: нет
Всего: нет



ok. Понятно.
Thanks!
PM MAIL   Вверх
Il'ya
Дата 27.2.2003, 03:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вопрос где USES. :-)
  Вверх
Sluggard
Дата 23.4.2003, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 17.4.2003
Где: Kazan

Репутация: нет
Всего: нет



К дочернему окну можно обратится из любого окна можно по имени, номеру или к актвному (это чаще всего)

if not (ActiveMDIChild = Nil) then
if ActiveMDIChild is TMDIChild then
with TMDIChild(ActiveMDIChild) do
begin
// Давайте запишем что нибудь в активную форму
end;
PM MAIL ICQ   Вверх
Dapo
Дата 24.4.2003, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 18.4.2002

Репутация: нет
Всего: 1



Цитата(SmaLL @ 26.2.2003, 16:29)
....
Если, например, ты захочешь использовать это же модальное окно для настроек какого-нибудь другой дочерней формы, то модальная форма должна будет знать обо всех дочерних формах. А это лишний код, низкая гибкость и т.д. и т.п.
....

Надо полагать, что форма настроек у тебя создается динамически? Может такой вариант: При создании формы указываешь ей в качестве Owner-a ту форму настройки которой хочешь изменить... И через Owner влияешь... :-) Чем плохо? Нет лишнего кода и гибко.
PM MAIL   Вверх
Dapo
Дата 24.4.2003, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 18.4.2002

Репутация: нет
Всего: 1



Я цитировал Small-a потому что не согласен по поводу "...должна знать обо всех дочерних формах...". Извиняюсь за лишний топ.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.