Помощь - Поиск - Пользователи - Календарь
Полная версия: TabControl WinAPI
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
TarasBer
Создаю я окно класса wc_TabControl, потом делаю так


FillChar(tsTab, SizeOf(tsTab), 0);

with tsTab do begin
Mask := tcIf_Text or tcIf_Image;
iImage := -1;
pszText := 'ID0';
SendMessage(tcSelect, TCM_INSERTITEM, 0, Longint(@tsTab));
pszText := 'ID1';
SendMessage(tcSelect, TCM_INSERTITEM, 1, Longint(@tsTab));
pszText := 'ID2';
SendMessage(tcSelect, TCM_INSERTITEM, 2, Longint(@tsTab));
end;



И всё равно на форму ничего не выводится.
Делал всё, как в интернете нашёл, что неправильно?
volvo
Цитата
что неправильно?
Без понятия. Работает твой код:
Нажмите для просмотра прикрепленного файла

Значит, что-то не сделал до этого в программе, например, не инициализировал InitCommonControls, гадать не очень хочется... Проверяй.
TarasBer
> например, не инициализировал InitCommonControls

А, там ещё и инициализировать надо было. Я же код не дословно переписывал, там много лишнего было, типа субклассирования оконной процедуры табконтрола.

Этот компонент представляет собой просто декоративную рамочку с кнопками (то есть надо самому показывать нужные компоненты при переключении), или можно компонентам как-то задать нужного родителя-вкладку, и всё само будет работать?
volvo
Цитата
надо самому показывать нужные компоненты при переключении
Да. Само ничего работать не будет. Лови WN_NOTIFY, и по его прибытию скрывай старые контролы (которые были на предыдущем табе), и показывай новые.
TarasBer
Следующий вопрос.
Как узнать "клиентскую" область этого табконтрола? Если я для новой кнопки задаю его родителем с указанием верхнего левого угла (0, 0), то кнопка рисуется прямо поверх корешков. GetClientRect возвращает внешние границы.
volvo
Цитата
GetClientRect возвращает внешние границы.
Да. Чтобы получить клиентскую область, надо либо вызвать функцию TabCtrl_AdjustRect (в оригинале это - макрос), либо послать сообщение TCM_ADJUSTRECT. С использованием функции действия вот такие:

  GetClientRect(tcSelect, R); // Получаем внешние границы
TabCtrl_AdjustRect(tcSelect, False, @R); // а теперь R - это клиентская область


Только учти, что этот макрос/сообщение работает только в случае, если закладки табов находятся сверху. В других случаях это не работает.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.