<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: символы Unicode в окне GUI]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=2633&amp;type=atom" />
	<updated>2008-12-30T08:20:37Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=2633</id>
		<entry>
			<title type="html"><![CDATA[AHK: символы Unicode в окне GUI]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=17689#p17689" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2008-12-30T08:20:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=17689#p17689</id>
		</entry>
</feed>
