Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.09.2008, 13:28
SAWaGE SAWaGE вне форума
Прохожий
 
Регистрация: 09.09.2008
Сообщения: 34
Репутация: 10
По умолчанию непонятка в MDI

Подскажите кто-нибудь: как сделать чтобы в дочернем окне вызывалось другое окно?
Ответить с цитированием
  #2  
Старый 24.09.2008, 17:50
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

ну собственно так же как и любое дочернее, либо create (если не создано) либо BringToFront (если просто перекрыто)
Ответить с цитированием
  #3  
Старый 24.09.2008, 18:03
SAWaGE SAWaGE вне форума
Прохожий
 
Регистрация: 09.09.2008
Сообщения: 34
Репутация: 10
По умолчанию

В смысле, если допустим что дочернее окно - Name1, а дочернее ему - Name2 то делается так:
Код:
procedure TFormChild.Button1Click(Sender: TObject);
begin
   ChildForm2 := TChildForm2.Create(Owner);
end;
?
Ответить с цитированием
  #4  
Старый 25.09.2008, 17:26
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

э-э-э, дочернее окно дочернего чтоли???
по моему MDI интерфейс немного не так работает: 1 главное, остальные дочерние, либо диалоговые. Все дочерние должны принадлежать главной, а вот диалоговые той форме которая вызвала или главной.
Ответить с цитированием
  #5  
Старый 25.09.2008, 17:36
SAWaGE SAWaGE вне форума
Прохожий
 
Регистрация: 09.09.2008
Сообщения: 34
Репутация: 10
По умолчанию

Мне это и непонятно: как из дочернего окна вызвать форму для внесения каких-либо данных, которые в свою очередь будут занесены таким образом в таблицу на дочерней форме?
Ответить с цитированием
  #6  
Старый 25.09.2008, 17:53
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

сделай форму для ввода диалоговую (но не MDIChild!!!), вызывай модально и после закрытия обрабатывай введенное

вот такой вызов в дочерней форме
Код:
  if fmInput.ShowModal = mrOK then собираем что там навводили   

а создавать или нет - решать тебе. я бы создавал форму ввода при вызове а потом уничтожал после сбора данных из нее.
Ответить с цитированием
  #7  
Старый 25.09.2008, 18:44
SAWaGE SAWaGE вне форума
Прохожий
 
Регистрация: 09.09.2008
Сообщения: 34
Репутация: 10
По умолчанию

Что то не получается .
Все работает до момента вызова последней формы. Может делаю не то:
у формы в пропертях BorderStyle выставил - bsDialog,
на дочерней форме батончику код - FormAdd.Show(либо ShowModal);

Последний раз редактировалось SAWaGE, 25.09.2008 в 19:23.
Ответить с цитированием
  #8  
Старый 26.09.2008, 10:06
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

а что выдает то, ошибку? или просто ничего не происходит?
Ответить с цитированием
  #9  
Старый 26.09.2008, 13:56
SAWaGE SAWaGE вне форума
Прохожий
 
Регистрация: 09.09.2008
Сообщения: 34
Репутация: 10
По умолчанию

Ошибку -- Project.exe raised exeption class EAccessViolation и все такое...

Последний раз редактировалось SAWaGE, 26.09.2008 в 14:07.
Ответить с цитированием
  #10  
Старый 26.09.2008, 16:46
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

ну а ты форму то создаешь перед вызовом?
проверяй на nil fmInput перед вызовом Show(Modal).
Если форма у тебя автоматом не создаеться, то перед вызовом создавай, а после отработки ибивай.
Ответить с цитированием
  #11  
Старый 26.09.2008, 18:30
SAWaGE SAWaGE вне форума
Прохожий
 
Регистрация: 09.09.2008
Сообщения: 34
Репутация: 10
По умолчанию

Простите, nil fmInput -- это как?
Ответить с цитированием
  #12  
Старый 28.09.2008, 15:46
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Код:
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  
Старый 28.09.2008, 22:37
SAWaGE SAWaGE вне форума
Прохожий
 
Регистрация: 09.09.2008
Сообщения: 34
Репутация: 10
По умолчанию

Благодарствую s0Creator!
Ответить с цитированием
  #14  
Старый 01.10.2008, 11:57
SAWaGE SAWaGE вне форума
Прохожий
 
Регистрация: 09.09.2008
Сообщения: 34
Репутация: 10
По умолчанию

Есть еще вопрос: как сделать, чтобы уже открытое дочернее окно не запускалось второй раз?
Ответить с цитированием
  #15  
Старый 03.10.2008, 13:02
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Цитата:
Сообщение от SAWaGE
Есть еще вопрос: как сделать, чтобы уже открытое дочернее окно не запускалось второй раз?
А зачем тогда вообще MDI?

но если очень нужно то выход такой - отслеживай открытие и закрытие дочернего окна и не открывай если уже открыто
создается и открывается дочернее только по твоей команде
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:26.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter