<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Определение размеров элементов Dx9 overlay]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=14636</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14636&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Определение размеров элементов Dx9 overlay».]]></description>
		<lastBuildDate>Sun, 10 Mar 2019 11:55:01 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132877#p132877</link>
			<description><![CDATA[<p>Отлично, я ещё не успел затестить на других разрешениях, потому вы меня успокоили.</p>]]></description>
			<author><![CDATA[null@example.com (belyankin12)]]></author>
			<pubDate>Sun, 10 Mar 2019 11:55:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132877#p132877</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132876#p132876</link>
			<description><![CDATA[<p>Чем выше разрешение, тем меньше ширина текста. Если бы размер шрифта был&nbsp; подобран правильно, точнее было бы с DllCall.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 10 Mar 2019 11:41:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132876#p132876</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132875#p132875</link>
			<description><![CDATA[<p>Завтра испытаю на деле, сказал я, позабыв что 8 марта день рабства для меня <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Сейчас проверил - область определения была гораздо больше реальной, причем увеличивалась она линейно с увеличением длины текста. Потом я вспомнил что этот API не дружит с разрешениями экрана отличными чем 800х600, потому применил формулу 800*ширина текста/1920 и вот теперь область достаточно идеальная для моих целей (полагаю, что текст с большим количеством спец. символов теряет в своей ширине примерно 10-20 пикселей, для примера использовал этот) <br /></p><div class="codebox"><pre><code>Oasdflkajdlaksdjaslkdjsal dlkajsldk asdasdpa poa spod \[pasd  |\\ \ \ \as ds \ \s dd s/  / ds/ /  ds d\s ds\ ds \ds \d s\ ; на последнем /ds заканчивается область</code></pre></div><p>ибо я все равно не планирую использовать слишком длинные строки с огромным количеством символов. Хотя все равно любопытно почему так (кстати GUI выдает несколько большую ширину конкретно этого текста чем функция с DllCall - я полагаю функция с GUI надежнее?). В любом случае огромное Вам спасибо!</p><p>P.S. Кстати интересует ваше мнение, это вообще нормально что ширина одного и того же текста&nbsp; на разных разрешениях будет разной?</p>]]></description>
			<author><![CDATA[null@example.com (belyankin12)]]></author>
			<pubDate>Sun, 10 Mar 2019 11:07:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132875#p132875</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132860#p132860</link>
			<description><![CDATA[<p><strong>teadrinker</strong>, спасибо за помощь, завтра испытаю на деле.</p>]]></description>
			<author><![CDATA[null@example.com (belyankin12)]]></author>
			<pubDate>Thu, 07 Mar 2019 17:23:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132860#p132860</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132856#p132856</link>
			<description><![CDATA[<p>Битмап не потеряется, пока файл будет на месте. Размер текста:<br /></p><div class="codebox"><pre><code>String = Unilaya Pora O4ey O4arovanie

Gui, ToolTipWindow:New, -Caption +ToolWindow +LastFound
Gui, ToolTipWindow:Default
Gui, Font, s17 bold cBlue, Times New Roman
Gui, Margin, 0, 0
Gui, Color, 0xFFFFE1
Gui, Add, Text,, % String
Gui, Show, y100

WinGetPos,,, W, H
MsgBox, % &quot;Ширина окна &quot; W &quot;`nВысота окна &quot; H
Gui, Destroy

if dim := GetTextSize(String, &quot;Times New Roman&quot;, &quot;s17 bold&quot;)
   MsgBox, % &quot;Ширина текста &quot; . dim.w . &quot;`nВысота текста &quot; . dim.h
ExitApp

GetTextSize(String, FontName, Options)
{
   static SIZE
   coding := A_IsUnicode ? &quot;W&quot; : &quot;A&quot;
   LOGPIXELSY := 90
   FW_NORMAL := 400, FW_BOLD := 700
   DEFAULT_CHARSET := 1
   DEFAULT_QUALITY := OUT_DEFAULT_PRECIS := CLIP_DEFAULT_PRECIS := 0

   if !RegExMatch(Options, &quot;i).*s(\d+).*&quot;, Found)
   {
      MsgBox, Не задан размер шрифта!
      Return
   }
   s := Found1

   if !InStr(Options, &quot;bold&quot;)
   {
      if !RegExMatch(Options, &quot;i).*w(\d+).*&quot;, Found)
         w := FW_NORMAL
      Else
         w := Found1
   }
   Else
      w := FW_BOLD
   if w not Between 1 and 1000
   {
      MsgBox, Неверно задан параметр w.`nДолжен быть в пределах от 1 до 1000
      Return
   }

   italic    := InStr(Options, &quot;italic&quot;) &gt; 0
   underline := InStr(Options, &quot;underline&quot;) &gt; 0
   strike    := InStr(Options, &quot;strike&quot;) &gt; 0

   hDC := DllCall(&quot;GetDC&quot;, UInt, 0, Ptr)

   nHeight := -DllCall(&quot;MulDiv&quot;, Int, s
                  , Int, DllCall(&quot;GetDeviceCaps&quot;, Ptr, hDC, Int, LOGPIXELSY), Int, 72)
   hFont := DllCall(&quot;CreateFont&quot; . coding
                                , Int, nHeight, Int, 0
                                , Int, 0, Int, 0, Int, w
                                , UInt, italic, UInt, underline, UInt, strike
                                , UInt, DEFAULT_CHARSET, UInt, OUT_DEFAULT_PRECIS
                                , UInt, CLIP_DEFAULT_PRECIS, UInt, DEFAULT_QUALITY
                                , UInt, 0, Str, FontName, Ptr)

   hPrevObj := DllCall(&quot;SelectObject&quot;, Ptr, hDC, Ptr, hFont, Ptr)

   VarSetCapacity(Buf, 40)
   DllCall(&quot;GetTextFace&quot; . coding, Ptr, hDC, Int, 40, Str, Buf)
   if (Buf != FontName)
   {
      FreeMemory(hPrevObj, hDC, hFont)
      MsgBox, Указанный шрифт не поддерживается системой!
      Return
   }

   VarSetCapacity(RC, 16, 0)
   height := DllCall(&quot;DrawText&quot;, Ptr, HDC, Str, String, Int, StrLen(String), Ptr, &amp;RC, UInt, DT_CALCRECT := 0x400)
   width := NumGet(RC, 8, &quot;Int&quot;) - NumGet(RC, &quot;Int&quot;)
   FreeMemory(hPrevObj, hDC, hFont)
   Return {w: width, h: height}
}

FreeMemory(hPrevObj, hDC, hFont)
{
   DllCall(&quot;SelectObject&quot;, Ptr, hDC, Ptr, hPrevObj)
   DllCall(&quot;ReleaseDC&quot;, UInt, 0, Ptr, hDC)
   DllCall(&quot;DeleteObject&quot;, Ptr, hFont)
}</code></pre></div><p>Первый вариант в окне просто для сравнения.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 07 Mar 2019 14:27:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132856#p132856</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132855#p132855</link>
			<description><![CDATA[<p>Методом подбора (текст в DX9 оказался ни чуть не italic) и линеечкой определил что самое близкое значение для размера 10 в DX9 является bold s17 в GUI, дальше что делать? Скрин: <a href="http://prntscr.com/mulr46">http://prntscr.com/mulr46</a>. Размер картинки через битмап определяется отлично, только вопрос такой, чего не надо делать с картинкой чтобы битмап этот потерялся у неё и все сломалось?</p>]]></description>
			<author><![CDATA[null@example.com (belyankin12)]]></author>
			<pubDate>Thu, 07 Mar 2019 13:39:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132855#p132855</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132854#p132854</link>
			<description><![CDATA[<p>Чтобы проверить, что за размеры у шрифта, просто добавьте текст в с этими данными в GUI и посмотрите, будет ли размер в окне соответствовать видимому на экране. Размер картинки, два варианта:<br /></p><div class="codebox"><pre><code>filePath := &quot;D:\pic.png&quot;
if oSize := _GetImageSize(filePath)
   MsgBox, % oSize.W . &quot;`n&quot; oSize.H

if oSize := GetImageSize(filePath)
   MsgBox, % oSize.W . &quot;`n&quot; oSize.H

_GetImageSize(imageFilePath)  {
   Gui, New
   Gui, Add, Pic, hwndhPic, % imageFilePath
   DetectHiddenWindows, On
   WinGetPos,,, PicW, PicH, ahk_id %hPic%
   Gui, Destroy
   Return { W: PicW, H: PicH }
}

GetImageSize(imageFilePath)  {
   if !hBitmap := LoadPicture(imageFilePath, &quot;GDI+&quot;)  {
      MsgBox, Не удалось получить hBitmap
      Return
   }
   VarSetCapacity(BITMAP, size := 4*4 + A_PtrSize*2, 0)
   DllCall(&quot;GetObject&quot;, Ptr, hBitmap, Int, size, Ptr, &amp;BITMAP)
   DllCall(&quot;DeleteObject&quot;, Ptr, hBitmap)
   Return { W: NumGet(BITMAP, 4, &quot;UInt&quot;), H: NumGet(BITMAP, 8, &quot;UInt&quot;) }
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 07 Mar 2019 12:25:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132854#p132854</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132852#p132852</link>
			<description><![CDATA[<p><strong>teadrinker</strong>, изображение представляет собой файл на жестком диске в формате PNG (эти картинки буду создавать в фотошопе, потому не будет такого, что файл это jpg переименованный в png проводником) и если я правильно понял про масштабирование (что это программный параметр, который в моем случае будет задаваться скриптом, что помещает изображение) - то соотношение 1:1. Шрифт Times New Roman bold italic, размер 10 или 8 (только два варианта буду использовать). Но вот я не уверен что это размер в пунктах, есть какая идея как определить (функция помещающая текст зашита в dll файле, там посмотреть не смогу)? Переноса не будет, все в одну строку, толщина всегда одинаковая (какая неизвестно <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />, но в параметрах она нигде не упоминается - полагаю стандартная величина).</p><p>P.S. Понял насчет ЛС.</p>]]></description>
			<author><![CDATA[null@example.com (belyankin12)]]></author>
			<pubDate>Thu, 07 Mar 2019 12:10:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132852#p132852</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132850#p132850</link>
			<description><![CDATA[<p>Не уверен, что писать личные сообщения по поводу помощи в AHK хорошая идея, лучше просто на форуме вопрос задайте.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 07 Mar 2019 12:09:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132850#p132850</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132848#p132848</link>
			<description><![CDATA[<p>Почему-то мне казалось, что хотя бы на первый вопрос я смогу найти ответ здесь, второй понятно, что без опыта в этом деле будет довольно трудно на него ответить. Загляну туда как-нибудь.</p><p>P.S. У этого пользователя закрытый ЛС что-ли, или нужно новым пользователям &quot;разблокировать&quot; функцию ЛС?</p>]]></description>
			<author><![CDATA[null@example.com (belyankin12)]]></author>
			<pubDate>Thu, 07 Mar 2019 12:02:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132848#p132848</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132847#p132847</link>
			<description><![CDATA[<div class="quotebox"><cite>belyankin12 пишет:</cite><blockquote><p>Как определить разрешение изображения?</p></blockquote></div><p>Разрешение бывает у экрана, у изображения размеры.</p><div class="quotebox"><cite>belyankin12 пишет:</cite><blockquote><p>И если например разрешение изображения 800х600 оно и на экране должно занимать 800 по X и 600 по Y единиц места верно?</p></blockquote></div><p>Нет, у экрана ещё есть масштабироание, если 1:1, тогда размер будет соответствовать.<br />Ничего не знаю про Dx9, но если исходное изображение находится в файле либо у нас есть его hBitmap, тогда определить размер не составит проблем.</p><p>Чтобы определить размер текста, нужны исходные данные — шрифт, его размер, его вид (normal, bold, italic), его толщина и как будут переноситься слова, если всё это известно, тогда тоже не проблема.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 07 Mar 2019 11:57:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132847#p132847</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132842#p132842</link>
			<description><![CDATA[<p>Спросите у <strong>evilC</strong> на оффоруме.<br />Наверняка он в теме.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 07 Mar 2019 09:30:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132842#p132842</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132839#p132839</link>
			<description><![CDATA[<p>Здравствуйте, недавно начал работать над решением вопроса перемещения элементов, создаваемых Dx9 overlay API поверх полноэкранных приложений с помощью курсора мыши. В целом решение найти удалось, концепция работает отлично, однако скрипту известны только начальные координаты элементов и соответственно я могу отталкиваться только от них, в создании области, нажатие в которой будет считаться за выбор элемента (общая концепция у меня работает через сравнение координат курсора в момент удержания и координат элементов - для ясности) и потому, если выбрать элемент в середине скрипт не сможет определить нажатие, т.к. размеры, например, текстовых элементов могут быть разные и создание одинаковой области вокруг каждого элемента будет нерентабельно. Потому возникла необходимость определять конечную координату элементов. Я использую только два типа элементов: текст и картинки, для начала нужно с ними разобраться. Собственно два вопроса:<br />1) Как определить разрешение изображения? И если например разрешение изображения 800х600 оно и на экране должно занимать 800 по X и 600 по Y единиц места верно? Желательно варианты без сторонних библиотех (не критично) и GUI (чтобы непосредственно перед помещением изображения на экран определять все необходимое).<br />2) На этот вопрос не обязательно отвечать. Размер текста я определил таким образом: создавал 11 одинаковых элементов (большие и маленькие буквы, спец. символы по отдельности, знаки препинания по отдельности) и на глаз наводил курсор на конец 10-го из них (11 там находился для наглядной поправки на кернинг), таким образом я выцепил примерную ширину в пикселях всех текстовых элементов. Есть ли более надежный метод определения размера? Я планирую постоянно использовать шрифт Times New Roman и размер 10 или 8 у элемента (однако я не уверен, что размер этот в пунктах).</p><p>Рассчитываю на вашу помощь.</p>]]></description>
			<author><![CDATA[null@example.com (belyankin12)]]></author>
			<pubDate>Thu, 07 Mar 2019 08:34:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132839#p132839</guid>
		</item>
	</channel>
</rss>
