Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прозрачный задник формы, Но видимое остальное 
V
    Опции темы
Enteropoly
Дата 16.7.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



Что-то я покопался в инете, но проблему не решил. Итак...

Для своей игры я хочу использовать такую штучку: 3 слоя рисования + "Тачскрин". Для этого мне потребуется 4 формы одинакового размера. Самая нижняя форма (слой рисования 3) делается непрозрачной, остальные три над ней (слои рисования 2, 1 и тачскрин) - прозрачными. Тачскрин берёт на себя все функции по кликам, скроллам и.т.п., а 3 формы под ним только отрисовывают происходящее (в отдельных потоках). 

Вопрос таков: как мне сделать форму прозрачной, но в то же время рисовать на ней через Control.Graphics вполне себе непрозрачные квадратики-кружочки? Много что перепробовал, пока безрезультатно...


Тестил, к примеру:
- Различные TransparencyKey и Backcolor (не работает)
- this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
   this.SetStyle(ControlStyles.UserPaint, true);
   this.BackColor = Color.Transparent; (работает почему-то только частично в самых неожиданных местах (см. скриншот))

Формы, если что, растянуты на весь экран (по текущему разрешению экрана) и у них, само собой, нету бордеров. 
 smile 

ЗЫ. На скриншоте - кусочек игрового поля, внутри маленьких кружков форма прозрачна и виден текст в visual studio. Изначально форма белая, но почему-то перекрашивается в серую.

Это сообщение отредактировал(а) Enteropoly - 16.7.2009, 17:29

Присоединённый файл ( Кол-во скачиваний: 35 )
Присоединённый файл  ______.JPG 13,84 Kb
PM MAIL   Вверх
Enteropoly
Дата 16.7.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



Итак, если добавить в код отрисовки такое, например

Код

e.Graphics.FillRectangle(Brushes.White, 0, 0, 1000, 1000);


то форма будет прозрачна, но и весь функционал её как бы тоже "просвечивается", ибо кликнуть на такую форму нельзя совершенно. Не пойдёт.

-------------------

Ещё один апдейт. Если выставить Opacity = 0.01F, то форма будет прозрачно И сохранять функциональность! Но на такой форме всё равно нельзя рисовать...  smile 

-------------------

Я тут покурил и подумал... Что если тачскрин сделать с opacity = 0.01, а прозрачные слои для рисования закрывать прямоугольником с прозрачной заливкой такой, типа с добавлением другого цвета в процентах, и процент выставить тоже близким к нулю. Теоретически (!) должно заработать  smile  Но проверю позже =)  

А вообще на самом деле всё  может оказаться намного проще =)

Это сообщение отредактировал(а) Enteropoly - 16.7.2009, 21:49
PM MAIL   Вверх
Enteropoly
Дата 17.7.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 17.6.2009

Репутация: нет
Всего: нет



Да, всё оказалось намного проще =)

- У тачскрина делаем Opacity 0.01
- У прозрачных слоёв делаем BackColor, который не будет использоваться в рисовании (например Pink) и выставляется TransparencyKey = BackColor (или рисуется заполненный Pink'ом прямоугольник размером с форму перед основным рисованием). 
- При срабатывании эвента на тачксрине, райзим аналогичные эвенты на слоях. всё =)

Вот результат - прозрачный слой для рисования под тачскрином =)  smile

Спасибо за внимание  smile 

Это сообщение отредактировал(а) Enteropoly - 17.7.2009, 12:12

Присоединённый файл ( Кол-во скачиваний: 33 )
Присоединённый файл  screen1.png 171,43 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1051 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.