|
#1
|
|||
|
|||
непонятка в MDI
Подскажите кто-нибудь: как сделать чтобы в дочернем окне вызывалось другое окно?
|
#2
|
|||
|
|||
ну собственно так же как и любое дочернее, либо create (если не создано) либо BringToFront (если просто перекрыто)
|
#3
|
|||
|
|||
В смысле, если допустим что дочернее окно - Name1, а дочернее ему - Name2 то делается так:
Код:
procedure TFormChild.Button1Click(Sender: TObject); begin ChildForm2 := TChildForm2.Create(Owner); end; |
#4
|
|||
|
|||
э-э-э, дочернее окно дочернего чтоли???
по моему MDI интерфейс немного не так работает: 1 главное, остальные дочерние, либо диалоговые. Все дочерние должны принадлежать главной, а вот диалоговые той форме которая вызвала или главной. |
#5
|
|||
|
|||
Мне это и непонятно: как из дочернего окна вызвать форму для внесения каких-либо данных, которые в свою очередь будут занесены таким образом в таблицу на дочерней форме?
|
#6
|
|||
|
|||
сделай форму для ввода диалоговую (но не MDIChild!!!), вызывай модально и после закрытия обрабатывай введенное
вот такой вызов в дочерней форме Код:
if fmInput.ShowModal = mrOK then собираем что там навводили а создавать или нет - решать тебе. я бы создавал форму ввода при вызове а потом уничтожал после сбора данных из нее. |
#7
|
|||
|
|||
Что то не получается .
Все работает до момента вызова последней формы. Может делаю не то: у формы в пропертях BorderStyle выставил - bsDialog, на дочерней форме батончику код - FormAdd.Show(либо ShowModal); Последний раз редактировалось SAWaGE, 25.09.2008 в 19:23. |
#8
|
|||
|
|||
а что выдает то, ошибку? или просто ничего не происходит?
|
#9
|
|||
|
|||
Ошибку -- Project.exe raised exeption class EAccessViolation и все такое...
Последний раз редактировалось SAWaGE, 26.09.2008 в 14:07. |
#10
|
|||
|
|||
ну а ты форму то создаешь перед вызовом?
проверяй на nil fmInput перед вызовом Show(Modal). Если форма у тебя автоматом не создаеться, то перед вызовом создавай, а после отработки ибивай. |
#11
|
|||
|
|||
Простите, nil fmInput -- это как?
|
#12
|
||||
|
||||
Код:
procedure TMDIChild.btInputClick(Sender: TObject); var FormAdd: TFormAdd; begin FormAdd:= TFormAdd.Create(Self); try if FormAdd.ShowModal() = mrOk then begin Memo1.Lines.Add(FormAdd.edAdedString.Text); end; finally FormAdd.Free; end; end; MdiInput.zip |
#13
|
|||
|
|||
Благодарствую s0Creator!
|
#14
|
|||
|
|||
Есть еще вопрос: как сделать, чтобы уже открытое дочернее окно не запускалось второй раз?
|
#15
|
||||
|
||||
Цитата:
но если очень нужно то выход такой - отслеживай открытие и закрытие дочернего окна и не открывай если уже открыто создается и открывается дочернее только по твоей команде |