![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() form2 это MDIChild. В нем создается обычная форма form3.
Код:
procedure TForm1.Button1Click(Sender: TObject); begin form2:=Tform2.Create(application); form3:=Tform3.Create(application); form3.Show; Windows.SetParent(form3.Handle, form2.Handle);//ВАРИАНТ 1 //form3.ParentWindow:=form2.Handle; //ВАРИАНТ 2 end; ВАРИАНТ 1 Если делать первым вариантом, то когда активна вложеная форма 3,то форма 2 и форма приложения не активны. А если до снятия фокуса с приложения была активна вложеная форма 3, и окно приложения спряталось за окна других приложений, то вывести его на первый план не удается, так как оно какбы так и остается неактивным.И когда активна дочерняя форма 2, то соответственно форма 3 не активна получается и на ней не работают хоткеи (Таб например) и контролы без фокуса. ВАРИАНТ 2 Все работает с активностью форм нормально, но контролы не получают фокус на вложеной форме 3 и не работаю хот кеи |
#2
|
|||
|
|||
![]() Form3.CreateParented() спасет отца русской демократии.
А вот по поводу хоткеев и фокуса - это известная фича. Последний раз это решалось с помощью трансляции сообщений винды в дочернее окно, если оно само активно. |
#3
|
|||
|
|||
![]() Цитата:
|
#4
|
|||
|
|||
![]() Цитата:
Отлавливать все сообщения и транслировать их через SendMessage/PostMessage дочернему окну. |
#5
|
||||
|
||||
![]() Я конечно не тестировал, ибо лень. Но думаю, что раз третья форма является дочерней от второй, то и владельцем при создании надо указывать вторую форму, а не приложение.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#6
|
|||
|
|||
![]() Не помогает, в свое время проверял.
Хотя, у меня был вариант с формой в dll... может, если в одном приложении, то поможет. |
#7
|
|||
|
|||
![]() Цитата:
|