<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MikeSoft &#187; клавиатура</title>
	<atom:link href="http://mikesoft.ws/tag/%d0%ba%d0%bb%d0%b0%d0%b2%d0%b8%d0%b0%d1%82%d1%83%d1%80%d0%b0/feed/" rel="self" type="application/rss+xml" />
	<link>http://mikesoft.ws</link>
	<description>Practical Software</description>
	<lastBuildDate>Mon, 28 Nov 2011 18:09:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Использование мультимедийной клавиатуры в Delphi-приложениях</title>
		<link>http://mikesoft.ws/2007/05/09/multimedia-keys/</link>
		<comments>http://mikesoft.ws/2007/05/09/multimedia-keys/#comments</comments>
		<pubDate>Wed, 09 May 2007 11:25:38 +0000</pubDate>
		<dc:creator>Smike</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[клавиатура]]></category>

		<guid isPermaLink="false">http://mikesoft.ws/?p=114</guid>
		<description><![CDATA[Многие из нас пользуются мультимедийными или расширенными клавиатурами, где кроме обычных 100 с чем-то клавиш есть клавиши, упрощающие доступ к часто используемым функциям. Например, навигацию в браузере (Home, Back, Forward, Refresh, Stop), проигрывание музыки и фильмов в плеере, вызов калькулятора, почтового клиента и т.д. Эти дополнительные клавиши действительно часто упрощают вызов постоянно используемых действий. Как [...]]]></description>
			<content:encoded><![CDATA[<p>Многие из нас пользуются мультимедийными или расширенными клавиатурами, где  кроме обычных 100 с чем-то клавиш есть клавиши, упрощающие доступ к часто  используемым функциям. Например, навигацию в браузере (Home, Back, Forward,  Refresh, Stop), проигрывание музыки и фильмов в плеере, вызов калькулятора,  почтового клиента и т.д.</p>
<p>Эти дополнительные клавиши действительно часто упрощают вызов постоянно  используемых действий. Как же сделать поддержку этих клавиш в Delphi, чтобы  пользователю было удобнее пользоваться нашей программой?<span id="more-114"></span></p>
<p>Все дело в том, что дополнительные клавиши не эмулируют нажатие той или иной  комбинации, а имеют собственные коды:</p>
<table border="1">
<tbody>
<tr>
<th>Название</th>
<th>Код</th>
<th style="text-align: center;">Вызываемое приложение (по-умолчанию)</th>
</tr>
<tr>
<td style="text-align: center;" colspan="3">Группа Internet</td>
</tr>
<tr>
<td>Back</td>
<td>166</td>
<td></td>
</tr>
<tr>
<td>Forward</td>
<td>167</td>
<td></td>
</tr>
<tr>
<td>Stop</td>
<td>169</td>
<td></td>
</tr>
<tr>
<td>Favorites</td>
<td>171</td>
<td></td>
</tr>
<tr>
<td>Search</td>
<td>170</td>
<td>Windows Search</td>
</tr>
<tr>
<td>Refresh</td>
<td>168</td>
<td></td>
</tr>
<tr>
<td>Home</td>
<td>172</td>
<td>Internet Explorer или другой браузер по-умолчанию</td>
</tr>
<tr>
<td>Mail</td>
<td>180</td>
<td>Windows Mail или другой почтовый клиент по-умолчанию</td>
</tr>
<tr>
<td style="text-align: center;" colspan="3">Audio</td>
</tr>
<tr>
<td>Mute</td>
<td>173</td>
<td>Включает/выключает звук в системе</td>
</tr>
<tr>
<td>-Vol</td>
<td>174</td>
<td>Уменьшает уровень звука в системе</td>
</tr>
<tr>
<td>+Vol</td>
<td>175</td>
<td>Увеличивает уровень звука в системе</td>
</tr>
<tr>
<td>Media</td>
<td>181</td>
<td>Windows Media Player</td>
</tr>
<tr>
<td>Stop</td>
<td>178</td>
<td></td>
</tr>
<tr>
<td>Play/pause</td>
<td>179</td>
<td></td>
</tr>
<tr>
<td>Next</td>
<td>176</td>
<td></td>
</tr>
<tr>
<td>Prev</td>
<td>177</td>
<td></td>
</tr>
<tr>
<td style="text-align: center;" colspan="3">Другие</td>
</tr>
<tr>
<td>Calculator</td>
<td>183</td>
<td>Калькулятор</td>
</tr>
<tr>
<td>My Computer</td>
<td>182</td>
<td>Мой компьютер</td>
</tr>
</tbody>
</table>
<p>Кроме того, как видно из таблицы, некоторые клавиши вызывают определенные  программы или выполняют какие-то действия в системе, независимо от активного  приложения. Видимо это происходит из-за того, что этим действиям назначены  глобальные горячие клавиши, лично я этот вопрос не изучал.</p>
<p>Нажатия дополнительных клавиш можно перехватить в событии <em>OnKeyDown</em> формы или компонентов, параметр <em>Key</em> которого будет в этом случае  содержать какой-то из приведенных в таблице кодов. Но что делать если все  горячие клавиши приложения построены на специально предназначенном для этого  механизме — <em>Actions</em>? Здесь не все так тривиально, так как  мультимедийные клавиши не имеют названий и занести их в свойства  <em>TAction.Shortcut</em> или <em>TAction.SecondaryShortcuts</em> не выйдет. Но  это только в <strong>Object Inspector</strong>. На самом деле свойство  <em>SecondaryShortcuts</em> представляет собой список особого вида: класс  <em>TShortCutList</em>, наследник <em>TStringList</em>. В его свойстве  <em>Items</em> хранятся названия горячих клавиш: те, которые вводятся в  <strong>Object Inspector</strong>. А в свойстве <em>Objects</em> список  «закодированных» в тип <em>TShortCut</em> горячих клавиш, соответствующих тем,  что находятся в свойстве <em>Items</em>. Таким образом можно добавить  дополнительные горячие клавиши к экшену программно:</p>

<div class="wp_syntax"><div class="code"><pre class="delphi" style="font-family:monospace;">  <span style="color: #808080; font-style: italic;">(* Action1 будет реагировать на нажатие
   &quot;интернетного&quot; Next на мультимедийной клавиатуре *)</span>
  Action1<span style="color: #000066;">.</span><span style="color: #006600;">SecondaryShortCuts</span><span style="color: #000066;">.</span><span style="color: #006600;">AddObject</span><span style="color: #000066;">&#40;</span><span style="color: #ff0000;">''</span><span style="color: #000066;">,</span> <span style="color: #000066; font-weight: bold;">TObject</span><span style="color: #000066;">&#40;</span>ShortCut<span style="color: #000066;">&#40;</span><span style="color: #0000ff;">167</span><span style="color: #000066;">,</span> <span style="color: #000066;">&#91;</span><span style="color: #000066;">&#93;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
  <span style="color: #808080; font-style: italic;">(* Action2 будет реагировать на нажатие
     Back на мультимедийной клавиатуре *)</span>
  Action2<span style="color: #000066;">.</span><span style="color: #006600;">SecondaryShortCuts</span><span style="color: #000066;">.</span><span style="color: #006600;">AddObject</span><span style="color: #000066;">&#40;</span><span style="color: #ff0000;">''</span><span style="color: #000066;">,</span> <span style="color: #000066; font-weight: bold;">TObject</span><span style="color: #000066;">&#40;</span>ShortCut<span style="color: #000066;">&#40;</span><span style="color: #0000ff;">166</span><span style="color: #000066;">,</span> <span style="color: #000066;">&#91;</span><span style="color: #000066;">&#93;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></pre></div></div>

<p>Добавив такой код в событие <em>TForm.OnCreate</em>, можно обеспечить  поддержку мультимедийных горячих клавиш для любых действий.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikesoft.ws/2007/05/09/multimedia-keys/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

