powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / xp/vista style; common controls 5/6; regsvr32 на x86/x64
25 сообщений из 62, страница 2 из 3
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36577377
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДмитрий77>скопипастить на форму ImageList с этими черными иконками и то, что там у вас с ним связано
цветным оно уже не станет даже в другом проекте.
Вот я и хочу на это посмотреть.
Я отослал вам на e-mail.
test6-это чистая "6", скопированная из оригинала чистой 6-ки
test5-это переделка 6->5 через блокнот + внутри ф-ция плоских кнопок и на всяк.случай в архиве эта же переделка но сразу после переделки, мне один раз удалось испортить даже в этом тесте

как испортил?
предположения:
был запущен большой проект 5, но как не крутил повторить не удалось
м.б. банально чуть попутал кавычки и пробелы в заголовке "5"-ки, в форме там кавычки и пробелы

GDI/gdi+ как бы в большом проекте используется не хило(из моих топиков с участием Бенедикта вам несложно это понять) , но на 6-ках никаких глюков никогда не было, думаю это ни причем.

TestBlack это собственно уже копия из большого проекта в чистую 5-ку после того как все уже произошло
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36577427
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О-па! глюк происходит все-таки при сохранении.
Но не обязательно при первом сохранении, и не обязательно при первом запуске после рокового сохранения. Это ввело в заблуждение. Т.е. ресурсы походу вообще ни при чем, а причем:
AntonariyДмитрий77Существует ли удобный способ замены/преобразования?Открыть в текстовом редакторе *.vbp и заменить строку Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; mscomctl.ocx на Object={6B7E6392-850A-101B-AFC0-4210102A8DA7}#1.3#0; COMCTL32.OCX.

В файлах *.frm заменить аналогичные строки в заголовках, а так же все строки типа MSComctlLib.TreeView на ComctlLib.TreeView.

Это не решит все проблемы сразу, но по крайней мере их создаст.

Никоим образом не обвиняю.Сам так хотел поступить
Значит че, надежней вооружиться карандашиком и блокнотиком (а лучше двумя мониторами и двумя PC, с этим хотя бы проблем нет) и вперед,добавляем 5-ку, меняем колеса по одному с проверкой промежуточных результатов. Под конец удаляем 6-ку?...анализом абракодабров в блокноте желания заниматься как бы нет...
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36577563
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Час сидел, вставлял эти картинки в ImageList-5. Напрасно, тот же эффект с 3-х запусков,сохранений. Получается, глючность ImageList v.5. Была идея попытаться пристыковать ImageList v.6 но понятно, провалилась. Тупик.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36577664
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если этот хренов ImageList-5 грузить картинками динамически при старте, то он не глючит, но для хранения изображений он никуда не годен.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub InitToolbar()
    Dim i As Integer
    Dim hToolbar As Long
    hToolbar = GetWindow(Toolbar1.hWnd, GW_CHILD)
    SetWindowLong hToolbar, GWL_STYLE, GetWindowLong(hToolbar, GWL_STYLE) Or TB_STYLE_FLAT
    For i =  0  To  34 
        ImageListToolBar.ListImages.Add , PictureToolBar(i).Tag, PictureToolBar(i).Picture
    Next i
    For i =  1  To  23 
        With Toolbar1.Buttons(i)
            If Len(.Key) >  0  Then
                .image = .Key
            End If
        End With
    Next i
End Sub

Но,блин, опять же, манифест исправно срезает нижнюю строчку иконки (если кнопка enabled=false) на классическом интерфейсе. В сочетании с добавлением 60-ти лишних точек к высоте тулбара снизу не есть очень гуд.(видимо это не исправить,т.к. тупица вычисляет высоту по выпуклым классическим кнопкам а не по flat) Пришлось перерисовывать disable-картинки урезанными на нижнюю строчку, чтоб было более менее и одинаково на разных с-мах. Да нет нормально, но это только один тулбар кот. почти без замены кода.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36577688
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а с этим, СтрипTAB-ом что делать? Нет стиль к нему прекрасно применяется, но как совместить цвета? Левые контролы я смотрел, но это не то. А нельзя просто рамку и тексты прозрачными сделать?
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36578343
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Я отослал вам на e-mail.Посмотрел.
Я почти уверен, что в ImageList вы добавляли gif с прозрачным фоном. ImageList с ним работать толком не умеет. Вместо этого нужно фон сделать фиолетовым, к примеру, и задать фиолетовый MaskColor, после этого все будет пучком 100%.

Jah loves you.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36578365
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не почти, а уверен на те же 100%, я вспомнил, как натыкался на этот эффект, и поначалу лечил его, заливая фон серым, а потом догадался, для чего нужен MaskColor.

Дмитрий77Нет стиль к нему прекрасно применяется, но как совместить цвета?Это вы про что?

Jah loves you.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36578394
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДа не почти, а уверен на те же 100%, я вспомнил, как натыкался на этот эффект, и поначалу лечил его, заливая фон серым, а потом догадался, для чего нужен MaskColor.

Дмитрий77Нет стиль к нему прекрасно применяется, но как совместить цвета?Это вы про что?

Jah loves you.

+1
очень похоже
масккалор хитрая штука и малиновый цвет битмапов в примерах от микрософта
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36578682
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЯ почти уверен, что в ImageList вы добавляли gif с прозрачным фоном.
Ну, не угадали.
В основном исходники иконок взяты отсюда: (Microsoft Fax XP)
fxsclntR.dll
Toolbar-128
Bitmap-130
Bitmap-131
Все эти дела ретушируются, бьются по 16х16 , раньше делал bitmap с белым фоном, но потом стал делать ico с прозрачным, но bimap-ы где-то остались частично. (инструменты vc++6;IcoFX 1.6 )

А что на счет моей идеи загрузки из PictureBox(0 to N)?
Иконки в PictureBox хранятся кстати надежно? В смысле вставляются в exe? Мне кажется да.
(потому что большие картинки надо вставлять в ресурсы, или тащить отдельно, насколько знаю...)

В принципе, у меня их не так много всего, чтобы было лениво нарисовать массив картинок.
Но и не так мало, чтобы над всем этим (да и над собой тоже) еще раз издеваться.
Мой способ работает на ура вроде как.

AntonariyДмитрий77Нет стиль к нему прекрасно применяется, но как совместить цвета?Это вы про что?
Кто-то тут обмолвился что TabStrip самый глючный, теперь понял. В XP/Vista стиле для него применяется градиентная подложка, т.е. все фреймы, label-ы etc кот. вы на него накладываете имеют цвет ButtonFace по умолчанию и будут выглядеть как заплатки.
Причем цвет подобрать невозможно, ибо там градиент. В основном все решения сводятся либо к очень большому к-ву кода, что на.. не нужно, ибо я не посвящаю программу TabStrip-у, либо какие-нибудь "красивые" (читай непотребные) tab-ы не имеющие с XP стилем ничего общего. Плюс практически все решения имеют глюк: при переключении стиля и запущенном окне это будет выглядеть непотребно, но это бог с ним: микросовтовские родные окна при переключении стиля тоже слегка страдают. Другая бяка, что эти новоявленные громоздские контролы могут быть подстроены под XP, но выдадут такую дрянь на Висте, что...шли бы они лесом.

Самое красивое и очень простое решение я нашел здесь:
http://www.vbforums.com/showthread.php?t=507336 и к нему склоняюсь.
Идея:
1) Frame или Picture должен быть полностью вписан в прямоугольную основную область TabStrip-а
(опытным путем нашел, что +10(точек?) от верхнего и левого края и (-50) от нижнего и правого края будет в самый раз.. если не так, поправьте )
2) взять цвет в верхнем левом углу первого таба и закрасить в этот цвет все вышеописанные Frame-ы Picture и все что внутри.
Градиентов конечно не будет, но это не очень заметно, а стильные полоски-подсветки вверху и общий характер цвета фона все сохраняется, выглядит отлично.
Вот код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

Private Sub Command1_Click()
    Dim st As Long, pt As Long
    
    st = GetDC(TabStrip1.hwnd)
    pt = GetPixel(st,  2 ,  5 )
    
    FrameInTab.BackColor = pt
    Label1.BackColor = pt
...
End Sub

Автор высказывает следующие переживания (и он прав):
but when using it in the Form_Paint or Form_Initialize event in order to do it automatically, it's too fast and gets the color behind the form (i.e. desktop background).
и действительно,в Form_Initialize это не срабатывает.

Но помозговав с минутку, я таки нашел решение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 
Private Sub Form_Activate()
   Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
    Command1_Click 'код выше
    Timer1.Enabled = False
End Sub
И желание автора сбывается даже при Timer1.Interval=1 (1 миллисекунда задержки).
Посему вопрос:
имеет ли право это решение на жизнь? хорошо ли использовать таймер? Или можно отследить событие "стиль применен" иначе? Какой ставить интервал таймера чтоб не сглючило? (Interval=10 напр. не заметен, а если Interval=200, то уже заметно на глаз.)
Или все же есть более грамотное решение (а-ля прозрачный фон, Но естественно не +10 дополнит.глючных контролов + 100 страниц кода)
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36578899
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ основном исходники иконокНе суть важно, избавляйтесь от прозрачного фона. Или используйте свой способ, как хотите.
авторА что на счет моей идеи загрузки из PictureBox(0 to N)?Тогда уж в ресурсы программы, PB охочи до оперативки. А еще есть забавный контрол PictureClip, в него можно поместить один рисунок, например блок 1х10 иконок, и обращаться как к двумерному массиву, он порежет самостоятельно. Не знаю, правда, дружит ли он с прозрачным фоном.
авторНо и не так мало, чтобы над всем этим (да и над собой тоже) еще раз издеваться.По крайней мере в будущем имейте это ввиду, избавляйтесь от прозрачности заранее.
автор(опытным путем нашел, что +10(точек?) от верхнего и левого края и (-50) от нижнего и правого края будет в самый раз.. если не так, поправьте )Поправляю: высота табов зависит от размера шрифта, который может быть изменен системно. Эту высоту нужно выяснять сообщением TCM_GETITEMRECT. Еще вам будет полезна эта функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Declare Function OpenThemeData Lib "uxtheme.dll" (ByVal hWnd As Long, ByVal pszClassList As Long) As Long
Private Declare Function CloseThemeData Lib "uxtheme.dll" (ByVal hTheme As Long) As Long

Public Function ThemesEnabled(hWnd As Long) As Boolean
Dim hTheme As Long
    hTheme = OpenThemeData(hWnd, StrPtr("Window"))
    CloseThemeData hTheme
    ThemesEnabled = hTheme <>  0 
End Function
При отключении стилей все эти дельты изменятся.
авторимеет ли право это решение на жизнь? хорошо ли использовать таймер?Да, если нет желания сабклассить форму в поисках подходящего сообщения. Или, если у вас на форме какой-нибудь юзерконтрол, можно использовать его событие Show.

авторИли все же есть более грамотное решениеКстати да, я однажды сделал прозрачный контейнер именно для использования с табстрипом. Могу выложить, если надо, он не глючный)
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36578921
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати да, я однажды сделалВернее нашел и доделал.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36579088
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Тогда уж в ресурсы программы, PB охочи до оперативки.
Ну хорошо, прямой вопрос.
50-100 маленьких иконочек 16х16х256цв в PictureBox-ах не отменит мировую революцию?
Потому как честно уже неохота это переделывать по крайней мере сейчас.
У меня еще ListView-ы впереди, ибо от идеи "все и сразу" я отказался, последовательно вожусь с каждым, и забот как видим хватает.

>Поправляю: высота табов зависит от размера шрифта, который может быть изменен системно.
Я поигрался: у меня в табе и всяких label-ах жестко зашит Ms Sans Serif 8, поэтому ничего не меняется. М.б. тогда не стоит заморачиваться?
При стилях немного съезжает, но я взял незаметный запас (на XP дельта больше-под нее и надо ориентироваться, на классике ,и похоже на висте тоже, градиентов нету и нет проблем) так что опять: может не заморачиваться?
Меня больше волновал вопрос разного разрешения экрана, компьютер же мыслит в пикселях, а у меня заданы точки, как VB стандартно предлагает. Но тесты показали, что все в порядке.

>Еще вам будет полезна эта функция:..OpenThemeData...
возможно, надо поковыряться.
Но только, я не вдумывался пока...ради момента переключения стилей... мммм
1) Таймером что ли долбить систему? ради отследить событие вероятность которого "раз в жизни да и то не факт", кто ж стили меняет при запущенных куче приложений...
2) Потом в моем варианте не так уж похабно этот момент выглядит, как в тех контролах.

>Кстати да, я однажды сделал прозрачный контейнер именно для использования с табстрипом. Могу выложить, если надо, он не глючный)
Я бы взглянул хотя бы из любопытства. ДА, если несложно.

Но уже склоняюсь к своему варианту. Видимо оставлю старт-таймер с интервал=10 (береженого бог бережет). Стараться имеет смысл только ради XP конкретно, ибо на Висте у меня все вообще
Original(градиентов похоже там и правда нет).
А я же разные контролы использую внутри Tab->Frame(Picture) примитивные, но все же, возиться придется возможно.
И потом принцип у меня: поменьше OCX. Microsoft Common Controls было исключением, через API тяжеловато бывает, но, видите как нарвался не по детски.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36579127
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий7750-100 маленьких иконочек 16х16х256цв в PictureBox-ах не отменит мировую революцию?Нет, конечно, но лучше используйте Image.
Дмитрий77ради отследить событие вероятность которого "раз в жизни да и то не факт"Дело не в этом, а в том, что я, например, для достижения нужного мне эстетического результата подгоняю все с точностью до пикселя, а при переключении стилей толщина всяких бордюров меняется, и там, где при включенных стилях все было идеально, при отключенных появляются всякие лишние полосы и т.п. В качестве выхода из положения использую эту функцию в Form_Resize.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36579368
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
я вот смотрю на этот ваш контрол.
Судя по всему чего-то очень простое.
Во-первых общий вопрос-если я его использую мне ж ни каких ocx за собой тащить не надо? Так? Вроде так.
Во вторых, как он поможет в решении с TabStrip?
Он ведь сам имеет какой-то цвет?
Т.е. кладу на него Label: Label будет иметь цвет вашего контрола. Кладу TextBox-Textbox не будет прозрачным, у меня Textbox-ы в половине случаев там используются, чтоб выделялся текст.
Но я основного не понял: мне же надо чтобы он сам был прозрачным, чтобы подложка была под цвет TabStpip (чтоб видеть градиенты). Т.е. я не улавливаю...

>для достижения нужного мне эстетического результата подгоняю все с точностью до пикселя, а при переключении стилей толщина всяких бордюров меняется

в случае с моей реализацией TabStrip, если подогнано под XP, то на остальных бордюров не будет в силу одинаковости цвета.

Но насчет "подгоняю"... Меня пока чуть злит Тулбар? Как его высоту подсократить через API? Понимаю что зависит от высоты кнопки, но как ему сказать через API: ну ка приведи высоту в соотв. с высотой кнопки и с учетом того что ты flat, потому что в OCX v.5 к высоте добавляется снизу лишнее, я уже писал выше. И как побороть обрезание иконки на одну строку снизу если Button.enable=false; Стиль=классика;манифест=используется, тоже упомянул про это. Т.е. я эту нижнюю строку рисунка вообще убрал для disable. (Типа enable-есть тень снизу;disable-тени нет), но с ней лучше было бы, картинки и так мелкие..16х16.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36579418
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Контрол имеет цвет только в дизайн-тайме, при запуске становится прозрачным, никаких библиотек не требует. Какие-то свойства нужно установить в дизайне, сейчас не помню и не на работе, чтобы посмотреть.

Насчет тулбара, выложите скриншот, а то не очень понятно, что там обрезается. Может и не обрезается, а перекрывается нижними контролами.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36579596
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyникаких библиотек не требует.
Это конечно хорошо...
AntonariyКонтрол имеет цвет только в дизайн-тайме, при запуске становится прозрачным
Прозрачным он становится, но применительно к обсуждаемому вопросу он принимает цвет формы, а не цвет/градиент табстрипа.
И глюки с цветом шрифта на label что в него вставлена, даже в дизайн-тайм. Не понимаю чего происходит...Без тестового примера и объяснения рецепта приготовления вряд ли осилю.


AntonariyНасчет тулбара, выложите скриншот, а то не очень понятно, что там обрезается. Может и не обрезается, а перекрывается нижними контролами.
Ничего там не перекрывается...

из картинок обе проблемы хорошо видны.
С обрезанием все понятно.
Под ним ListView : Listview.top=toolbar.height
Просто для Control-6 я устанавливаю высоту ToolBar =360 в режиме flat в дизайне
а для Control-5 у меня этого режима в дизайне нет, поэтому приходится соглашаться на =420
Но когда я применяю код:
Код: plaintext
1.
2.
3.
   Dim hToolbar As Long
    hToolbar = GetWindow(Toolbar1.hWnd, GW_CHILD)
     SetWindowLong hToolbar, GWL_STYLE, GetWindowLong(hToolbar, _
        GWL_STYLE) Or TB_STYLE_FLAT
он становится плоским, но его высота сохраняется

Играть пытался
Код: plaintext
1.
2.
3.
4.
5.
    Const WM_USER = &H400
    Const TB_SETSTYLE = WM_USER +  56 
    Const TB_GETSTYLE = WM_USER +  57 
    Const TB_AUTOSIZE = (WM_USER +  33 )
    Const TB_SETBUTTONSIZE = (WM_USER +  31 )
    Call SendMessage(Toolbar1.hWnd, TB_AUTOSIZE,  0 ,  0 )
но ничего не выходит.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36580044
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПрозрачным он становится, но применительно к обсуждаемому вопросу он принимает цвет формыПо непонятной причине в режиме прозрачности он сам себя делает невидимым. Рабочий пример в аттаче, на форму кинут контрол, в дизайне никакие свойства не задаются, все в Form_Load.
авториз картинок обе проблемы хорошо видны.Понятно, это глюк Disabled. Нужно создать второй ImageList с кнопками для отключенного режима (я думал вы так и делаете), например сделав их черно-белыми. Еще можно попробовать стиль TBSTYLE_WRAPABLE, при его наличии работают всякие дополнительные эффекты. Например можно задать отступы от края кнопки до картинки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Sub SetButtonPadding(ByVal lPaddingX As Integer, ByVal lPaddingY As Integer)
Dim lxy As Long
    If m_hToolbar <>  0  Then
        lxy = MakeDWord(lPaddingX, lPaddingY)
        SendMessageLong m_hToolbar, TB_SETPADDING,  0 , lxy
    End If
End Sub

Public Function MakeDWord(LoWord As Integer, HiWord As Integer) As Long
    MakeDWord = (HiWord * &H10000) Or (LoWord And &HFFFF&)
End Function
Чтобы магия сработала, у SendMessage последний параметр обязательно должен быть объявлен как long.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36580051
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аттач забыл.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36580306
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
с контролом все понятно
Код: plaintext
1.
    TranspContainer1.BackColor = vbMagenta
    TranspContainer1.TransparentColor = vbMagenta
vbMagenta(это что за Magenta кстати?)-вот этого не хватало для понимания, но...
я использую textbox-ы locked=false (это даже не важно), чтоб можно было по ним ходить, а для них прозрачность не сработает

В данном конкретном случае думаю придется оставить свой вариант, а ваш иметь в виду на будущее.

>Нужно создать второй ImageList с кнопками для отключенного режима (я думал вы так и делаете), например сделав их черно-белыми.

Черно-белые картинки я и использую, каждая вторая на скриншоте, но в том же ImageList, когда делаю disabled, то меняю номер картинки. А второй ImageList это как? Там же вроде один только указывается?

>Например можно задать отступы от края кнопки до картинки:
Ну это мне как-то не очень нравится...

И вы ничего не сказали про "лишнюю высоту" тулбара 420-360=60.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36580335
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77vbMagenta(это что за Magenta кстати?)-вот этого не хватало для понимания, но...
Object BrowserConst vbMagenta = 16711935 (&HFF00FF)
Member of VBA.ColorConstants Такой себе ядовито-малиновый цвет :)
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36580573
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносДмитрий77vbMagenta(это что за Magenta кстати?)-вот этого не хватало для понимания, но...
Object BrowserConst vbMagenta = 16711935 (&HFF00FF)
Member of VBA.ColorConstants Такой себе ядовито-малиновый цвет :)Ну почему малиновый???))) Это расово фиолетовый цвет, RGB(255, 0, 255) чистоганом. Малиновый — RGB(220, 20, 60).
Цвет может быть любой, главное чтобы TransparentColor и BackColor совпадали.

Дмитрий77я использую textbox-ы locked=false (это даже не важно), чтоб можно было по ним ходить, а для них прозрачность не сработаетВы проверяли? Какая разница, какое у них состояние? Работает всегда. Не работает лишь для безоконных контролов, меток например, поэтому их приходится имитировать с помощью Print.

Дмитрий77А второй ImageList это как?А, ну да, в ocx эту возможность не включили (хочется взять и уе$%@tь). Вообще тулбару можно назначить два имаджлиста (a ListView целых три), один с картинками для кнопок в их нормальном состоянии, другой — в отключенном. Придется опять подключать апи. Кстати, в архиве с апишными контролами есть файл CommCtrl.tlb, в нем объявлены все CommonControls-константы и некоторые функции, рекомендую подключить. Откомпилированному файлу он не нужен.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Call CreateDisImageList
Call AddDisImageListBitmap(LoadResPicture("toolbar", vbResBitmap), vbMagenta)

Public Sub CreateDisImageList(Optional lWidth As Integer =  16 , Optional lHeight As Integer =  16 )
    If m_hDisImageList<> 0  Then ImageList_Destroy m_hDisImageList
    m_hDisImageList = ImageList_Create(lWidth, lHeight, ILC_COLOR32 Or ILC_MASK,  1 ,  1 )
    SendMessage m_hToolbar, TB_SETDISABLEDIMAGELIST,  0 , ByVal m_hDisImageList
End Sub

Public Function AddDisImageListBitmap(ByVal hBitmap As Long, Optional ByVal MaskColor As Long = CLR_NONE) As Long
    If m_hToolbar <>  0  And m_hImageList <>  0  Then
        If (MaskColor <> CLR_NONE) Then
            AddDisImageListBitmap = ImageList_AddMasked(m_hDisImageList, hBitmap, MaskColor)
        Else
            AddDisImageListBitmap = ImageList_Add(m_hDisImageList, hBitmap,  0 )
        End If
    End If
End Function
Картинка в ресурсах — bmp с фиолетовым фоном размером КолВоКнопок*16х16 пикселей 32хбитного цвета. Можно и меньше, но смысла экономить на спичках не вижу.

Дмитрий77Ну это мне как-то не очень нравится...Дело вкуса. На больших интерфейсах проще попадать по крупным кнопкам. На скриноте "Администратора образования" с предыдущей страницы как раз такие увеличенные кнопки, меньше, чем 32, но больше, чем 16.
Дмитрий77И вы ничего не сказали про "лишнюю высоту" тулбара 420-360=60.И вряд ли скажу без примера.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36580979
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДмитрий77я использую textbox-ы locked=false (это даже не важно), чтоб можно было по ним ходить, а для них прозрачность не сработаетВы проверяли? Какая разница, какое у них состояние? Работает всегда. Не работает лишь для безоконных контролов, меток например, поэтому их приходится имитировать с помощью Print.
Проверял, с Textbox не получается(см.картинку). М.б. плохо проверял, еще проверю.
Antonariy
Дмитрий77А второй ImageList это как?А, ну да, в ocx эту возможность не включили (хочется взять и уе$%@tь). Вообще тулбару можно назначить два имаджлиста (a ListView целых три), один с картинками для кнопок в их нормальном состоянии, другой — в отключенном. Придется опять подключать апи. Кстати, в архиве с апишными контролами есть файл CommCtrl.tlb, в нем объявлены все CommonControls-константы и некоторые функции, рекомендую подключить. Откомпилированному файлу он не нужен.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Call CreateDisImageList
Call AddDisImageListBitmap(LoadResPicture("toolbar", vbResBitmap), vbMagenta)

Public Sub CreateDisImageList(Optional lWidth As Integer =  16 , Optional lHeight As Integer =  16 )
    If m_hDisImageList<> 0  Then ImageList_Destroy m_hDisImageList
    m_hDisImageList = ImageList_Create(lWidth, lHeight, ILC_COLOR32 Or ILC_MASK,  1 ,  1 )
    SendMessage m_hToolbar, TB_SETDISABLEDIMAGELIST,  0 , ByVal m_hDisImageList
End Sub

Public Function AddDisImageListBitmap(ByVal hBitmap As Long, Optional ByVal MaskColor As Long = CLR_NONE) As Long
    If m_hToolbar <>  0  And m_hImageList <>  0  Then
        If (MaskColor <> CLR_NONE) Then
            AddDisImageListBitmap = ImageList_AddMasked(m_hDisImageList, hBitmap, MaskColor)
        Else
            AddDisImageListBitmap = ImageList_Add(m_hDisImageList, hBitmap,  0 )
        End If
    End If
End Function
Картинка в ресурсах — bmp с фиолетовым фоном размером КолВоКнопок*16х16 пикселей 32хбитного цвета. Можно и меньше, но смысла экономить на спичках не вижу.

А в этот API-ImageList картинки из PictureBox вставить нельзя, как в обычный? С ресурсами сейчас неохота морочиться.

Antonariy
Дмитрий77И вы ничего не сказали про "лишнюю высоту" тулбара 420-360=60.И вряд ли скажу без примера.

Пример:
рисуем Toolbar в Control-5 У него кнопки обычные в дизайнере. Пытаемся сделать height=360. Не получается. Соглашамся на 420.
Через API делаем его FLAT (код был выше). Становится FLAT. Но высоту сохраняет 420. В итоге между ним и listview (см.правую картинку выше, listview.top=toolbar.height) образуется серый зазор Дельта=60, потому что норм. высота для flat =360 (см. левую картинку). Какой еще пример нужен?
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36580996
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77А в этот API-ImageList картинки из PictureBox вставить нельзя, как в обычный?Да ради бога, просто для меня как раз проще с ресурсами.
Дмитрий77(см.картинку)Картинки не грузяццо.
Дмитрий77Какой еще пример нужен?Конкретный, в виде проекта.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36581631
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картинки в ресурсах и их фон -это отдельная тема.
32-бит-картинки-тоже отдельная тема.
Создание ImageList через API-тоже отдельная тема.
Для всех трех ImageList можно использовать обычный ImageList.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    ' Get the toolbar handle (we cannot just use tbrMain.hwnd as this is a container
    ' window for the actual toolbar control)
    hTBar = FindWindowEx(Toolbar1.hWnd,  0 &, "ToolbarWindow32", vbNullString)
        
'    DeactivateWindowTheme hTBar
    ' The style "TBSTYLE_FLAT" needs to be added.  Although this option is available
    ' in the property pages for the toolbar, it needs to be set here.
    
    ' Get the current style
    lngStyle = SendMessage(hTBar, TB_GETSTYLE,  0 &, ByVal  0 &)
    
    ' Add the TBSTYLE_FLAT style (could also apply other styles here)
    lngStyle = lngStyle Or TBSTYLE_FLAT
        
    ' Set the new style
    Call SendMessage(hTBar, TB_SETSTYLE,  0 &, ByVal lngStyle)

    ' Now add the ImageList's for the normal, hot, and disabled states
    lRes = SendMessage(hTBar, TB_SETIMAGELIST,  0 , ByVal ImageListToolBar.hImageList)
    lRes = SendMessage(hTBar, TB_SETHOTIMAGELIST,  0 , ByVal ImageListToolBarDis.hImageList)
    lRes = SendMessage(hTBar, TB_SETDISABLEDIMAGELIST,  0 , ByVal ImageListToolBarDis.hImageList)
    Call SendMessage(hTBar, TB_AUTOSIZE,  0 ,  0 )
    Toolbar1.Refresh
Очень полезный код, и хорошо что я его нашел/воспроизвел и не полез в дебри.
Нет не то.
Когда мы имеем TB_SETDISABLEDIMAGELIST, то мы вообще не отображаем картинку в режиме disable. Мы просто отображаем другую цветную (пусть бы и черно-белую) картинку, это не так хорошо смотрится как disabled, где винды рисуют "негатив".

Хорошо, я пошел другим путем. Просто перерисовал 16х16 в 17х17, оставив нижнюю строчку иконки пустой, т.е. та же картинка 16х16, но с добавлением пустой строки снизу и пустого столбца справа(слева). Antonariy, что думаете? Два проекта disable и disable17 я послал вам.
17 не похабно смотрится? там две кнопки, загружают разные Imageлисты в Toolbar и галка для реального disabled. Срезание будет на 16 на классич. интерфейсе на exe-шнике. Вот уменьшать картинки до 15 уже похабство.
Заодно с высотой Toolbar не глянете.
TB_AUTOSIZE делает высоту Toolbar 420 для 16х16 и 435 для 17х17.
Я считаю что это избыток, приблизительно 60 точек под кнопками лишние. Либо надо применить еще какой-нибудь стиль... Toolbar 6-й версии имеет базовую высоту 360 для 16х16.
...
Рейтинг: 0 / 0
xp/vista style; common controls 5/6; regsvr32 на x86/x64
    #36585317
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С высотой ничего в голову не приходит.
...
Рейтинг: 0 / 0
25 сообщений из 62, страница 2 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / xp/vista style; common controls 5/6; regsvr32 на x86/x64
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]