![]() |
|
|
#1
|
|||
|
|||
|
Подскажите кто-нибудь: как сделать чтобы в дочернем окне вызывалось другое окно?
|
|
#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
|
||||
|
||||
|
Цитата:
но если очень нужно то выход такой - отслеживай открытие и закрытие дочернего окна и не открывай если уже открыто создается и открывается дочернее только по твоей команде |