Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2011, 15:30   #1
Sullla
Пользователь
 
Регистрация: 27.05.2011
Сообщений: 24
По умолчанию Как открыть дочернюю MDI форму из другой дочерней

Есть главная форма и 2 ее дочерние формы, напр., "Клиенты" и "Новый клиент"
При выбору пункта меню n1 - открываем форму "Клиенты" из которой уже нужно открыть форму "Новый клиент".
Sullla вне форума Ответить с цитированием
Старый 14.08.2011, 16:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что именно не получается?
Насколько я помню все MDIChild формы не могут быть скрыты в принципе
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2011, 16:45   #3
Sullla
Пользователь
 
Регистрация: 27.05.2011
Сообщений: 24
По умолчанию

форму "Новый клиент" нужно открывать с разных дочерних форм, а не с материнской формы и в то же время "Новый клиент" - это дочерняя одной и той же материнской что и "Клиенты"
Sullla вне форума Ответить с цитированием
Старый 14.08.2011, 17:18   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну так открывай. Что мешает? Метод Show еще не отменяли.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2011, 17:28   #5
Sullla
Пользователь
 
Регистрация: 27.05.2011
Сообщений: 24
По умолчанию

1. Создать "Новый клиент" с материнской (CreateChildForm), скрыть и показать когда нужно... не работает
2. Просто создать с "Клиенты" - как ???
Sullla вне форума Ответить с цитированием
Старый 14.08.2011, 17:49   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

М.м.м я так с потолка:
Вот главная форма - в ней создается дитятко:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N11: TMenuItem;
    procedure N11Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
 uses unit2;
procedure TForm1.N11Click(Sender: TObject);
var f:tform2;
begin
  f:=TForm2.Create(self);
  with f do begin
   Parent:=self;
   show;
  end;
end;

end.
Ессно что вторая форма выставлена в MDIChild

Из проекта нуна это дитятко убрать
Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  //Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
Единственное что я не помню как правильно освобождать форму из нее самой, имеется ввиду при закрытии этого дитяти. Ато MDIChild при закрытии сворачивается
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2011, 18:04   #7
Sullla
Пользователь
 
Регистрация: 27.05.2011
Сообщений: 24
По умолчанию

Создать child из материнской я могу, но как его скрыть и показать когда нужно, причем при вызове из другой дочки???
Sullla вне форума Ответить с цитированием
Старый 15.08.2011, 01:45   #8
Sullla
Пользователь
 
Регистрация: 27.05.2011
Сообщений: 24
По умолчанию

Проблему решил заменив создание дочок методом, описаным в большинстве учебников
Цитата:
procedure TfrMain.CreateChildForm
(const childName : string);
var Child: TfrChild;
begin
Child := TfrChild.Create(Application);
Child.Caption := childName;
end;
на банально простое
Цитата:
frChild:=TfrChild.Create(self);
frChild.Show;
и по аналогии во всех дочерних формах
Sullla вне форума Ответить с цитированием
Старый 15.08.2011, 05:50   #9
HyperZen
Пользователь
 
Аватар для HyperZen
 
Регистрация: 20.07.2010
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Единственное что я не помню как правильно освобождать форму из нее самой, имеется ввиду при закрытии этого дитяти. Ато MDIChild при закрытии сворачивается
По умолчанию для дочерних окон параметр Action имеет значение caMinimize и вместо закрытия - форма сворачивается. Для того чтобы окно закрывалось надо создать обработчик события OnClose:

Код:
procedure TfmChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Action := caFree;
end;
Плохого человека должно быть мало...
HyperZen вне форума Ответить с цитированием
Старый 15.08.2011, 07:27   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
HyperZen
Тогда создание формы в моем примере не правильное.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрыть приложение через дочернюю форму Человек Панда Помощь студентам 4 15.07.2011 23:08
Delphi Prism XE не получается открыть одну форму из другой! s_stalk Общие вопросы .NET 0 26.01.2011 00:14
Одну и ту же форму использовать как MDI-child форму и как модальную форму? PrimaryPro Общие вопросы Delphi 2 10.03.2010 20:52
vb 2008 как открыть форму? fize Помощь студентам 0 17.12.2009 21:18
MDI динамическое создание компанента не дочерней форме Grandistok Общие вопросы Delphi 2 14.09.2009 20:39