Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вложенные формы [D7, WinXP]


Страницы:   1 2

Serega_61 ©   (2007-05-24 17:31:00) 

Доброго времени суток.
Мне нужно сделать вложенные формы, одна в дгругую (как в фотошопе например). Вопрос конечно детский, но просто ниразу с этим не сталкивался, вот и решил спросить сразу у знающих людей. Если есть какие либо ссылки, киньте плз сюда.

Просто у меня на разных формах, разные компоненты. А я хочу сделать для всех форм единую панель управления. Поэтому хочу создать главную ( с панелью) и вставлять в эту форму дочерние. Все готово, осталось ток связать формы, подскажите как это сделать ;)


Serega_61   (2007-05-25 19:21:00) [1]

Напиши мне, аська 319119277
или мыло fenix_ex@mail.ru
Показать могу)


{RASkov}   (2007-05-25 19:12:00) [2]

> [34] Serega_61   (25.05.07 19:06)

В двух словах я тебе сейчас не отвечу, так как, вариантов куча....
Пересмотри общий алгоритм программы....
В данном случае у тебя так же AV будет если не будет существовать Form3...
Если проект не большой и тебе не жалко его показать кинь куданить на рассмотрение, может чем и помогут тебе....


Serega_61   (2007-05-25 19:06:00) [3]

м... ну вот смотри, допустим у меня в форме1 есть такая строчка:

mw:=trunc(mk*strtoint(form3.edit1.text));
при создании как ты говоришь, выдает ошибку, через Self, понял так и делаю теперь. Просто он пишет что неправильны адрес 'Access violation'.


{RASkov}   (2007-05-25 19:01:00) [4]

> [32] Serega_61   (25.05.07 18:56)

Прочитав [32] у меня сложился только один совет - переписать проект заново и нормально.

> может как то можно ограничить количество открываний форм

Можно...., но ты не потой дороге идешь, поверь.


Serega_61   (2007-05-25 18:56:00) [5]

м... а если у меня из других окон идет обращение к данной форме... да и у меня есть обращение с формы Form1 к объектам с других форм... получается тогда все переписывать надо....

может как то можно ограничить количество открываний форм(или детерминировать ее перед созданием новой) путем Form1:=TForm1.Create(self); или pplication.CreateForm(TForm1, Form1);?


{RASkov}   (2007-05-25 18:53:00) [6]

> [29] Serega_61   (25.05.07 18:48)
> выдает ошибку при обращении потом к Form1.....

Ну нет у тебя Form1, как ты этого не поймешь :)

Везде Form1 (т.е. переменную(ые) дочернего(их) окна(он)) удали из модулей где они описаны и оброщайся к экземпляру дочерней формы по SELF !!!


{RASkov}   (2007-05-25 18:50:00) [7]

> [28] Serega_61   (25.05.07 18:45)

Ну напиши вот так:
procedure ButtonClick();
begin
 TForm1.Create(Self).Show;
end;

> При любом обращении в коде к Form1.

Забудь про Form1 и еще лучше если и удалишь переменную в модуле описания дочки... И никаких обращений к переменной(Form1) НЕ ДОЛЖНО БЫТЬ!


Serega_61   (2007-05-25 18:48:00) [8]

не
procedure ButtonClick();
begin
TChildForm.Create(Self).Show;
end;


а так


procedure ButtonClick();
begin
TForm1.Create(Self).Show;
end;


выдает ошибку при обращении потом к Form1.....


Serega_61   (2007-05-25 18:45:00) [9]

после того как пишу:

procedure ButtonClick();
begin
TChildForm.Create(Self).Show;
end;


При любом обращении в коде к Form1.-||- происходит ошибка... в AutoCreate, и так удалил сразу.
а создавал потом так:

procedure ButtonClick();
begin
Application.CreateForm(TForm1, Form1);//работает все нормально, но если несколько раз нажать, то дублируются формы.
end;


{RASkov}   (2007-05-25 18:42:00) [10]

> TChildForm.Create(Self).Show;

и в нижнем примере из [26] [T]Form2 - одно и тоже, Т.е. дочка.
Просто сначала написал ButtonClick; а затем из делфи выдернул шаблон дпр вот и получилось несвязанно...
но думаю понятно...


{RASkov}   (2007-05-25 18:37:00) [11]

> [25] Serega_61   (25.05.07 18:21)

Создание дочек делай например так:

procedure ButtonClick();
begin
TChildForm.Create(Self).Show;
end;

Соответственно в OnClose дочерней Action=caFree;

И убери их(дочек) из AutoCreate, после в dpr должно быть нечто так:

uses
 Forms,
 Unit1 in 'Unit1.pas' {Form1}, //главная
 Unit2 in 'Unit2.pas' {Form2}; //дочка
{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

как видишь Application.CreateForm(TForm2, Form2); - нет.


Serega_61   (2007-05-25 18:21:00) [12]

не. у меня стоит другая форма как основная. И она у меня изночально не создается... смотри, если написать подряд:
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm1, Form1);
то создастся сразу 3 формы. А мне нужно как нить ограничить. Просто вдруг пользователь не закрыл старую.


{RASkov}   (2007-05-25 18:13:00) [13]

> [23] Serega_61   (25.05.07 17:50)
> Вот токо одна проблема) Application.CreateForm(TForm1, Form1)
> ; создает форму, и если предыдущая не закрыта, то клонирует,
> как этого можно избежать? что бы не создавала дубликатов
> форм.

Убери ее из AutoCreate в опциях проекта....
Только TForm1, как правило, главная форма проекта, у тебя не так?


Serega_61   (2007-05-25 17:50:00) [14]

Вот токо одна проблема) Application.CreateForm(TForm1, Form1); создает форму, и если предыдущая не закрыта, то клонирует, как этого можно избежать? что бы не создавала дубликатов форм.


XPMan   (2007-05-25 17:45:00) [15]

Хм... уже разобрался :)


XPMan   (2007-05-25 17:45:00) [16]

> [19] Serega_61   (25.05.07 17:34)

А зачем окно прятать когда его закрывают? Делай caFree... если опять нужно будет заново создавай его...
Или тебе именно Hide нужен для дочерних? А зачем?


Serega_61   (2007-05-25 17:42:00) [17]

Все, разобрался))) может и не сильно корректно, но работает перед показам формы ее создаю Application.CreateForm(TForm1, Form1);
а закрываю форму через Action=caFree. Пока никаких косяков не найдено.


Serega_61   (2007-05-25 17:34:00) [18]

хм. ставлю Action=caHide при закрытии выскакивает ошибка 'Cannot hide an MDI Child Form'.


{RASkov}   (2007-05-25 14:45:00) [19]

> [16] Serega_61   (25.05.07 13:04)

У MDI окон Action=caMinimize по умолчанию. Исправь как тебе надо на OnClose своих деток....
И не парься с изменением стиля... не верно это в твоем случае.


ANB   (2007-05-25 14:26:00) [20]


> она сворачиваеся в угол основной формы, а не исчезает.

Ну дык так и должно быть.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо