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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2007, 18:25   #1
Sergey2007
 
Регистрация: 11.05.2007
Сообщений: 8
По умолчанию MDIChild на MDIForm

Помогите разобраться с формами. Хотелось бы в процессе работы программы каждым нажатием кнопки создавать на MDIForm новую однотипную MDIChild, которые при необходимости можно было бы потом закрыть, а не только свернуть. Реально ли это? Заранее благодарен.
Sergey2007 вне форума Ответить с цитированием
Старый 11.05.2007, 18:46   #2
Vincent
Пользователь
 
Аватар для Vincent
 
Регистрация: 02.02.2007
Сообщений: 29
По умолчанию

Вполне реально

Чтобы форма закрывалась, в OnClose Child-формы нужно добавить строчку Action := caFree;

И создавать новую форму тоже достаточно просто:

var fmChild: TfmChild;
begin
fmChild := TfmChild.Create(Application);
end;

Чтобы впоследствии можно было работать с этой формой, нужно сохранить указатель на нее. Например, сделать так:

var List: TList;

implementation

procedure Form1.Button1Click(Sender: TObject);
var fmChild: TfmChild;
begin
fmChild := TfmChild.Create(Applicatin);
List.Add(fmChild);
end;
Быстро пойманный эксепшн исключением не считается
Vincent вне форума Ответить с цитированием
Старый 11.05.2007, 20:42   #3
Sergey2007
 
Регистрация: 11.05.2007
Сообщений: 8
По умолчанию

Прошу прощения за дилетантизм, но хочется разобраться. fmChild у меня грузится сразу... Или ее Style нужно сделать нормальным? Закрывается... Но вот после того, как я давану на Button1, выскакивает "Access violation..." Где я торможу?
Sergey2007 вне форума Ответить с цитированием
Старый 12.05.2007, 17:10   #4
Sergey2007
 
Регистрация: 11.05.2007
Сообщений: 8
По умолчанию

Все! Зафунциклировало!!! Разобрался. Новые окошки появляются рядами и колоннами от одной единственной кнопки! Спасибо!
Sergey2007 вне форума Ответить с цитированием
Старый 13.05.2007, 20:03   #5
Sergey2007
 
Регистрация: 11.05.2007
Сообщений: 8
По умолчанию

Гм... Рано обрадовался. Работать-то работает, но вот по части указателя как рыба об лед Растолкуйте, пожалуйста, кто-нибудь, как мне, к примеру, получить доступ к Caption этих форм?

var
...
List: TList;
implementation
...
procedure TForm1.CreateChildFormT(const childName : string);
var
Child1: TfrTerminal;
begin
Child1 := TfrTerminal.Create(Application);
Child1.Caption := childName;
//List.Add(Child1);
end;

Прога с этим "List" компилится, но при создании формы выскакивает все то же "Access violation..."
Sergey2007 вне форума Ответить с цитированием
Старый 14.05.2007, 08:28   #6
Vincent
Пользователь
 
Аватар для Vincent
 
Регистрация: 02.02.2007
Сообщений: 29
По умолчанию

Насчет того, что fmChild создается сразу: можно или подправить файл проекта *.dpr, убрав Application.CreateForm(fmChil), либо в меню Project -> Options на вкладке Forms убрать fmChild из списка Auto-create form
А по указателям... лучше скинь весь исходник В том коде который ты привел проблем быть не должно, наверное глюк где-то в другом месте... (Кстати сам список то создан? Ну, типа List := TList.Create; ?
Быстро пойманный эксепшн исключением не считается
Vincent вне форума Ответить с цитированием
Старый 14.05.2007, 08:40   #7
Vincent
Пользователь
 
Аватар для Vincent
 
Регистрация: 02.02.2007
Сообщений: 29
По умолчанию

Кстати по работе со списком: доступ к окнам можно получить так:

procedure TForm1.btnChangeTitleClick(Sender: TObject);
var fmChild: TfmChild;
i: integer;
begin
// поиск активной формы
for i := 0 to List.Count - 1 do begin
fmChild := List.Items[i];
if fmChild.Active then break;
end;
fmChild.Caption := Edit1.Text;
end;
Быстро пойманный эксепшн исключением не считается
Vincent вне форума Ответить с цитированием
Старый 15.05.2007, 13:16   #8
Sergey2007
 
Регистрация: 11.05.2007
Сообщений: 8
По умолчанию

Вот! В самое туда! Я с этим List как мартышка с очками, так и не надыбал вчера методом тыка синтаксиса команды. А в книжках что-то по этому ничего нет. Спасибо! Зафунциклировало-2!

for i:=0 to 100 do
begin
Child1 := List.Items[i];
if Pos('Порт открыт',Child1.Caption)>0 then
begin
Child1.Caption := 'Порт не подключен.';
goto m1;
end;
end;
m1:
Sergey2007 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрытие формы MDIChild в MDI приложении Avalonix Общие вопросы Delphi 4 29.05.2008 16:45
MDICHild oкно в МОДАЛЬНОМ режиме MARA Компоненты Delphi 5 20.02.2007 06:46