Перемещение вкладок 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 на страницах сайта «Клавиатурный тренажер Дударик»