<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Closure(Замыкание) функции]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=11062</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=11062&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Closure(Замыкание) функции».]]></description>
		<lastBuildDate>Fri, 06 Nov 2015 07:56:31 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Closure(Замыкание) функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=98706#p98706</link>
			<description><![CDATA[<p>Вот так подходит?<br /></p><div class="codebox"><pre><code>tlt := new tlt
Class tlt{
	create(text=&quot;&quot; , delay=2000, coordX=&quot;&quot; , coordY=&quot;&quot;,endCallback = &quot;&quot;){
		this.text:=text , this.delay:=delay , this.coordX:=coordX , this.coordY:=coordY , this.endCallback:=endCallback
		ToolTip % text, coordX, coordY
		Settimer % this,% &quot;-&quot; delay
		}
	__Call(name){
		if (name=&quot;call&quot;){
			ToolTip
			% (this.endCallback) and this.create(this.text, this.delay,this.coordX,this.coordY,this.endCallback)
		}}}

tlt.create(&quot;тест&quot;,2000,100,100,1)
F1::tlt.endCallback := &quot;&quot;		; выключить.(тултип повторно не появится после ожидания времени.)</code></pre></div><p>Вариант 2:<br /></p><div class="codebox"><pre><code>tlt := new tlt
Class tlt{
	__Call(name , text=&quot;&quot; , delay=2000, coordX=&quot;&quot; , coordY=&quot;&quot;,endCallback = &quot;&quot;) {
		if (name = &quot;create&quot;) and (this.delay := delay) and (this.endCallback := endCallback) {
			ToolTip % text, coordX, coordY
			Settimer % this,% &quot;-&quot; delay
		} Else If (name = &quot;call&quot;)
			if this.endCallback
				Settimer % this,% &quot;-&quot; this.delay
			else
				ToolTip
}}

tlt.create(&quot;тест&quot;,2000,100,100,1)
F1::tlt.endCallback := &quot;&quot;		; выключить.(тултип повторно не появится после ожидания времени.)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (yalanne)]]></author>
			<pubDate>Fri, 06 Nov 2015 07:56:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=98706#p98706</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Closure(Замыкание) функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=98704#p98704</link>
			<description><![CDATA[<p>Читайте внимательно хэлп про таймер. Его можно организовать не только с помощью метки, но и Func-объекта, к которому можно забиндить нужные параметры.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Fri, 06 Nov 2015 05:43:27 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=98704#p98704</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Closure(Замыкание) функции]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=98702#p98702</link>
			<description><![CDATA[<p>Здравствуйте.<br />Подскажите пожалуйста как организовать <a href="https://ru.wikipedia.org/wiki/Замыкание_(программирование)">замыкание</a> в AHK?<br />А если нельзя делать замыкание, то подскажите, плиз, лучший путь для обхода ограничения.</p><p>Пример: функция открывает подсказку с закрытием по истечению времени, при закрытии должен быть произведен обратный вызов (если он передан)<br /></p><div class="codebox"><pre><code>; Обертка для вызова подсказки (предполагается что с обратным вызовом по таймауту)
UIToolTip(text = &quot;&quot;, delay = 2000, coordX = &quot;&quot;, coordY = &quot;&quot;, endCallback = &quot;&quot;)
{
	ToolTip % text, coordX, coordY, 
	SetTimer, RemoveToolTip, %delay% 	; Установка таймера на закрытие
	return
	
	; Метка деактивации всплывшей подсказки
	RemoveToolTip:
	{
		SetTimer, %A_ThisLabel%, Off 	; Деактивация таймера
		ToolTip,
		if (IsFunc(endCallback))
			endCallback.Call(text)			; Активация обратного вызова
		return
	}
}</code></pre></div><p>Пример вызова:<br /></p><div class="codebox"><pre><code>^F7:: ; Ctrl + F7 - тестирование
{
	UIToolTip(&quot;My Notify&quot;, 1000,,, Func(&quot;ShowText&quot;))
}

ShowText(text)
{
	MsgBox % text
	return
}</code></pre></div><p>К сожалению Label вызывается без контекста(окружения) и переданные в функцию значение {endCallback, text} физически не видит. Печально (((</p><p>На данный момент обошелся глобальной переменной с биндом, но хотелось бы все же решить с Closure<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>global GUIToolTipCallback := &quot;&quot;

; Обертка для вызова подсказки (предполагается что с обратным вызовом по таймауту)
UIToolTip(text = &quot;&quot;, delay = 2000, coordX = &quot;&quot;, coordY = &quot;&quot;, endCallback = &quot;&quot;)
{
	GUIToolTipCallback := endCallback.Bind(text)
	ToolTip % text, coordX, coordY, 
	SetTimer, RemoveToolTip, %delay% 	; Установка таймера на закрытие
	return
	
	; Метка деактивации всплывшей подсказки
	RemoveToolTip:
	{
		SetTimer, %A_ThisLabel%, Off 	; Деактивация таймера
		ToolTip,
		if (IsObject(GUIToolTipCallback))
			GUIToolTipCallback.Call()		; Активация обратного вызова
		return
	}
}</code></pre></div></div></div><p>Заранее спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (sigmov)]]></author>
			<pubDate>Fri, 06 Nov 2015 02:35:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=98702#p98702</guid>
		</item>
	</channel>
</rss>
