<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Определение размеров элементов Dx9 overlay]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14636&amp;type=atom" />
	<updated>2019-03-10T11:55:01Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=14636</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132877#p132877" />
			<content type="html"><![CDATA[<p>Отлично, я ещё не успел затестить на других разрешениях, потому вы меня успокоили.</p>]]></content>
			<author>
				<name><![CDATA[belyankin12]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34408</uri>
			</author>
			<updated>2019-03-10T11:55:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132877#p132877</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132876#p132876" />
			<content type="html"><![CDATA[<p>Чем выше разрешение, тем меньше ширина текста. Если бы размер шрифта был&nbsp; подобран правильно, точнее было бы с DllCall.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2019-03-10T11:41:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132876#p132876</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132875#p132875" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[belyankin12]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34408</uri>
			</author>
			<updated>2019-03-10T11:07:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132875#p132875</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132860#p132860" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong>, спасибо за помощь, завтра испытаю на деле.</p>]]></content>
			<author>
				<name><![CDATA[belyankin12]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34408</uri>
			</author>
			<updated>2019-03-07T17:23:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132860#p132860</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132856#p132856" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2019-03-07T14:27:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132856#p132856</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132855#p132855" />
			<content type="html"><![CDATA[<p>Методом подбора (текст в DX9 оказался ни чуть не italic) и линеечкой определил что самое близкое значение для размера 10 в DX9 является bold s17 в GUI, дальше что делать? Скрин: <a href="http://prntscr.com/mulr46">http://prntscr.com/mulr46</a>. Размер картинки через битмап определяется отлично, только вопрос такой, чего не надо делать с картинкой чтобы битмап этот потерялся у неё и все сломалось?</p>]]></content>
			<author>
				<name><![CDATA[belyankin12]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34408</uri>
			</author>
			<updated>2019-03-07T13:39:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132855#p132855</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132854#p132854" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2019-03-07T12:25:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132854#p132854</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132852#p132852" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[belyankin12]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34408</uri>
			</author>
			<updated>2019-03-07T12:10:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132852#p132852</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132850#p132850" />
			<content type="html"><![CDATA[<p>Не уверен, что писать личные сообщения по поводу помощи в AHK хорошая идея, лучше просто на форуме вопрос задайте.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2019-03-07T12:09:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132850#p132850</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132848#p132848" />
			<content type="html"><![CDATA[<p>Почему-то мне казалось, что хотя бы на первый вопрос я смогу найти ответ здесь, второй понятно, что без опыта в этом деле будет довольно трудно на него ответить. Загляну туда как-нибудь.</p><p>P.S. У этого пользователя закрытый ЛС что-ли, или нужно новым пользователям &quot;разблокировать&quot; функцию ЛС?</p>]]></content>
			<author>
				<name><![CDATA[belyankin12]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34408</uri>
			</author>
			<updated>2019-03-07T12:02:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132848#p132848</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132847#p132847" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2019-03-07T11:57:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132847#p132847</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132842#p132842" />
			<content type="html"><![CDATA[<p>Спросите у <strong>evilC</strong> на оффоруме.<br />Наверняка он в теме.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-03-07T09:30:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132842#p132842</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Определение размеров элементов Dx9 overlay]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132839#p132839" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[belyankin12]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34408</uri>
			</author>
			<updated>2019-03-07T08:34:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132839#p132839</id>
		</entry>
</feed>
