<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Окно-слайдер]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=8942</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8942&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Окно-слайдер».]]></description>
		<lastBuildDate>Tue, 26 Nov 2013 12:55:22 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[AHK: Окно-слайдер]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77566#p77566</link>
			<description><![CDATA[<p>Пример демонстрирует, как можно получить эффект &quot;выдвижения&quot; вспомогательного окна из основного с помощью winapi-функции <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms632669%28v=vs.85%29.aspx">AnimateWindow()</a>, и привязать вспомогательное окно к основному при передвижении.<br /></p><div class="codebox"><pre><code>Gui, +hwndhGui1
Gui, Add, Button, x125 y40 w70 gButton vButton, % Chr(0x2192)   ; значок стрелки вправо
Gui, Show, w200 h70

Gui, 2:+hwndhGui2 +Owner1 -Caption +Border
Gui, 2:Add, Text,, Здесь какая-то информация
VarSetCapacity(WI, 60)

OnMessage(0x3, &quot;Follow&quot;)     ; WM_MOVE = 0x3, отслеживаем передвижение главного окна
OnMessage(0x112, &quot;Follow&quot;)   ; WM_SYSCOMMAND = 0x112, отслеживаем минимизацию/восстановление главного окна
return

Button:   ; определяем положение главного окна и его клиентской области
   DllCall(&quot;GetWindowInfo&quot;, Ptr, hGui1, Ptr, &amp;WI)
   if i := !i
      Gui, 2:Show, % &quot;x&quot; NumGet(WI, 12, &quot;UInt&quot;) &quot; y&quot; NumGet(WI, 24, &quot;UInt&quot;) 
                  . &quot; h&quot; NumGet(WI, 32, &quot;UInt&quot;) - NumGet(WI, 24, &quot;UInt&quot;) &quot; hide&quot;

   DllCall(&quot;AnimateWindow&quot;, Ptr, hGui2, UInt, 400, UInt, 0x40000|(i ? 1 : 0x10002))   ; выдвигаем/задвигаем окно-слайдер
   GuiControl,, Button, % Chr(0x2190|(i ? 0 : 2))   ; меняем стрелку на кнопке
   return
   
GuiClose:
   ExitApp
   
Follow(wp, lp, msg, hwnd)
{
   global hGui1, WI, i
   static k
   if (msg = 0x112)
   {
      if (wp = 0xF020 &amp;&amp; k := 1)   ; SC_MINIMIZE = 0xF020
         Gui, 2:Show, Hide   ; скрываем окно-слайдер, если оно выдвинуто, при минимизации основного окна
      
      if (wp = 0xF120 &amp;&amp; !(k := 0) &amp;&amp; i)   ; SC_RESTORE = 0xF120
         Gui, 2:Show   ; показываем окно-слайдер, если оно было выдвинуто, при восстановлении основного окна
   }
   
   if (!i || hwnd != hGui1 || k = 1)
      return
; привязываем окно-слайдер к правой границе основного окна   
   DllCall(&quot;GetWindowInfo&quot;, Ptr, hGui1, Ptr, &amp;WI)
   Gui, 2:Show, % &quot;x&quot; NumGet(WI, 12, &quot;UInt&quot;) &quot; y&quot; NumGet(WI, 24, &quot;UInt&quot;)
               . &quot; h&quot; NumGet(WI, 32, &quot;UInt&quot;) - NumGet(WI, 24, &quot;UInt&quot;) &quot; NA&quot;
}</code></pre></div><p>Задать вопросы по коду можно в <a href="http://forum.script-coding.com/viewtopic.php?id=8928">этой</a> теме.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 26 Nov 2013 12:55:22 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77566#p77566</guid>
		</item>
	</channel>
</rss>
