C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Есть ли компонент панели окон, как в 1С Предприятии 7.7 8.0
Raynk
Отправлено: 07.06.2004, 10:13


Не зарегистрирован







собственно сабж
Gedeon
Отправлено: 07.06.2004, 18:00


Ветеран

Группа: Модератор
Сообщений: 1742



Вы бы лучше описали че это там такое, ато, кто не знает что за компонент панели окон как в 1С Предприятии 7.7 8.0
Raynk
Отправлено: 08.06.2004, 08:03


Не зарегистрирован







Да обычная панель окон как в Windows, только не для окон ОС, а для окон приложения.
Пробовал TPageControl — там прицепил при событии OnChange установку фокуса на необходимое окно, но есть один косяк — если 2 раза подряд щелнуть на кнопке (1 раз кликаешь  — вызывается событие, 2 раз кликаешь — событие уже соответственно не вызывается), то фокус на необходимом окне теряется и окно исчезает. А события, которое вызывается при нажатии кнопки на панели там нет.
MDM
Отправлено: 08.06.2004, 10:11


Не зарегистрирован







QUOTE (Raynk @ 08/06/2004, 09:05)
Да обычная панель окон как в Windows, только не для окон ОС, а для окон приложения.

Если имеется ввиду панель на которую окна приложения "сворачиваются" в кнопки (как при сворачивании главных окон программы на панель задач), то это просто сделать:
//вниз MainForm положи TPanel(ChildPanel);
//при создании/визуализации окна создаешь на PanelPanel SpeedButton
void __fastcall TMainForm::CreateMDIChild(String AFileName)
{
TChildForm* ChildForm = new TChildForm(Application, AFileName);
TSpeedButton* sb = new TSpeedButton(ChildForm);//только не Application
sb->Tag = reinterpret_cast(ChildForm); //запомнить указатель
ChildForm->Tag = reinterpret_cast(sb); //запомнить указатель
if(BorderChildPanel->Height == 0)
BorderChildPanel->Height = 26;
sb->Height = ChildPanel->Height; //высота
sb->Parent = ChildPanel; //посадить на панель
/*установка Caption, Glyph, Margin, Flat, Hint по вкусу*/
sb->GroupIndex = 1; //присвоить группу
sb->Down = true; //нажать
sb->OnClick = SpeedButtonClick;
SetButtonWidth(); //пересчитать ширину кнопок
...
}
//---------------------------------------------------------------------------
//управлять окнами отсюда — скрыть на панель/развернуть с панели
void __fastcall TMainForm::SpeedButtonClick(TObject *Sender)
{
TChildForm* ChildForm = (TChildForm*)((TSpeedButton*)Sender)->Tag;
ChildForm->BringToFront();
if(ChildForm->WindowState == wsMinimized)
ChildForm->Perform(WM_SYSCOMMAND, SC_RESTORE, 0);
}
//изменение размеров MainForm/ChildPanel
void __fastcall TMainForm::ChildPanelResize(TObject *Sender)
{
if(ChildPanel->ControlCount) SetButtonWidth();
}
//---------------------------------------------------------------------------
//пересчет размеров кнопки
void __fastcall TMainForm::SetButtonWidth()
{
//домашнее задание
}
//нажать
void __fastcall TChildForm::FormActivate(TObject *Sender)
{
if(Tag)
reinterpret_cast(Tag)->Down = true;
}
//---------------------------------------------------------------------------
void __fastcall TChildForm::FormDestroy(TObject *Sender)
{
//удаляем для правильного пересчета размера оставшихся кнопок...
delete reinterpret_cast(Tag);
//если есть кнопки...
if(MainForm->ChildPanel->ControlCount> 0)
MainForm->SetButtonWidth();
else
MainForm->BorderChildPanel->Height = 0;
}
MDM
Отправлено: 09.06.2004, 09:25


Не зарегистрирован







Из того, что выше наворотил возник вопрос который в свое время не смог решить (вернее решил, но как мне показалось коряво).
ВОПРОС — Как СКРЫТЬ форму со стилем fsMDIChild?

Вернуться в Вопросы программирования в C++Builder