<?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>https://forum.script-coding.com/viewtopic.php?id=14204</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14204&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Прокрутка на дробное число строк».]]></description>
		<lastBuildDate>Wed, 03 Oct 2018 11:30:53 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129034#p129034</link>
			<description><![CDATA[<p>Почему же бесмысленной?<br />Вы считаете, что фаерфокс умножает на k ≈1.8±0.1, зависит от масштаба в лисе.<br />А у меня таких выводов нету.<br />Вот так у меня идет сдвиг на 4.8 линии при любом значении в реестре и масштаба в лисе.<br /></p><div class="codebox"><pre><code>n := 4.8

wheel_delta := 120
RegRead WheelScrollLines, HKCU\Control Panel\Desktop, WheelScrollLines
if !WheelScrollLines
   WheelScrollLines := 3
Line_Height := 120/WheelScrollLines
new_delta := Line_Height*n
f1::
f2::
if (A_ThisHotkey = &quot;f1&quot;)
   i := -1
else
   i := 1
if (WheelScrollLines = 3) and (new_delta &gt; wheel_delta)
   i*=2
PostMW(new_delta*i)



PostMW(delta)
{ ;http://msdn.microsoft.com/en-us/library/windows/desktop/ms645617(v=vs.85).aspx
  CoordMode, Mouse, Screen
  MouseGetPos, x, y
  Modifiers := 0x8*GetKeyState(&quot;ctrl&quot;) | 0x1*GetKeyState(&quot;lbutton&quot;) | 0x10*GetKeyState(&quot;mbutton&quot;)
              |0x2*GetKeyState(&quot;rbutton&quot;) | 0x4*GetKeyState(&quot;shift&quot;) | 0x20*GetKeyState(&quot;xbutton1&quot;)
              |0x40*GetKeyState(&quot;xbutton2&quot;)
  PostMessage, 0x20A, delta &lt;&lt; 16 | Modifiers, y &lt;&lt; 16 | x ,, A
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Wed, 03 Oct 2018 11:30:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129034#p129034</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129032#p129032</link>
			<description><![CDATA[<p>Вы написали код, пытающийся компенсировать их хак; у меня приблизительное описание самого хака со стороны браузера.<br />Кстати при изменении масштаба страницы работает? А при изменении дефолтных 3 строк прокрутки в винде?<br /></p><div class="quotebox"><cite>Malcev пишет:</cite><blockquote><div class="quotebox"><cite>stealzy пишет:</cite><blockquote><p>PostMW(-120-72) ; так сдвинет на 4</p></blockquote></div><p>Не на 4, а на 2.4.</p></blockquote></div><p>Вполне допускаю что у вас замена двух PostMW(-120) и PostMW(-72) на PostMW(-120-72) и приводит к изменению прокрутки с 8 до 2.4 WheelDown.<br />У меня же - с 8 до 4 WheelDown.<br />Дальнейшую дискуссию по теме считаю бессмысленной.</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Wed, 03 Oct 2018 08:29:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129032#p129032</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129030#p129030</link>
			<description><![CDATA[<div class="quotebox"><cite>stealzy пишет:</cite><blockquote><p>Методом тыка, после обнаружения teadrinker&#039;ом в 24 посте</p></blockquote></div><p>Я у себя такое не наблюдаю, а вижу следующий алгоритм:<br /></p><div class="codebox"><pre><code>n := -727
wheel_delta := 120

f1::PostMW(n)
f2::
if (abs(n) &lt;= wheel_delta)
   PostMW(n)
else
{
   count := floor(abs(n)/2/wheel_delta) + 1
   delta := abs(n)/n*wheel_delta
   loop % count
   {
      If (A_Index = count)
         delta := mod(n/2, wheel_delta)
      PostMW(delta)
   }
}


PostMW(delta)
{ ;http://msdn.microsoft.com/en-us/library/windows/desktop/ms645617(v=vs.85).aspx
  CoordMode, Mouse, Screen
  MouseGetPos, x, y
  Modifiers := 0x8*GetKeyState(&quot;ctrl&quot;) | 0x1*GetKeyState(&quot;lbutton&quot;) | 0x10*GetKeyState(&quot;mbutton&quot;)
              |0x2*GetKeyState(&quot;rbutton&quot;) | 0x4*GetKeyState(&quot;shift&quot;) | 0x20*GetKeyState(&quot;xbutton1&quot;)
              |0x40*GetKeyState(&quot;xbutton2&quot;)
  PostMessage, 0x20A, delta &lt;&lt; 16 | Modifiers, y &lt;&lt; 16 | x ,, A
}</code></pre></div><div class="quotebox"><cite>stealzy пишет:</cite><blockquote><p>PostMW(-120-72) ; так сдвинет на 4</p></blockquote></div><p>Не на 4, а на 2.4.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Wed, 03 Oct 2018 02:40:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129030#p129030</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129029#p129029</link>
			<description><![CDATA[<p>Это псевдокод.<br />Методом тыка, после обнаружения teadrinker&#039;ом в 24 посте.<br />Моя ошибка, я использовал строгое сравнение, заменить &lt; на &lt;=. Поправил.<br /></p><div class="codebox"><pre><code>   PostMW(-120-72) ; так сдвинет на 4</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Tue, 02 Oct 2018 20:47:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129029#p129029</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129026#p129026</link>
			<description><![CDATA[<div class="quotebox"><cite>stealzy пишет:</cite><blockquote><p>if (MOUSEEVENTF_WHEEL &lt; 120 and WheelScrollLines = 3) MOUSEEVENTF_WHEEL := MOUSEEVENTF_WHEEL * k ; k ≈1.8±0.1</p></blockquote></div><p>А откуда вы взяли эту формулу?<br />У меня этот код в фаерфоксе постоянно сдвигает ползунок на расстояние равное 8 посыланием wheeldown, при настройках шага в 3 линии. <br /></p><div class="codebox"><pre><code>f1::
loop 5
{
   PostMW(-120)
   PostMW(-72)
}
return


PostMW(delta)
{ ;http://msdn.microsoft.com/en-us/library/windows/desktop/ms645617(v=vs.85).aspx
  CoordMode, Mouse, Screen
  MouseGetPos, x, y
  Modifiers := 0x8*GetKeyState(&quot;ctrl&quot;) | 0x1*GetKeyState(&quot;lbutton&quot;) | 0x10*GetKeyState(&quot;mbutton&quot;)
              |0x2*GetKeyState(&quot;rbutton&quot;) | 0x4*GetKeyState(&quot;shift&quot;) | 0x20*GetKeyState(&quot;xbutton1&quot;)
              |0x40*GetKeyState(&quot;xbutton2&quot;)
  PostMessage, 0x20A, delta &lt;&lt; 16 | Modifiers, y &lt;&lt; 16 | x ,, A
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 02 Oct 2018 18:54:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129026#p129026</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129024#p129024</link>
			<description><![CDATA[<p>Ну всё-таки не совсем предсказуемо. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 02 Oct 2018 18:10:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129024#p129024</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129021#p129021</link>
			<description><![CDATA[<p>Gecko обрабатывает особым образом:<br /></p><div class="codebox"><pre><code>if (MOUSEEVENTF_WHEEL &lt;= 120 and WheelScrollLines = 3)
	MOUSEEVENTF_WHEEL := MOUSEEVENTF_WHEEL * k ; k ≈1.8±0.1, зависит от масштаба в лисе</code></pre></div><div class="codebox"><pre><code>F1::Wheel(-3) ; равна прокрутке от {WheelDown} ≈ k*3 ≈ 6
F2::Wheel(-3.05) ; равна прокрутке от нажатия {Down} ≈ 3
F3::Wheel(-5.95) ;  равна прокрутке от {WheelDown} ≈ 6
F4::Send {WheelDown}

Wheel(lines) {
	RegRead WheelScrollLines, HKCU\Control Panel\Desktop, WheelScrollLines
	LINE_HEIGHT := 120/WheelScrollLines ; LINE_HEIGHT := 40 for Edit
	WHEEL_DELTA := lines*LINE_HEIGHT
	DllCall(&quot;mouse_event&quot;, uint, MOUSEEVENTF_WHEEL:=0x800, int, dx:=0 ,int, dy:=0, uint, WHEEL_DELTA, int, 0)
}</code></pre></div><p>В Sublime F1 будет прокручивать на 3 строки при любых значениях WheelScrollLines.<br />В лисе формула будет как в коде выше, но не совсем точно.<br />В контролах Edit значение WheelScrollLines также обозначает минимальный квант прокрутки (по умолчанию 3), но там LINE_HEIGHT := 40 не зависит от значения записи в реестре.</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Tue, 02 Oct 2018 16:56:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129021#p129021</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129020#p129020</link>
			<description><![CDATA[<p>Больше 3 фаерфокс не обрабатывает.<br />Поэтому так можно:<br /></p><div class="codebox"><pre><code>f1::
MOUSEEVENTF_WHEEL := 0x800, LINE_HEIGHT := 40
WHEEL_DELTA := 3*LINE_HEIGHT, dx := 0, dy := 0, dir := -1
DllCall(&quot;mouse_event&quot;, uint, dwFlags := MOUSEEVENTF_WHEEL, int, dx ,int, dy, uint, dir*WHEEL_DELTA, int, 0)
sleep 10
WHEEL_DELTA := 1.8*LINE_HEIGHT, dx := 0, dy := 0, dir := -1
DllCall(&quot;mouse_event&quot;, uint, dwFlags := MOUSEEVENTF_WHEEL, int, dx ,int, dy, uint, dir*WHEEL_DELTA, int, 0)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 02 Oct 2018 16:51:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129020#p129020</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129018#p129018</link>
			<description><![CDATA[<p>Да, вот так у меня прокручивает страницу в FF ровно на такое же расстояние, как один поворот колеса. Но если сделать коэффициент 4.8, почему-то прокручивает на меньшее расстояние.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 02 Oct 2018 16:05:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129018#p129018</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129017#p129017</link>
			<description><![CDATA[<p>Вот 120:<br /></p><div class="codebox"><pre><code>f1::
MOUSEEVENTF_WHEEL := 0x800, LINE_HEIGHT := 40
WHEEL_DELTA := 3*LINE_HEIGHT, dx := 0, dy := 0, dir := -1
DllCall(&quot;mouse_event&quot;, uint, dwFlags := MOUSEEVENTF_WHEEL, int, dx ,int, dy, uint, dir*WHEEL_DELTA, int, 0)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 02 Oct 2018 15:26:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129017#p129017</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129016#p129016</link>
			<description><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>Предсказуемо</p></blockquote></div><p>Не-а. Запускаю MS Spy, выбираю WM_MOUSEWHEEL для окна FF. Дискретно прокручиваю колесо мыши, получаю zDelta: -120, запускаю код — получаю zDelta: -192. Всё математически правильно, но прокручивается на меньшее расстояние.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 02 Oct 2018 15:19:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129016#p129016</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129015#p129015</link>
			<description><![CDATA[<p>Предсказуемо.<br />Тут подробно описано:<br /><a href="https://www.codeproject.com/Articles/155717/Handling-Enhanced-Mouse-Wheels-in-your-Application">https://www.codeproject.com/Articles/15 … pplication</a></p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 02 Oct 2018 14:54:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129015#p129015</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129014#p129014</link>
			<description><![CDATA[<p>Пробовал PhpStorm — тоже только на кратное 3 поворачивает, плавная прокрутка есть. В общем, работает в каких-то приложениях, в некоторых — непредсказуемо.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 02 Oct 2018 14:34:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129014#p129014</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129012#p129012</link>
			<description><![CDATA[<p>А как вы в FF определили точное число строк?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 02 Oct 2018 14:20:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129012#p129012</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Прокрутка на дробное число строк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129011#p129011</link>
			<description><![CDATA[<p>Да, я проверял, 4.8*40 = 4.8 строки, если совершить это действие 5 раз выйдет прокрутка ровно на 24 строки.<br />Но это sublime, а что в браузере...</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Tue, 02 Oct 2018 14:15:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129011#p129011</guid>
		</item>
	</channel>
</rss>
