Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.06.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.043 c
1-1176890879
Ice2
2007-04-18 14:07
2007.06.17
обрезать начало строки


11-1161719636
_Ламер_
2006-10-24 23:53
2007.06.17
EditBox почернел


15-1179894396
vajo
2007-05-23 08:26
2007.06.17
Иран на 25 процентов поднял цены на бензин


2-1179961169
delphino
2007-05-24 02:59
2007.06.17
operator not applicable to this operand type


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский