<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: символы Unicode в окне GUI]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=2633</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=2633&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: символы Unicode в окне GUI».]]></description>
		<lastBuildDate>Tue, 30 Dec 2008 08:20:37 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[AHK: символы Unicode в окне GUI]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=17689#p17689</link>
			<description><![CDATA[<p>Сам AutoHotkey не поддерживает Юникод, и окно, которое создаётся командой Gui, имеет неюникодовский класс и не может отображать символы, не входящие в набор ANSI. Но контролы, которые в него помещаются командой Add, - это уже стандартные окна Windows, и их классы (Button, Edit и пр.) - юникодовские.</p><p>Так что проблема сводится к тому, где взять юникодовскую строку, чтобы им передать для отображения. Непосредственно в текст скрипта её не вставить. Но можно, например, формировать динамически, записывая в память коды её символов.</p><p>Пример ниже при каждом нажатии на кнопку помещает на неё текст, состоящий из одного символа. Код символа при каждом нажатии увеличивается на 1. Также этот символ добавляется в Edit.<br /></p><div class="codebox"><pre><code>; При создании GUI нужно задать шрифт, в котором имеются нужные символы.

Gui, Font, s18, Lucida Sans Unicode
Gui, Add, Button, x5 y5 gUniButton hwndButtonID, OK
Gui, Add, Text, x+10, Code:
Gui, Add, Edit, x+10 w120       ; Edit1 - для кода.
Gui, Add, Edit, x5 y+30 w300 h100 hwndEditID
Gui, Show

WM_SETTEXT = 0xC                ; Замена текста.
EM_REPLACESEL = 0xC2            ; Вставка вместо выделенного, если есть,
                                ; иначе - туда, где текстовый курсор.
SetFormat, Integer, Hex

CharCode = 0x2100               ; Код начального символа.
VarSetCapacity(Buf,4,0)         ; Буфер под код. Первые 2 байта под символ,
                                ; последние 2 - нулевые, терминатор строки.

Return


UniButton:
  GuiControl,, Edit1, %CharCode%        ; Показать сам код.
  NumPut(CharCode, Buf, 0, &quot;UShort&quot;)    ; Запись кода в память.
  DllCall(&quot;SendMessageW&quot;, &quot;UInt&quot;, ButtonID, &quot;UInt&quot;, WM_SETTEXT
                        , &quot;UInt&quot;, 0, &quot;UInt&quot;, &amp;Buf)
  DllCall(&quot;SendMessageW&quot;, &quot;UInt&quot;, EditID, &quot;UInt&quot;, EM_REPLACESEL
                        , &quot;UInt&quot;, 0, &quot;UInt&quot;, &amp;Buf)
  ++CharCode       ; Следующий символ.
Return

GuiClose:
  ExitApp</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Tue, 30 Dec 2008 08:20:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=17689#p17689</guid>
		</item>
	</channel>
</rss>
