Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.17;
Скачать: CL | DM;

Вниз

Вложенные формы   Найти похожие ветки 

 
Serega_61   (2007-05-24 17:31) [0]

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

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


 
tesseract ©   (2007-05-24 17:33) [1]


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


Тебе нужны не формы, а фреймы - они для этого и сделаны.


 
Jeer ©   (2007-05-24 17:36) [2]


> Serega_61   (24.05.07 17:31)


Сделай базовую форму, размести в репозитории и наследуй дочерние.


 
DVM ©   (2007-05-24 17:37) [3]


> а фреймы - они для этого и сделаны.

ИМХО лучше уж формы, а не фреймы, тем более, что отличий никаких, а формы удобнее.


 
tesseract ©   (2007-05-24 17:44) [4]


> ИМХО лучше уж формы, а не фреймы


А как в одну форму вставить в рантайм другую? А вот фрейм перемещая хоть в одну форму, хоть во вторую :-)


 
Serega_61   (2007-05-24 17:52) [5]

м...мне рантайм и надо что бы формы вставлялись в главную. А фреймы, у меня уже все под формы заточено, много думаю менять придется. Как нить формами можно обойтись?


 
McSimm_ ©   (2007-05-24 17:57) [6]


> создать главную ( с панелью) и вставлять в эту форму дочерние.

MDI ?


 
Serega_61   (2007-05-24 19:23) [7]

м... ну я создаю просо главную форму, и потом file-new-form.


 
{RASkov} ©   (2007-05-24 19:30) [8]

> [7] Serega_61   (24.05.07 19:23)

См [6]
+
У главной стиль формы выставь fsMDIForm, у дочерних - fsMDIChild


 
Serega_61   (2007-05-24 21:07) [9]

Всем огромное спасибо) привел к более менее нормальному виду) ток пришлось немного обойти.
Вначале все дочерние формы имеют стиль fsNormal. Потом перед разворачиванием определенной делаю стиль fsMDIChild. Что бы закрыть, опять нормал и висибл фалс. Только при закрытиии происходит мигание экрана, форма стоит wsMaximized и поэтому когда делаю ситьль она растягивается, и ток потом инвиз. Как можно избежать этого мерцания?)


 
DVM ©   (2007-05-24 21:16) [10]


> tesseract ©   (24.05.07 17:44) [4]


> А как в одну форму вставить в рантайм другую? А вот фрейм
> перемещая хоть в одну форму, хоть во вторую :-)

Так и форму можно одну в другую :) Только автору вопроса MDI надо однозначно.


 
Serega_61   (2007-05-24 21:38) [11]

Угу рантайм все гуд, вот токо мерцание немного напрягает... просто visible нельзя трогать пока не уберешь FormStyle на fsNormal. Хз как от мирцания избавиться.


 
Dilmo ©   (2007-05-25 05:46) [12]


> Что бы закрыть, опять нормал и висибл фалс.

а зачем возвращать в нормал ?


 
Dilmo ©   (2007-05-25 05:48) [13]

используй Form.Close и без всяких визиблов
ну и можно еще ивент прописать OnClose
Action := caFree; чтобы убивалась форма при закрытии


 
Serega_61   (2007-05-25 12:26) [14]

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

Как можно программно это сделать, просто в OnShow ставлю SetFocus, пишет ошибку.


 
{RASkov} ©   (2007-05-25 12:55) [15]

> Вначале все дочерние формы имеют стиль fsNormal. Потом перед
> разворачиванием определенной делаю стиль fsMDIChild. Что
> бы закрыть, опять нормал и висибл фалс.

Зачем окнам стиль-то по ходу программы менять?
Ты что-то не по той дороге идешь... и [14] сюда же..


 
Serega_61   (2007-05-25 13:04) [16]

я же говорил, что если она всегда fsMDIChild, то при ее сворачивании, она сворачиваеся в угол основной формы, а не исчезает. Если вернуть ей обычное значения стиля, то прячется полностью.

а насчет [14], там нужно фокус дать форме (что бы он дочернее окно растянул потом по всем у размеру родительского), просто у меня нет ни едитов, ничего такого на форме, поэтому фокус автоматически не переходит.


 
ANB ©   (2007-05-25 14:26) [17]


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

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


 
{RASkov} ©   (2007-05-25 14:45) [18]

> [16] Serega_61   (25.05.07 13:04)

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


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

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


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

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


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

> [19] Serega_61   (25.05.07 17:34)

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


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

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


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

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


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

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

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


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

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


 
{RASkov} ©   (2007-05-25 18:37) [26]

> [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); - нет.


 
{RASkov} ©   (2007-05-25 18:42) [27]

> TChildForm.Create(Self).Show;

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


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

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

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


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

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


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

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


а так


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


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


 
{RASkov} ©   (2007-05-25 18:50) [30]

> [28] Serega_61   (25.05.07 18:45)

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

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

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


 
{RASkov} ©   (2007-05-25 18:53) [31]

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

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

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


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

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

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


 
{RASkov} ©   (2007-05-25 19:01) [33]

> [32] Serega_61   (25.05.07 18:56)

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

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

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


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

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

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


 
{RASkov} ©   (2007-05-25 19:12) [35]

> [34] Serega_61   (25.05.07 19:06)

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.06.17;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.025 c
3-1174986996
DelphiLexx
2007-03-27 13:16
2007.06.17
Динамическое создание и удаление полей


2-1180326714
Riply
2007-05-28 08:31
2007.06.17
Поучение геометрии флоппи диска.


3-1174904729
Xmen
2007-03-26 14:25
2007.06.17
Master Detail связь


15-1179861925
abajun
2007-05-22 23:25
2007.06.17
фантастический рассказ


15-1179705771
Германн
2007-05-21 04:02
2007.06.17
Европа и Россия