Форум: "Начинающим";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];
ВнизMDI окно и хэндл Найти похожие ветки
← →
D@nger (2008-06-03 13:13) [0]Здравствуйте мастера! Подскажите пожалуйста, как, зная хэндл дочернего MDI окна, получить доступ к его свойствам и методам из родительского MDI окна? Пробовал так:
TmyMDIChild(mdihandle).Windowstate:=wsMaximized;
Выходит ошибка....
← →
D@nger (2008-06-03 13:21) [1]вернее ничего не происходит....никакой реакции...
← →
ZENsan © (2008-06-03 13:40) [2]Попробуй TForm(FindControl(mdihandle)).WindowState := wsMaximized;
← →
AndreyV © (2008-06-03 13:49) [3]Искать в цикле
i := 0;
while ((i < MDIChildCount) and (MDIChild[i].Handle <> mdihandle)) do inc(i);
if (i < MDIChildCount) then MDIChild[i].WindowState := wsMaximized;
← →
D@nger (2008-06-03 13:52) [4]вобщем мне это нужно для активизации дочерних окон из меню...
если окно не свернуто ты вывести его на передний план я делаю так:BringWindowToTop(MdiHandle);
а если окно свернуто то оно таким методом не восстонавливается...
Как его восстановить имя хендл окна?
← →
clickmaker © (2008-06-03 13:56) [5]ShowWindow(Handle, SW_RESTORE)?
← →
Юрий Зотов © (2008-06-03 13:58) [6]> D@nger (03.06.08 13:13)
Хэндл окна - это не объект, а просто число. Поэтому приведениеTmyMDIChild(mdihandle)
неверно и выдает ошибку.
А вот так будет правильно:var
Control: TWinControl;
begin
Control := FindControl(mdiHandle);
if not (Control is TmyMDIChild) then
raise Exception.Create("Дочерняя форма не найдена");
TMyMDIChild(Control).Windowstate := wsMaximized;
← →
AndreyV © (2008-06-03 14:02) [7]А хендл ты откуда берёшь? Может проще работать непосредственно с экземплярами TForm.
← →
D@nger (2008-06-03 14:04) [8]
> AndreyV © (03.06.08 14:02) [7]
> А хендл ты откуда берёшь? Может проще работать непосредственно
> с экземплярами TForm.
хэндл я записываю в массив при создании формы
← →
AndreyV © (2008-06-03 14:08) [9]> [8] D@nger (03.06.08 14:04)
> > А хендл ты откуда берёшь? Может проще работать непосредственно
> > с экземплярами TForm.
>
> хэндл я записываю в массив при создании формы
Этот массив и так автоматически поддерживается, только с указателями на TMyMDIChild.
← →
ZENsan © (2008-06-03 14:18) [10]А Зачем тебе это всё? Если у MdiForm есть ObjectMenu свойство, которое всё это уже делает...
← →
DiamondShark © (2008-06-03 14:18) [11]
> хэндл я записываю в массив при создании формы
Прямо как в том анекдоте: "...только в гамаке и на лыжах".
А что б тебе в массив ссылку на экземпляр TForm не записывать? Или готовым MDIChildren пользоваться?
← →
D@nger (2008-06-03 14:28) [12]
> ZENsan © (03.06.08 14:18) [10]
> А Зачем тебе это всё? Если у MdiForm есть ObjectMenu свойство,
> которое всё это уже делает...
а как этим воспользоваться? привидите пример кода пожалуйста...
у меня в главном меню список дочерних окон...цель активировать нужное окно при клике в меню на соответствующее название окна...
сейчас у меня это выглядет так...
if isIconic(mdihandle) then showwindow(mdihandle,1)
else bringWindowtoTop(mdihandle);
может есть более красивое решение...
← →
DiamondShark © (2008-06-03 14:50) [13]
> А Зачем тебе это всё? Если у MdiForm есть ObjectMenu свойство
Ты имел в виду WindowMenu? ObjectMenu -- несколько для других целей.
> а как этим воспользоваться? привидите пример кода пожалуйста.
> ..
Да там, собственно, и кода никакого не надо. Просто в дизайнере укажи в какой пункт меню будет добавляться список дочерних окон.
← →
ZENsan © (2008-06-03 15:04) [14]Da da..imenno.
← →
ZENsan © (2008-06-03 15:08) [15]берешь ActionManager -> New standard action -> Window (закрашиваешь все)
Нажимаешь ок. Добавляешь этот Window елемент к главному меню главной формы. Форме WindowMenu := присваиваешь этот меню эелемент Window1 (или как назовешь). Всё вроде..
← →
ZENsan © (2008-06-03 15:12) [16]Кстати на счёт массивов совет. Пиши не в массив а в TList.
List.Add(Self) - OnCreate;
List.Remove(Self) - OnClose;
Гораздо проще потом будет.. Никаких там SetLength/Length...
← →
Amoeba © (2008-06-03 15:49) [17]
> Пиши не в массив а в TList.
Лучше в TObjectList.
← →
ZENsan © (2008-06-03 16:50) [18]А это уже от ситуации зависит..
← →
MsGuns © (2008-06-03 17:02) [19]Хэндлы, массивы, обжектлисты.. Зачем все это.
Для решения задачи в [4] достаточно по событию нажатия соотв.кнопки (пункта меню) динамически опросить все дочерние окна (MDIChildCount, MDIChildren) и составить список подменю с их титулами, который и показать. Индекс выбранного пункта и укажет индекс "дочки" в списке, по которому можно к ней обратиться для активации
← →
ZENsan © (2008-06-03 17:07) [20]
> динамически опросить все дочерние окна (MDIChildCount,
> MDIChildren) и составить список подменю с их титулами, который
> и показать.
Зачем если это уже давно всё реализовано в дельфи и только надо ленивыми ручками ыто вставить... А про листы это мы не по тому вопросу писали. Читай чуть внимательней.
← →
MsGuns © (2008-06-03 21:24) [21]>ZENsan © (03.06.08 17:07) [20]
Согласен, просмотрел ;)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.039 c