<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=102520&amp;view=findpost&amp;p=779382</guid>
        <pubDate>Sun, 17 Jul 2005 14:46:07 +0000</pubDate>
        <title>Полная прозрачность формы, но не контолов на ней</title>
        <link>https://forum.sources.ru/index.php?showtopic=102520&amp;view=findpost&amp;p=779382</link>
        <description><![CDATA[Jenizix: Вот многие начинают спрашивать, как сделать так, чтобы сама форма была прозрачной полностью, а контролы на ней не прозрачные, ну или полупрозрачные... вот накатал примерчик: <br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#39;Нужно выставить у формы св-во BorderStyle = 0</div><div class="code_line">&#39;и чтобы кнопка формы отображалась на панели задач, нужно выставить св-во ShowInTaskbar = true</div><div class="code_line">Option Explicit</div><div class="code_line">&nbsp;</div><div class="code_line">Private Declare Function CreateRectRgn Lib &quot;gdi32&quot; (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long</div><div class="code_line">Private Declare Function CombineRgn Lib &quot;gdi32&quot; (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long</div><div class="code_line">Private Declare Function SetWindowRgn Lib &quot;user32&quot; (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long</div><div class="code_line">Private Declare Function DeleteObject Lib &quot;gdi32&quot; (ByVal hObject As Long) As Long</div><div class="code_line">Private Declare Function GetWindowLong Lib &quot;user32&quot; Alias &quot;GetWindowLongA&quot; (ByVal hWnd As Long, ByVal nIndex As Long) As Long</div><div class="code_line">Private Declare Function SetWindowLong Lib &quot;user32&quot; Alias &quot;SetWindowLongA&quot; (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long</div><div class="code_line">Private Declare Function SetLayeredWindowAttributes Lib &quot;user32&quot; (ByVal hWnd As Long, ByVal crey As Byte, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long</div><div class="code_line">&nbsp;</div><div class="code_line">Private Const GWL_EXSTYLE = -20</div><div class="code_line">Private Const WS_EX_LAYERED = &amp;H80000</div><div class="code_line">Private Const LWA_ALPHA = &amp;H2&amp;</div><div class="code_line">Private Const RGN_OR = 2</div><div class="code_line">&nbsp;</div><div class="code_line">Private Sub TranspForm(ByVal frm As Form, Transparency As Integer) &#39; значение Transparency может быть от 0 до 255 (0 - полностью прозрачная, 255 - непрозрачная)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim WindowRgn As Long &#39; тут будет храниться регион, по которому в последствии будет вырезано окно</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim ctrlRgn As Long &#39; тут будет храниться регион текущео конрола</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim ctrl As Control &#39; текущий контрол</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim NormalWindowStyle As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WindowRgn = CreateRectRgn(0, 0, 0, 0) &#39; создаем пустой регион</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;On Error Resume Next</div><div class="code_line">&nbsp;&nbsp; &nbsp;For Each ctrl In frm.Controls &#39; перебираем все контролы на форме</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ctrlRgn = CreateRectRgn(frm.ScaleX(ctrl.Left, frm.ScaleMode, vbPixels), frm.ScaleY(ctrl.Top, frm.ScaleMode, vbPixels), frm.ScaleX(ctrl.Left + ctrl.Width, frm.ScaleMode, vbPixels), frm.ScaleY(ctrl.Top + ctrl.Height, frm.ScaleMode, vbPixels)) &#39; создаем регион текущего контрола</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CombineRgn WindowRgn, WindowRgn, ctrlRgn, RGN_OR &#39; комбинируем его с регионом WindowRgn</div><div class="code_line">&nbsp;&nbsp; &nbsp;Next</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetWindowRgn frm.hWnd, WindowRgn, True &#39; вырезаем окно по региону WindowRgn</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;DeleteObject ctrlRgn</div><div class="code_line">&nbsp;&nbsp; &nbsp;On Error GoTo win98</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NormalWindowStyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE)</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetWindowLong Me.hWnd, GWL_EXSTYLE, NormalWindowStyle Or WS_EX_LAYERED</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetLayeredWindowAttributes Me.hWnd, 0, 255, LWA_ALPHA</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetLayeredWindowAttributes Me.hWnd, 0, (255 * Transparency) / 100, LWA_ALPHA</div><div class="code_line">win98:</div><div class="code_line">&nbsp;</div><div class="code_line">End Sub</div><div class="code_line">&nbsp;</div><div class="code_line">Private Sub Form_Load()</div><div class="code_line">&nbsp;&nbsp; &nbsp;TranspForm Me, 50 &#39; вызываем ф-ию которая делает форму прозрачной, а элементы на ней полупрозрачными</div><div class="code_line">End Sub</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Jenizix</author>
        <category>Формы, окна, диалоги, десктоп</category>
      </item>
	
      </channel>
      </rss>
	