Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
11-1190376210
misha_shar
2007-09-21 16:03
2008.06.29
Вызов ExeL


2-1212430785
S@shka
2008-06-02 22:19
2008.06.29
Как реализуется подобная вещь...


2-1212391029
Igor
2008-06-02 11:17
2008.06.29
String to Ole


2-1212143583
Сергей
2008-05-30 14:33
2008.06.29
Как описать процедуру чтобы использовать ее в нескольких модулях?


2-1212375734
snake-as
2008-06-02 07:02
2008.06.29
MediaPlayer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский