Проблема с прозрачностью

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Проблема с прозрачностью

Сообщение zHackLeX » 23.01.2004 (Пт) 22:06

Вот у меня и в VB6 была эта проблема, я надеялся, что в VBnet проблемы не будет, а ситуация походу только ухудшилась. Значит, я хочу сделать нормальную программу настроек с интерфейсом WinXP, и встаёт проблема с TabStrip. Дело в том, что он в ХР использует градиентную заливку, и все контролы на нём выглядят просто жутко :twisted: : серый крадрат RadioButton'a на фоне красивого XP'шного TabStripa, который я взял из CommonControls SP2 взамен стандартного TabControl'a. Никто не знает, как сделять элемент управления прозрачным в VBNET? Помогите плиз...
Вложения
glitch.rar
УВЕДИТЕ ДЕТЕЙ ОТ МОНИТОРА
Эта жуть - то, как выглядит моя форма при запуске. Просто жуть.
(9.62 Кб) Скачиваний: 125
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 28.01.2004 (Ср) 13:45

Нет ничего проще! В окне свойств для радио буттона открываешь BackColor. Переходишь на страницу Web. Выбираешь самый верхний элемент: Transparent.
Изображение Вопросы - рёбрами!

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 29.01.2004 (Чт) 21:19

Если бы всё было так просто... Так ведь:
1) Если я ставлю FlatStyle=System, мне не
дадут сменить прозрачный цвет фона.
2) Если я уберу FlatStyle на Standard, то
мне нге дадут ХРшных переключателей.
ЧТО ДЕЛАТЬ?

ЗЫ: А ты сам-то пробовал?
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 30.01.2004 (Пт) 13:01

ЗЫ: у меня-то самого NT4, так что извини.

Но может, создать свой контрол, унаследовав от RadioButton?
By default, controls do not support transparent backcolors. However, you can allow your control to have a background color that is opaque, transparent, or partially transparent by using the Control.SetStyle Method in the constructor.

Смотри в хелпе:
Visual Basic and Visual C# Concepts, Giving Your Control a Transparent Background
Изображение Вопросы - рёбрами!

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 31.01.2004 (Сб) 22:48

Попробую. Но вот ещё что. Веть для того, чтобы использовать новый в студии TabControl, нужно сделать прозрачными все TabPagе'ы. Кстати, я тут видел просто :shock: ЗВЕРСКИЙ :shock: способ. Через функцию SetParent переносилась форма на TabStrip!! И если в VB6 это мало что давало, так как там у формы не было св-ва TransparencyKey, а теперь-то легче. Должно быть. Но у меня почему-то оператор Declare к этой функции от VB6 API Viewer не подходит к VBNET: Couldn't convert "Long" to "IntPtr". Вот так меня НЕТ обломал :twisted: . Есть идеи?
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 01.02.2004 (Вс) 14:53

В дот-нете Long имеет размер 64 байта, так что попробуй Integer (32 байта).
Изображение Вопросы - рёбрами!

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 02.02.2004 (Пн) 14:07

Так дело в том, что у меня хелпа вообще нету! :twisted: :x
Дай хоть ссылку, что ли.
ЗЫ. А как вообще применить SetStyle к RadioButton'у, у него даже и метода-то такого нет... Только, плиз, поподробнее, а то я VBNet вообще только вторую неделю вижу. И потом. А как быть с TabPage?
Как заставить её быть прозрачной? Иначе ведь все заботы будут напрасными. Народ, есть идеи?
ЗЗЫ. А к SetParent походу ножно другое объявление искать. Не хочет NET конвертировать Integer в IntPtr. Никак. :twisted: Где можно посмотреть, как объявить SetParent в Net?
Спасибо заранее.
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 02.02.2004 (Пн) 14:42

intptr это УКАЗАТЕЛЬ и как ты хочешь ковертнуть число к указателю :?: :shock:
2Lobo
integer в dotnet занимает 4 байта и ни как не больше, long - 8 байт :D :!:
ps господа вы поискать пробовали :?: Хотя бы здесь :?:
pps http://www.msdn.microsoft.com
Ничто так не ограничивает полёт мысли программиста, как компилятор

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 02.02.2004 (Пн) 17:04

64 бита и 32 бита, сорри! :oops:

Насчёт TabPage - не знаю, может, кто другой подскажет. :roll:

А с унаследованным контролом делается так. Только повторяю - у меня NT, и как будет на ХР - не представляю. И не знаю, чем это отличается от предыдущего совета с BackColor Transparent. :?: Но можно сделать так.

В Solution Explorer жмёшь правой кнопкой на проекте и выбираешь Add New Item. Выбираешь User Control. Даёшь имя, ОК. Открываешь код для нового контрола, заменяешь
System.Windows.Forms.UserControl на
System.Windows.Forms.RadioButton.
Открываешь область " Windows Form Designer generated code " и находишь Public Sub New() - конструктор. В конце его добавляешь
Код: Выделить всё
SetStyle(ControlStyles.SupportsTransparentBackColor, True)
Me.BackColor = Color.Transparent

Делаешь проекту Build. Переходишь в визульный дизайнер твоей формы, открываешь Toolbox, в самом низу находишь свой новенький контрол и добавляешь его на форму. Вот и всё! Попробуй, узнаем, что получится. :wink:
By default, controls do not support transparent backcolors. However, you can allow your control to have a background color that is opaque, transparent, or partially transparent by using the Control.SetStyle Method in the constructor. The SetStyle method is a method of the Control class that allows you to set particular style preferences for your controls, and can be used to enable or disable support for transparent backcolors.

To give your control a transparent backcolor

In the Code Editor for your control, locate the constructor.
Call the SetStyle method of your form in the constructor.
' Visual Basic
SetStyle(ControlStyles.SupportsTransparentBackColor, True)

// C#
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
This will enable your control to support a transparent backcolor.

Beneath the line of code you added in step 1, add the following line. This will set your control's BackColor to Transparent. :
' Visual Basic
Me.BackColor = Color.Transparent

// C#
this.BackColor = Color.Transparent;
Note that you can also create colors that are partially transparent using the Color.FromArgb method. For more information on colors, see Pens, Brushes, and Colors.
Изображение Вопросы - рёбрами!

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 16.02.2004 (Пн) 15:51

Извини, что молчу - клава накрылась. как только всё будет ок, напишу, а то в эом ОН-СКРИН-КЕЙБОРД-ХР прото запаришься набирать. извини. пока. :evil: :twisted: :evil: :twisted:
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

eZeus
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.08.2002 (Ср) 13:46

Сообщение eZeus » 16.02.2004 (Пн) 23:12

По дефолту у всех созданных контролов нижний цвет так называемый "Контрол", это значит, что объект с самого начала будет иметь цвет его Парента!!! По крайней мере на тест-драйве у меня получилось...

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 16.02.2004 (Пн) 23:19

Да, но дело в том, что парент - это и есть форма! А НЕ TABSTRIP!
А если размещать на TABPAGE, тогда у самого TABPAGE надо ставить этот цвет, но он всё равно серый. А цвет заднего фона "Контрол" не даёт прозрачности - это просто цвет, выбранный на закладке "Оформление" свойств экрана, для всех объемных объектов. Так что облом. А что касается TabStrip'a (из Windows Common Controls SP2), то он вообще не является контейнером. Так что эта версия отпадает. :(


ЗЫ. А у тябя у самого-то какая система?
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

eZeus
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.08.2002 (Ср) 13:46

Сообщение eZeus » 16.02.2004 (Пн) 23:37

Догда я так понимаю ты без ХРшных никак не можешь?!?
Сделай все стандартным, а ХРшный стиль возьми и поставь манифестом.

eZeus
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.08.2002 (Ср) 13:46

Сообщение eZeus » 17.02.2004 (Вт) 10:46

У меня ХР... гы пропустил вопросец

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 20.02.2004 (Пт) 21:47

Манифестом, или ресурсом, в этом разниц невелика. Всё равно, это не влияет на градиентную заливку и прозрачность элементов, которые её изначально не имели, т. е. TabControl и TabPage: TabControl приобретает заливку градиента (стиль ХР), a TabPage остаётся серым. Ровно как серыми остаются и все прочие контролы - чек- и радиобуттоны, фреймы и т. п. Облом-то какой!!! :evil: :twisted:
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 68

    TopList