IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> TabControl WinAPI, Не рисуется
TarasBer
сообщение 1.09.2010 15:46
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Создаю я окно класса 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;



И всё равно на форму ничего не выводится.
Делал всё, как в интернете нашёл, что неправильно?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.09.2010 16:48
Сообщение #2


Гость






Цитата
что неправильно?
Без понятия. Работает твой код:
Прикрепленное изображение

Значит, что-то не сделал до этого в программе, например, не инициализировал InitCommonControls, гадать не очень хочется... Проверяй.
 К началу страницы 
+ Ответить 
TarasBer
сообщение 1.09.2010 17:00
Сообщение #3


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> например, не инициализировал InitCommonControls

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

Этот компонент представляет собой просто декоративную рамочку с кнопками (то есть надо самому показывать нужные компоненты при переключении), или можно компонентам как-то задать нужного родителя-вкладку, и всё само будет работать?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.09.2010 17:30
Сообщение #4


Гость






Цитата
надо самому показывать нужные компоненты при переключении
Да. Само ничего работать не будет. Лови WN_NOTIFY, и по его прибытию скрывай старые контролы (которые были на предыдущем табе), и показывай новые.
 К началу страницы 
+ Ответить 
TarasBer
сообщение 2.09.2010 9:33
Сообщение #5


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Следующий вопрос.
Как узнать "клиентскую" область этого табконтрола? Если я для новой кнопки задаю его родителем с указанием верхнего левого угла (0, 0), то кнопка рисуется прямо поверх корешков. GetClientRect возвращает внешние границы.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 2.09.2010 10:13
Сообщение #6


Гость






Цитата
GetClientRect возвращает внешние границы.
Да. Чтобы получить клиентскую область, надо либо вызвать функцию TabCtrl_AdjustRect (в оригинале это - макрос), либо послать сообщение TCM_ADJUSTRECT. С использованием функции действия вот такие:

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


Только учти, что этот макрос/сообщение работает только в случае, если закладки табов находятся сверху. В других случаях это не работает.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 23:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"