Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Как избежать автозакрытия формы класса TCustomDockForm
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
caxaromires caxaromires вне форума
Member
 
Аватар для caxaromires
 
Сообщений: 42
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.03.2010
Thumbs up Как избежать автозакрытия формы класса TCustomDockForm - 09.04.2010, 14:33

Класс TCustomDockForm. Почитал. Вроде написано, что окно закроется, если на нем не будет ни одного контрола.

Код:
void __fastcall TForm1::PageControl1EndDock(TObject *Sender, TObject *Target, int X, int Y)
{
TPageControl *PC = (TPageControl *)Sender;
TCustomDockForm *DockForm = dynamic_cast (PC->Parent);
if (DockForm)
  {
  TPanel *Panel = new TPanel (DockForm);
  Panel->Align = alClient;
  Panel->Parent = DockForm;
  //PC->Parent = Panel;
  }
}
Если раскомментировать строку, то окно закроется! Что необходимо сделать, чтобы оно не закрывалось?
Ответить с цитированием
  (#2 (permalink)) Старый
FataLL FataLL вне форума
Member
 
Аватар для FataLL
 
Сообщений: 1,783
Сказал(а) спасибо: 2
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 04.11.2004
По умолчанию 09.04.2010, 15:44

Ты хоть объясни, какую цель преследуешь. По коду видна лишь путаница с родителями и потомками...
Ответить с цитированием
  (#3 (permalink)) Старый
caxaromires caxaromires вне форума
Member
 
Аватар для caxaromires
 
Сообщений: 42
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.03.2010
По умолчанию 09.04.2010, 15:50

Есть PageControl. У него разрешена операция DragDock. Если я перетаскиваю его за пределы формы, то он появляется в окне(класс TCustomDockForm). Я хочу чтобы этот самый PageControl располагался не просто на форме(TCustomDockForm) а на панельке, расположенной в этом окне. Для этого в обработке события EndDock я в созданном автоматически окне создаю Panel и присваиваю PC->Parent = Panel - форма закрывается(в этом то и проблема).
Ответить с цитированием
  (#4 (permalink)) Старый
FataLL FataLL вне форума
Member
 
Аватар для FataLL
 
Сообщений: 1,783
Сказал(а) спасибо: 2
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 04.11.2004
По умолчанию 10.04.2010, 13:52

У меня вообще не получается повторить твои результаты. Вот тут вообще ошибка
Код:
TCustomDockForm *DockForm = dynamic_cast (PC->Parent);
И не только в синтаксисе, но и в логике, скорее всего. Кинь куда-нибудь свой проект, попробую поковырять...
Ответить с цитированием
  (#5 (permalink)) Старый
FataLL FataLL вне форума
Member
 
Аватар для FataLL
 
Сообщений: 1,783
Сказал(а) спасибо: 2
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 04.11.2004
По умолчанию 10.04.2010, 14:33

Да вообще так не сделаешь, по-моему... Любая операция с CustomDockForm и с его потомками либо игнорируется, либо вываливается с ошибкой...
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
caxaromires caxaromires вне форума
Member
 
Аватар для caxaromires
 
Сообщений: 42
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.03.2010
По умолчанию 11.04.2010, 12:10

[quote]У меня вообще не получается повторить твои результаты. Вот тут вообще ошибка
Код:
TCustomDockForm *DockForm = dynamic_cast <TCustomDockForm *>(PC->Parent);
Ответить с цитированием
  (#7 (permalink)) Старый
caxaromires caxaromires вне форума
Member
 
Аватар для caxaromires
 
Сообщений: 42
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.03.2010
По умолчанию 11.04.2010, 14:27

Проблему решил следующим образом:
1) Объявил класс TMyDockFormClass
Код:
class TMyDockFormClass : public TForm
{
public:
TPanel *Panel;
__fastcall TMyDockFormClass(TComponent* Owner): TForm(Owner, 1)
    {
    BorderStyle = bsSizeToolWin;
    TPoint point;
    GetCursorPos(&point);
    Left = point.x;
    Top = point.y;
    Panel = new TPanel(Owner);
    Panel->Align = alClient;
    Panel->BevelWidth = 10;
    Panel->Parent = (TWinControl *)this;
    OnDockDrop = FormDockDrop;
    OnDeactivate = FormDeactivate;
    Show();
    }

void __fastcall FormDockDrop(TObject *Sender, TDragDockObject *Source, int X, int Y)
    {
    TWinControl *WCSender = (TWinControl *)Source->Control;
    WCSender->Align = alClient;
    WCSender->Parent = Panel;
    
    }
void __fastcall FormDeactivate(TObject *Sender)
    {
    if (!Panel->ControlCount)
        delete this;
      }
2)В конструкторе формы
Код:
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
PageControl1->FloatingDockSiteClass =__classid(TMyDockFormClass);
}
Ответить с цитированием
  (#8 (permalink)) Старый
FataLL FataLL вне форума
Member
 
Аватар для FataLL
 
Сообщений: 1,783
Сказал(а) спасибо: 2
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 04.11.2004
По умолчанию 13.04.2010, 03:29

Код:
PageControl1->FloatingDockSiteClass =__classid(TMyDockFormClass);
Ценно. Надо будет запомнить...
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание объектов дочернего класса из метода базового класса Jonano С/С++ 14 01.03.2010 17:40
Как избежать щелканий CppWebBrowser AZzz C++ Builder 0 03.05.2008 21:30
Доступ к переменным класса из метода класса no_NaMe Assembler 5 27.02.2007 23:37
Указатель из класса на функцию другого класса NVSarge С/С++ 3 22.02.2007 16:24
Как из собственного класса получить доступ к элементам формы hellt .NET 1 19.05.2006 16:05
При обращении к компонентам дочерней формы из главной формы программа выдает ошибку AHDPE C++ Builder 6 12.04.2004 12:02
Объявление идентификатора сообщения в описании класса формы John Maison C++ Builder 13 26.03.2004 13:47
Как избежать дублирования randomize Sieman C++ Builder 3 25.03.2004 11:19
Как избежать проблем при работе с BDE drug Другие СУБД 0 18.03.2004 12:24
Вызов метода класса, не создавая при этом объекта этого класса в MessageBox LeM2003 Visual C++ 6 03.10.2003 17:05
Как избежать OutOfMemory TNT Java 3 02.09.2003 21:12
Как избежать моргания экрана Garik Assembler 4 22.07.2002 19:51



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов