15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Добавление битмапов на закладки в PageControl или TabControl.

Компилятор: C++ Builder

Используя макрос TabCtrl_SetItem(), можно очень просто добавлять битмапы на закладки в PageControl или TabControl. Данный метод использует owner-drawn для TabControl/PageControl.

Замечание: Необходимо иметь ImageList с каждым элементом, отвечающим за определённую закладку (Tab), или заполнить элементы iImage структуры TC_ITEM чтобы связать их с номером картинки закладки.

//Unit1.cpp--------------------------------------------------------------------

// 
// Изменяем стиль каждой TabSheet так, чтобы

//
можно было помещать битмапы...
// 
__fastcall TForm1::TForm1(TComponent* Owner) 
 : TForm(Owner) 

   
//Получаем текущий стиль
    DWORD dwStyle = GetWindowLong(PageControl1->Handle, GWL_STYLE);

    //Добавляем стиль "поместить иконку слева" или TCS_FORCELABELLEFT
    //
взависимости от того, где Вы хотите разместить картинку
    SetWindowLong(PageControl1->Handle, GWL_STYLE,
                  dwStyle | TCS_FIXEDWIDTH | TCS_FORCEICONLEFT);

    //Изменяем аттрибуты каждой закладки
    TC_ITEM tci; 
    for (int index = 0; index < PageControl1->PageCount; index++) 
    { 
       
//флаги для картинги
        tci.mask = TCIF_TEXT | TCIF_IMAGE;

        //добавляем предыдущий текст
        tci.pszText = PageControl1->Pages[index]->Caption.c_str();

        int max = PageControl1->Pages[index]->Caption.Length() * sizeof(char); 
        tci.cchTextMax = max;
        tci.iImage = index;

        //применяем изменения
        TabCtrl_SetItem(PageControl1->Handle, index, &tci); 
    }

    //связываем ImageList с TabControl
    PageControl1->Perform(TCM_SETIMAGELIST, 0, (LPARAM)ImageList1->Handle); 
}