Перемещение вкладок TabControl (Drag&Drop) - C++Builder

Загрузка ...

tabs_drag

       В одной из программ использовал компонент TabControl. Этом компонент используется для отображения вкладок. В отличии от   PageControl он не имеет страниц. Захотелось сделать так, чтобы вкладки можно было перемещать с места на место с помощью мыши (Drag&Drop) как,   например, в веброузере "Опера". Поискав в интернете, так ничего  и не нашел. Нашел было код на Delphi, но он мне не понравился. Решил   поупражняться сам и, знаете, получилось. Оказалось все предельно просто.  Среда программирования C++Builder 6.

Перемещение вкладок TabControl (Drag&Drop)

int indtab;
//--------------Определяем индекс вкладки--------------------------- -
//----------не забыть прописать объявление в файле *.h---------------
int __fastcall TFMain::ItemAtPos(HWND TabControlHandle, int X, int Y)
{
 TTCHitTestInfo HitTestInfo;
 int HitIndex;

 HitTestInfo.pt.x= X;
 HitTestInfo.pt.y= Y;
 HitTestInfo.flags= 0;
 HitIndex = SendMessage(TabControlHandle, TCM_HITTEST, 0, long(&HitTestInfo));
 return HitIndex;
}
/ /---------------------------------------------------------------------------
void __fastcall TFMain::TabControl1MouseMove(TObject *Sender,
  TShiftState Shift, int X, int Y)
{
 indtab=ItemAtPos(TabControl1->Handle,X,Y);
}
//---------------------------------------------------------------------------
void __fastcall TFMain::TabControl1DragOver(TObject *Sender,
                TObject *Source, int X, int Y, TDragState State, bool &Accept)
{
 Accept=Sender->ClassNameIs("TTabControl");;
}
//---------------------------------------------------------------------------
void __fastcall TFMain::TabControl1DragDrop(TObject *Sender,
               TObject *Source, int X, int Y)
{
 TTabControl *pTabcontr=(TTabControl *)Sender;

 POINT p;
 p.x=X;
 p.y=Y;
 int tabpos=pTabcontr->IndexOfTabAt(p.x,p.y);
 pTabcontr->Tabs->Move(indtab,tabpos);
}
//---------------------------------------------------------------------------
void __fastcall TFMain::TabControl1MouseDown(TObject *Sender,
                  TMouseButton Button, TShiftState Shift, int X, int Y)
{
 TabControl1-> BeginDrag(0);
}
//---------------------------------------------------------------------------

Более подробнее о программировании в среде C++ Builder на страницах сайта «Клавиатурный тренажер Дударик»