Что нового

Изменять размеры окна

winkot

Новичок
Сообщения
169
Репутация
0
Имеется окно в котором размещен Label. (Аналог MsgBox) Как сделать, что бы размер Label и окна изменялся в зависимости от размера текста? Т.е. если текст не умещается, размеры и окна и Label увеличились.
 

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
Как сделать, что бы размер Label и окна изменялся в зависимости от размера текста?
Тут может быть несколько подходов - найти нужную функцию для получения размеров фразы относительно шрифта... Есть _GDIPlus_GraphicsMeasureString - в поисковике по нашему сайту и по англ. пройтись и выбрать
В архиве несколько связанных с этой темой, по моему брал отсюда
Помню, что во всех этих методах всё равно размер определялся "криво" из-за спец. символов, символов Unicoda, Большие/маленькие буквы... и.т.д
---
Можно получать размер и попроще:
Код:
#include <Array.au3>

$aR=_Label_StringSize('Привет день',10,700,'Arial')
_ArrayDisplay($aR,'Массив $aR')
$aR=_Label_StringSize('Привет день!'&@CRLF&'Скоро обед!',10,700,'Arial')
_ArrayDisplay($aR,'Массив $aR')

; Получает размер Label для текста с заданным шрифтом
; $sLine - строка
; $iSize - Размер шрифта
; $iWeight - Толщина шрифта
; $sFontName - Имя шрифта
Func _Label_StringSize($sLine,$iSize,$iWeight,$sFontName)
  Local $hWnd=GUICreate(0)
  GUISetFont($iSize,$iWeight,0,$sFontName)
  Local $aRet=WinGetPos(GUICtrlGetHandle(GUICtrlCreateLabel($sLine,0,0)))
  GUIDelete()
  Return $aRet
EndFunc

А далее когда размеры известны, относительно этой информации создаётся окно...
 
Последнее редактирование:
Автор
W

winkot

Новичок
Сообщения
169
Репутация
0
А далее когда размеры известны, относительно этой информации создаётся окно...
Размеры окна зависят не только от длины строки, но и от количества строк. Их надо определять как-то по другому?
Сообщение автоматически объединено:

Странно, что большинство вопросов поднимались в 2008-2014гг. Почему так получается - или уже все выяснили или AutiIt`ом сейчас мало кто занимается?...
 

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
Их надо определять как-то по другому
Количество строк и без этого можно определить - в тексте ведь есть какой-то перенос строки...
В моём примере ширина $aR[2] - высота $aR[3]
$aR=_Label_StringSize('Привет день!'&@CRLF&'Скоро обед!'&@CRLF&'Далее ужин!',10,700,'Arial')
 
Автор
W

winkot

Новичок
Сообщения
169
Репутация
0
в тексте ведь есть какой-то перенос строки
Оригинальный MsgBox сам делает перенос на новую строку, если строка слишком длинная. Всем он хорош, но вот нельзя выбрать размер шрифта. Слишком он там мелкий. Из-за этого и приходится мудрить...
 
Последнее редактирование:

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
Оригинальный MsgBox сам делает перенос на новую строку
В нём ограничение по количество символов в строке. Если она превышает, то он переносит - на этом сайте где-то были функции по форматированию текста по заданному количеству символов, они определяют пробелы, знаки препинания и раскладывают текст вертикально... Найдите их или создайте собственную и в этих местах вставьте перенос, а вот простой Resize с заданным шрифтом

Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$sText='Привет'
_Examle_Resize($sText)
$sText='Привет мир! Привет мир! Привет мир! '
_Examle_Resize($sText)
$sText='Привет мир!'&@CRLF&'Привет мир! Привет мир! '&@CRLF&'Привет мир! Привет мир! Привет мир! '&@CRLF&@CRLF&'zzzzzzzz'
_Examle_Resize($sText)


Func _Examle_Resize($sText)
  $hGUI=GUICreate('Label', 200, 300)
  GUISetFont(15,700,0,'Arial')
  $iLabel=GUICtrlCreateLabel($sText, 10, 10, Default, Default, $SS_LEFT)
  $aR=WinGetPos(GUICtrlGetHandle($iLabel))
  WinMove($hGUI,'',$aR[0],$aR[1],$aR[2]+20,$aR[3]+40)
  GUISetState(@SW_SHOW)
  Do
  Until GUIGetMsg() = $GUI_EVENT_CLOSE
  GUIDelete()
EndFunc

Сообщение автоматически объединено:

Нашёл регулярное выражение - где-то подсмотрел - в примере вставьте:
Код:
$sText='У лукоморья дуб зелёный, златая цепь на дубе том, и днём и ночью кот учёный всё ходит по цепи кругом. Однажды в студёную зимнюю пору я из лесу вышел, был сильный мороз )))'
$sText=StringRegExpReplace($sText,'(.{35,}?[ ])(.*?)','$0'&@CRLF)
_Examle_Resize($sText)

Автоперенос строк - размер 35 символов
 
Последнее редактирование:
Верх