Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сворачивание дочерней формы, в ToolBar 
:(
    Опции темы
Foley
Дата 15.3.2006, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фсемба Яцца
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 31.1.2006
Где: Россия, Арх.обл

Репутация: 2
Всего: 7



можно ли сделать как нибудь, чтоб дочернее окна программы сворачивалось не внизу главной формы, а в тулбаре или контрол баре, или панели? (у меня все дочерние окна алклиент, поэтому при открытии новго дочернего окна не видно свернутых дочерних окон), окна каскадом неудобно. помогите если кто сталкивался... smile smile
PM MAIL ICQ   Вверх
Guedda
Дата 15.3.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Можно создать ToolBar и при минимазиции дочерней формы просто создать динамический ToolButton, , в клике которого написать:
Код

DochForm.Show;



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Snowy
Дата 15.3.2006, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



1. Отказываемся от MDI.
2. На главную форму кладем TPageControl.
3. У ребенка делаем BorderStyle = bsNone
4. Для показа формы пишем следующий код:
Код
var
  form: TForm2; // или как там у тебя ребенка зовут...
  tab: TTabSheet;
begin
  form := TForm2.Create(Application);
  tab := TTabSheet.Create(PageControl1);
  tab.Caption := form.Caption;
  form.Parent := tab;
  form.Align := alClient;
  tab.PageControl := PageControl1;
  form.Show;
end;

PM MAIL   Вверх
Foley
Дата 17.3.2006, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фсемба Яцца
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 31.1.2006
Где: Россия, Арх.обл

Репутация: 2
Всего: 7



Snowy, что-то не получилось толком твою идею доработать, появляются только новые вкладки, они пусты, дочернее окно нигде не появляется (хотя мож что не так сделал). Нашел кое-какое решение вопроса, (благодаря твоей подсказке) но появились проблемы с закрытием дочернего окна. Использовал для этого компоненту TabSet. Не смотрите что в коде много никому не нужных переменных и компонентов, просто мне так легче разбираться. Вопщем рассказываю: Добавил на форму компонент TabSet, сделал его по всему низу:
Переменная IndexMDIChild действует на всю юниту

На OnCreate дочернего окна написал следующее:
Код

IndexMDIChild:=IndexMDIChild+1;//заместо MDIChildCount, а не то че-то не работает
 SpinEdit1.Value:=IndexMDIChild;
 form1.SpinEdit1.Value:=IndexMDIChild;

Создание дочернего окна:
Код

var
  form: TForm2;
  IndexTabSet: integer;
  CaptionTabs: string;
begin
  form := TForm2.Create(Application);
  form.Caption:='Untitle'+IntToStr(SpinEdit1.Value);
  CaptionTabs:=form.Caption;
  TabSet1.Tabs.Append('TempTab');//если аппенд или инсерт не сделать то ругается.
  TabSet1.Tabs.AddObject(CaptionTabs,form);//сразу почему-то не присваивает капшон
  for IndexTabSet:=0 to TabSet1.Tabs.Count do begin
  if TabSet1.Tabs.IndexOf('TempTab')=IndexTabSet then
  TabSet1.Tabs.Delete(IndexTabSet);//удаляет ненужные табы
  end;
  tabset1.TabIndex:=TabSet1.Tabs.Count;//переходим на последнюю вкладку
end;

Все вкладка добавлена, теперь, чтобы открыть нужное нам дочернее окно я прописал на клике по TabSet’у:
Код

TForm2(TabSet1.Tabs.Objects[TabSet1.TabIndex]).Show;

И все. Но при закрытии формы получается полный геморрой, вот смотрите:
На закрытии ребенка пишу:
Код

var i: integer;
    CaptionChild: string;
begin
CaptionChild:=form2.Caption;
form1.Edit2.Text:=CaptionChild; //кепшон не присваивает почему-то
for i:=0 to form1.TabSet1.Tabs.Count do begin
  if form1.TabSet1.Tabs.IndexOf(CaptionChild)=i then
  form1.TabSet1.Tabs.Delete(i); // поиск по кепшону вкладки и удаление таковой
  end; //не находит, по причине отсутсвия кэпшона
Аction:=caFree;
IndexMDIChild:=IndexMDIChild-1;
form1.SpinEdit1.Value:=IndexMDIChild;

Пробовал через закрытие по щелчку кнопки:
Код

ActiveMDIChild.Close;
tabset1.Tabs.Delete(tabset1.TabIndex-1); //тут все нормально закрывается

но если юзер будет закрывать через иконку закрытия формы, вот что мне интересно, если удалить кнопки (BorderIcon) то и форма сделать максимизированной, то получается что при первом щелчке на TabSet’е все формы возвращаются к обычному размеру и делаются каскадом.
PM MAIL ICQ   Вверх
Guedda
Дата 18.3.2006, 03:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Не нужно делать дочернюю форму MDI-формой. Просто создай форму, и сделай:
Цитата

3. У ребенка делаем BorderStyle = bsNone



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Foley
Дата 18.3.2006, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фсемба Яцца
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 31.1.2006
Где: Россия, Арх.обл

Репутация: 2
Всего: 7



Guedda, все понил... спасибо за инфу, а я то МДИ юзал... Просто фраза "У ребенка" воспринялась мной как "У дочернего окна"

Это сообщение отредактировал(а) Foley - 18.3.2006, 23:44
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.