Вверх ↑
Этот топик читают: Гость
Ответов: 494
Рейтинг: 163
#1: 2018-11-28 08:41:32 ЛС | профиль | цитата
Подскажите пожалуйста как в TabControl при добавлении картинок (иконок) изменить (подстроить) ширину под выводимый текст?
Без иконок выводится всё как надо.
Пример


Add(TabControl,3564979,280,133)
{
Left=5
Top=10
Width=545
Height=50
Tabs=#17:Рабочее окружение|14:Окно с данными|9:Параметры|9:Настройки|0:|
Bitmaps=[]
HotTrack=0
}
Add(TabControl,5536735,279,190)
{
Left=5
Top=65
Width=550
Height=50
Tabs=#17:Рабочее окружение|14:Окно с данными|9:Параметры|9:Настройки|0:|
Bitmaps=['Bitmap'=[ZIP3604000078DA73F235636100033320D600620128666450804840E591C1FFFFFF07054E4A4AA2480C0490E58815A386FDA3E1371A7E4335FC008CE1A16A],'Bitmap'=[ZIP3604000078DA73F235636100033320D600620128666450804840E591C1FFFFFFC178C982052463985E7200A6FEFF48988141F5BF2A1C63CA8EEA2714FEA4E847C783413F463A25413F36F3065A3FAE7C37D01800D472A442],'Bitmap'=[ZIP3604000078DA73F235636100033320D600620128666450804840E591C1FFFFFFF16262D4E0D34BAC3DB8F4EFDFBF9F68FD0C1F90D8AF50ED6778895D1D363318EE01F129A8FE0F50FA2454FC030137DC05E2FD40BC004D3F887F0062064EBD403782ED41D22BFFE22B83FE93F708334EFD47F10B8AFE8740BC0B556FFCF5FB0C8DE72E33C4DFB80F11DF055187E1E70F50B76F41E83700DADB74FE0A380E4034186C4184037A58A0DB2F07B51FA4370166FF4E4CFB51E2EC14AAFFE55E7E6530784C9CFFB1863F0C2C848ADF239C86C0669C84FA650B943E4538FE31D2DF43A89E07103E31E90F9F9964E52102FA01E5934A83],'Bitmap'=[ZIP3604000078DA73F235636100033320D600620128666450804840E591C1FFFFFFC1D8C34C058E6162E818971A2F7355868979010CCB3BB219AE1CDD8ED50C90D8FAC915608CAE06A61F97192036481CA61744A3EB2F0EB305CB6133A332C689616E550C8A19D8FC80CB8C546F131433708511CC0C901D3033406A41E23033F0852FB219E86E008913D28B6C064C0F2EFFE28B5BE4B822C60C90F8E99D2BC018A616164F30F7E00B77903E100D63E34A23C8E2E872E8E6A1A7117433F0F907660636FD307F91A31FD90DD8DC872C8F4B3FB23B90FD8D1CEF84F23172980100AF8FFD14]]
HotTrack=0
}

карма: 4

0
Ответов: 2236
Рейтинг: 676
#2: 2018-11-28 13:39:41 ЛС | профиль | цитата
tig-rrr, выделите элемент TabControl, нажмите клавиши Ctr+F, в коде элемента найдите строку (85 скорее всего):
include(tco,tcoIconLeft);
измените эту строку на:
//include(tco,tcoIconLeft);
сохраните изменения, нажав Ctr+S. А теперь посмотрите что вы наделали. И если кто будет спрашивать, то я вам этого не советовал.

Редактировалось 1 раз(а), последний 2018-11-28 13:42:59
карма: 11

0
Ответов: 233
Рейтинг: 12
#3: 2018-11-28 13:52:47 ЛС | профиль | цитата
sla8a писал(а):
сохраните изменения, нажав Ctr+S. А теперь посмотрите что вы наделали. И если кто будет спрашивать, то я вам этого не советовал.


Данные изминения могут привести к нежелательным последствиям?
карма: 2

0
Ответов: 2236
Рейтинг: 676
#4: 2018-11-28 14:39:18 ЛС | профиль | цитата
Iliya, скорее всего что нет. Данная опция лишь определяет вид отрисовки вкладки. Да и как видете само включение tcoIconLeft в опции вкладки TabControlа уже приводит к нежелательным последствиям (см. примеры от tig-rrr). Но нужно разобраться почему так происходит.

Перед созданием TabContola создаются опции для него и если задействуются иконки (свойство Bitmaps), то в опции добавляется tcoIconLeft.
Книга по KOL писал(а):
tcoIconLeft - значок изображать в закладке слева, а текст - справа;

Почему включение опции tcoIconLeft изменяет отрисовку вкладки, мне не понятно. По идеи такого не должно быть. А вот если отказаться от включения tcoIconLeft, то отрисовка происходит нормально.
Возможно нужно произвести некоторые танцы с бубном чтоб при включении опции tcoIconLeft вкладка отрисовывалась нормально.

Редактировалось 1 раз(а), последний 2018-11-28 14:40:07
карма: 11

0
Ответов: 494
Рейтинг: 163
#5: 2018-11-29 00:53:22 ЛС | профиль | цитата
sla8a писал(а):
измените эту строку на:

sla8a, Спасибо! , так работает как надо, но всё-же подождём официального обновления на SVN

Редактировалось 1 раз(а), последний 2018-11-29 00:54:18
карма: 4

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#6: 2018-11-29 01:10:03 ЛС | профиль | цитата
sla8a писал(а):
Почему включение опции tcoIconLeft изменяет отрисовку вкладки, мне не понятно.

Мне пока тоже. И вот поэтому
tig-rrr писал(а):
подождём официального обновления на SVN

пока не будет до выяснения причин.
sla8a писал(а):
Возможно нужно произвести некоторые танцы с бубном чтоб при включении опции tcoIconLeft вкладка отрисовывалась нормально.

У тебя ест нужный бубен? У меня точно пока нет.

--- Добавлено в 2018-11-29 01:34:09

Приехали, это кто вообще воткнул туда это флаг. Вот что пишет первоисточник (перевод)

TCS_FORCEICONLEFT (установка флага tcoIconLeft включает именно этот стиль)
Значки выравниваются с левым краем каждой вкладки фиксированной ширины. Этот стиль можно использовать только с стилем TCS_FIXEDWIDTH.


Редактировалось 5 раз(а), последний 2018-11-29 01:34:09
карма: 22

0
Ответов: 2236
Рейтинг: 676
#7: 2018-11-29 01:46:36 ЛС | профиль | цитата
nesco, думаю можно удалять эту опцию (tcoIconLeft). Если будете править, то и вот это:
        for i := 0 to _prop_Bitmaps.Count-1 do 
begin
ImgLst.ImgWidth := 16;
ImgLst.ImgHeight := 16;
ImgLst.AddMasked(_prop_Bitmaps.Objects[i], clWhite)
end;
можно исправить
        ImgLst.ImgWidth := 16;
ImgLst.ImgHeight := 16;
for i := 0 to _prop_Bitmaps.Count-1 do
ImgLst.AddMasked(_prop_Bitmaps.Objects[i], clWhite)

nesco писал(а):
Вот что пишет первоисточник

А ткните в первоисточник, есть желание покопаться.

Редактировалось 1 раз(а), последний 2018-11-29 01:49:01
карма: 11

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#8: 2018-11-29 01:48:11 ЛС | профиль | цитата
А теперь внимательно смотрим вот сюда

const TabControlFlags: array[ TTabControlOption ] of Integer = ( TCS_BUTTONS,
TCS_FIXEDWIDTH, not TCS_FOCUSNEVER,
TCS_FIXEDWIDTH or TCS_FORCEICONLEFT, TCS_FIXEDWIDTH or TCS_FORCELABELLEFT,
TCS_MULTILINE, TCS_MULTISELECT, TCS_RIGHTJUSTIFY, TCS_SCROLLOPPOSITE,
TCS_BOTTOM, TCS_VERTICAL, TCS_FLATBUTTONS, TCS_HOTTRACK, 0, TCS_OWNERDRAWFIXED );
И видим, что флаг tcoIconLeft автоматически включает tcoFixedWidth. Естественно, если текст не лезет, то он его на иконку будет натягивать, пытаясь воткнуть текст во вкладку.

Я уберу это флаг, он не применим в данном случае.

Первоисточник -- https://docs.microsoft.com/en-us/windows/desktop/controls/tab-control-styles

--- Добавлено в 2018-11-29 02:02:26

sla8a писал(а):
можно исправить

Я вообще не понял, почему цвет маски именно clWhite, а не clNone? Ведь при конвертации bmp в иконки именно clNone дает Alpha-канал.
Фиг с ним, тут проверять надо, оставим пока "как есть"

Редактировалось 3 раз(а), последний 2018-11-29 02:05:36
карма: 22

0
Ответов: 2236
Рейтинг: 676
#9: 2018-11-29 02:19:04 ЛС | профиль | цитата
nesco писал(а):
Я вообще не понял, почему цвет маски именно clWhite, а не clNone?
У меня кроме этого еще много вопросов по этому элементу. Но я лишь предложил вынести из цикла присвоения ширины и высоты, нет смысла это делать в цикле. Остальное надо проверять, прежде чем править.
карма: 11

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#10: 2018-11-29 02:31:41 ЛС | профиль | цитата
Я кажется понял, почему ставится clWhite -- у всех картинок в списке картинок цвет фона clWhite. Тч, это дело не трогаем.
карма: 22

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#11: 2018-11-29 12:28:18 ЛС | профиль | цитата
Пофиксил, проверяйте
карма: 22

0
Ответов: 494
Рейтинг: 163
#12: 2018-11-29 12:41:59 ЛС | профиль | цитата
nesco писал(а):
Пофиксил, проверяйте

nesco, спасибо! работает...
карма: 4

0
Ответов: 5227
Рейтинг: 587
#13: 2018-11-29 14:42:55 ЛС | профиль | цитата
Чисто для информации:
В таб-контрол в существующем варианте не добавить multi-line (а он очень удобен во многих случаях)
У себя пытаюсь модернизировать сделав его в качестве менеджера. (доработке так-же подвергнуты контейнеры Panel,ScrollBox,GroupBox)
В таком варианте не нужны связи типа doBringToFront + ориентация на вкладках по caClient (родитель то на вкладке есть, а чего ещё нужно то). Получается этакий pagecontrol, что гораздо удобней
Хотелось конечно чтобы контейнеры поддерживали стиль родителя как пологается.
Короче дело времени, которого у меня пока нет .

если кто не видел демку то тут http://forum.hiasm.com/getfile/38481

Редактировалось 1 раз(а), последний 2018-11-29 14:43:24
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#14: 2018-11-29 16:06:52 ЛС | профиль | цитата
andrestudio писал(а):
В таб-контрол в существующем варианте не добавить multi-line (а он очень удобен во многих случаях)

А почему, собственно? Вот включенный флаг tcoMultiline


В чем проблема его добавить?

Редактировалось 3 раз(а), последний 2018-11-29 16:08:15
карма: 22

0
Ответов: 5227
Рейтинг: 587
#15: 2018-11-29 16:10:00 ЛС | профиль | цитата
ну а у контейнеров страниц размер и позицию как будем регулировать
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)