Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Прозрачная форма Добавлено: 10.02.10 23:26  

Автор вопроса:  Spiritsun
Далаю круглые часы на рабочий стол. Извените, может я повторяюсь, проблемка такая, изображение фона часов в формате png (вобщем не важно), c альфа каналом (полупрозрачные края). Как сделать чтобы небыло видно фона формы?

Пытаюсь делать так, выставляю цвет фона формы .BackColor и .TransparencyKey равными, но тут возникает проблема, эти самые края с альфа каналом в png накладываются на фон до установки прозрачности и остаются видимыми. Тобиж получается окантовка с цветом фона.

Есть канечно выход, можно делать скриншот задней части формы и вручную методом DrawImage или слитием по OR смешивать с png, но это требует ресурсов и получается както ивратно.

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 11.02.10 09:01
Встроенными средставми НЕТ ты этого не сделаешь.. тебе надо юзать API UpdateLayeredWindow

Ответить

Номер ответа: 2
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #2 Добавлено: 11.02.10 15:34
EROS но можно для формы задать какой фигурой она будет отображаться, т.е. вместо простой прямоугольной формы можно сделать круг:
  1.  
  2.         Dim Path As New System.Drawing.Drawing2D.GraphicsPath ' создаём путь
  3.         Path.AddEllipse(New Rectangle(10, 10, 100, 100)) ' добавляем в путь круг
  4.         Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None ' ставим стиль формы, штоб верхняя полоска не была видна
  5.         Me.Region = New Region(Path) ' Вырезаем фигуру =)

Ответить

Номер ответа: 3
Автор ответа:
 Spiritsun



Вопросов: 15
Ответов: 44
 Профиль | | #3 Добавлено: 11.02.10 16:16
:) благодарю, API UpdateLayeredWindow - думаю это то что мне нужно. С круглой формой тоже прикольно, можно использовать, но текущую проблему не решает. Я хочу, чтобы края имели сглаживание по альфа каналу, если обрезать, то получаются заусенцы. Искал инфц по UpdateLayeredWindow, находил ток примеры по другим языкам или устаревшим версиям vba. К примеру у меня пишет, что мол "As Any" не поддерживается в ";Declare". У меня vba .net 2008. Помогите, пжалста, пжалста, пжалста как быть в моём случае.

Вот то, что смог найти:
http://msdn.microsoft.com/en-us/library/ms997507.aspx
http://forum.sources.ru/index.php?showtopic=209331
http://www.gamedev.ru/code/forum/?id=16069&page=2
http://forum.vingrad.ru/faq/topic-158155.html

Вот мой демо код:
png можно скачать отсюда http://spiritsun.narod.ru/files/fon.png
результат такой (виден зелёный контур) http://spiritsun.narod.ru/files/demofon.jpg
  1. ' Argb(0, 255, 0) выставлен в роли прозрачного цвета
  2. Imports System
  3. Imports System.IO
  4. Imports System.Text
  5. Imports System.Globalization
  6. Imports System.Drawing.Imaging
  7. Imports System.Windows.Forms
  8. Imports System.Windows
  9. Imports System.Math
  10. Public Class Main
  11.     Dim formclock As New Form
  12.     Dim clockimage As Image = Image.FromFile("fon.png")
  13.     Dim clockimgbitmap As New Bitmap(clockimage)
  14. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  15. formclock.FormBorderStyle = FormBorderStyle.None
  16. formclock.StartPosition = FormStartPosition.Manual
  17. formclock.Location = New System.Drawing.Point(clock_x, clock_y)
  18. formclock.TopMost = True
  19. formclock.AutoSize = False
  20. formclock.BackColor = Color.FromArgb(0, 255, 0)
  21. formclock.TransparencyKey = Color.FromArgb(0, 255, 0) ' прозрачный цвет фона
  22. formclock.BackgroundImage = clockimage
  23. formclock.Size = New Size(picclock.Size.Width, picclock.Size.Height)
  24. formclock.Show()
  25. System.Windows.Forms.Application.DoEvents()
  26. End Sub
  27. End Class

Ответить

Номер ответа: 4
Автор ответа:
 Spiritsun



Вопросов: 15
Ответов: 44
 Профиль | | #4 Добавлено: 11.02.10 17:11
23 строку над убрать :) это я сначало в picturebox вставлял, результат был одинаковый. В строке 17 ввести параметры x,y. Строки Imports много лишних, но не обращайте внимания.

Ответить

Номер ответа: 5
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #5 Добавлено: 12.02.10 11:02
твой демокод - это туфта.. ты тупо помести картинку на задний фон, и задал TransparencyKey . Повторю еще раз - тебе нужно юзать UpdateLayeredWindow. Ищи инфу и разбирайся.. если все сделаешь верно, то в итоге получишь примерно такую шляпу..

http://clip2net.com/page/m25397/3942223

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 12.02.10 11:11
EROS но можно для формы задать какой фигурой она будет отображаться

афигеть.. а я даже не догадывался.. надо будет патсанам сказать!

Ответить

Номер ответа: 7
Автор ответа:
 Spiritsun



Вопросов: 15
Ответов: 44
 Профиль | | #7 Добавлено: 12.02.10 17:15
EROS, да, это и надо. а можно код?

Ответить

Номер ответа: 8
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #8 Добавлено: 13.02.10 12:21
http://kbyte.ru/Forum/Show.aspx?id=8115&lang=ru

Ответить

Номер ответа: 9
Автор ответа:
 Spiritsun



Вопросов: 15
Ответов: 44
 Профиль | | #9 Добавлено: 13.02.10 14:01
Благодарю. А то я тут сижу уже, не ем, не пью, зеленею, корни пускаю мучаясь в догадках.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам