Что нового

Обсуждение AutoIt бета-версий

InnI

AutoIT Гуру
Свежая v3.3.13.21 Beta.
Сообщают о решении проблем с кодировками файлов и возвратом бинарных данных:
Fixed #2901: Memory error when specifying a UTF file mode that includes a BOM when no BOM is present.
https://www.autoitscript.com/forum/topic/173761-autoit-v331321-beta/
 

joiner

Модератор
Локальный модератор
еще бы и это решили http://autoit-script.ru/index.php?topic=359.msg117136#msg117136
 

inververs

AutoIT Гуру
О, так и релиз 3.3.14 вышел


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

Добавили такой пример добавления в форму изображений PNG:
См 4 пример к GUICtrlCreatePic
Код:
; #INTERNAL_USE_ONLY#=================================================================================================
; Name...........: _GUICtrlPic_Create
; Description ...: Creates a Picture control for the GUI
; Syntax ........: _GUICtrlPic_Create($sFilename, $iLeft, $iTop, $iWidth, $iHeight, $iStyle = -1 , $iExStyle = -1)
; Parameters ....: $sFilename - Path of image file
; Author ........: UEZ
; Modified.......: Melba23, guinness, jpm
; Remarks .......: PNG image can be used.
; ====================================================================================================================
Func _GUICtrlPic_Create($sFilename, $iLeft, $iTop, $iWidth = -1, $iHeight = -1, $iStyle = -1, $iExStyle = -1)
    _GDIPlus_Startup()
    Local $idPic = GUICtrlCreatePic("", $iLeft, $iTop, $iWidth, $iHeight, $iStyle, $iExStyle)
    Local $hBitmap = _GDIPlus_BitmapCreateFromFile($sFilename)
    If $iWidth = -1 Then $iWidth = _GDIPlus_ImageGetWidth($hBitmap)
    If $iHeight = -1 Then $iHeight = _GDIPlus_ImageGetHeight($hBitmap)
    Local $hBitmap_Resized = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
    Local $hBMP_Ctxt = _GDIPlus_ImageGetGraphicsContext($hBitmap_Resized)
    _GDIPlus_GraphicsSetInterpolationMode($hBMP_Ctxt, $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC)
    _GDIPlus_GraphicsDrawImageRect($hBMP_Ctxt, $hBitmap, 0, 0, $iWidth, $iHeight)
    Local $hHBitmap = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap_Resized)
    Local $hPrevImage = GUICtrlSendMsg($idPic, $STM_SETIMAGE, 0, $hHBitmap) ; $STM_SETIMAGE = 0x0172
    _WinAPI_DeleteObject($hPrevImage); Delete Prev image if any
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_BitmapDispose($hBitmap_Resized)
    _GDIPlus_GraphicsDispose($hBMP_Ctxt)
    _WinAPI_DeleteObject($hHBitmap)
    _GDIPlus_Shutdown()

    Return $idPic
EndFunc   ;==>_GUICtrlPic_Create
 

InnI

AutoIT Гуру
joiner
пару кракозябр написало в файл
Теперь по умолчанию режим открытия файла "UTF8 (without BOM)". Чтобы записать в ANSI теперь нужно принудительно открывать файл в режиме $FO_ANSI (512).
 

madmasles

Модератор
Глобальный модератор
Похоже, в v3.3.14.0 убрали все Map* - функции. Почему? :scratch:
 

inververs

AutoIT Гуру
Note
The Map functionality was disabled in this release as it was not ready. I will release another beta version later with it re-enabled for continued dev and test.
Не осилили.
 

joiner

Модератор
Локальный модератор
InnI [?]
Чтобы записать в ANSI теперь нужно принудительно открывать файл в режиме $FO_ANSI (512)
работает. теперь нужно заиметь привычку указывать режим открытия :smile:
 

Yashied

Модератор
Команда форума
Глобальный модератор
joiner сказал(а):
работает. теперь нужно заиметь привычку указывать режим открытия
Засада будет в совместимости с предыдущими скриптами. IMHO, ужасное изменение.
 

InnI

AutoIT Гуру
Yashied
IMHO, ужасное изменение
Согласен полностью. Уже начинает надоедать создавать файлы в три строки вместо одной и везде добавлять +512.
Но, на мой взгляд, главная "засада" будет здесь:
Files containing only characters 1-127 are opened in UTF-8 with no BOM ($FO_UTF8_NOBOM) mode by default. Previously they would be opened in ANSI mode. Use the $FO_ANSI flag to override.
Получается, что после добавления в файл с английским текстом русских символов, новый файл будет сохранён в UTF8 БЕЗ(!) BOM. А если символов будет мало, то ни один редактор правильно кодировку не определит! И всё это только ради какой-то "совместимости" с современными редакторами (to be more in line with modern editors), хотя сам AutoIt поставляется со SciTE, которая с UTF8 до сих пор работает некорректно. И это я ещё про Wrapper промолчу.

Но, как говорится, выбирать не приходится. Будем привыкать.


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

Вот если бы добавили настройку в функции AutoItSetOption() для установки кодировки файла по умолчанию... было бы проще скрипты править.
 

Skif_off

Знающий
Наткнулся на замечание Yashied, поясните, пожалуйста, о чём речь?

И такой вопрос возник: где можно почитать о планах развития? Интересует, насколько может подрасти бинарник.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Skif_off сказал(а):
Наткнулся на замечание Yashied, поясните, пожалуйста, о чём речь?
Грубо говоря, теперь нельзя послать сообщение элементу с установленным $GUI_DISABLE. Это легко проверить на Dummy, т.е. GUICtrlSendToDummy() не будет работать. В Skin UDF я посылал сообщение WM_COMMAND в "Static" элемент с установленным $GUI_DISABLE:

Код:
_SendMessage($skData[$Index][4], $WM_COMMAND, $skData[$Index][6], $skData[$Index][5])


И в 3.3.14.x GUIGetMsg() перестала срабатывать на это сообщение. Работает только, если установить $GUI_ENABLE, что приводит к дополнительной и далеко нетривиальной правке UDF.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Одно лечат, другое калечат.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Removed au3record.exe as it's often mistakenly flagged as malware causing the entire AutoIt zip/installer to be flagged.
После этого я даже и не знаю что думать о разработчиках.
 

Andrey_A

Новичок
Обнаружил такой баг, не помню был ли он в предыдущих версиях.
В ListView при создании пункта ListViewItem со стилем $LVS_EX_INFOTIP подсказка появляется за окном, если окно имеет атрибут "Поверх всех окон"

Код:
#include <ListViewConstants.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

Global $hGUI, $idButton, $OnTop=1
$hGUI = GUICreate("ListView", 240, 260, 100, 200)
$idListView = GUICtrlCreateListView("Колонка", 10, 10, 220, 150, -1, $LVS_EX_INFOTIP)
GUICtrlCreateListViewItem("Длинный текст пункта, подсказка которого появляется сзади окна, если оно 'Поверх всех окон'", $idListView)
$idButton = GUICtrlCreateButton("", 45, 170, 150, 40,$BS_ICON)
_OnTop()
GUISetState()

While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      Exit
    Case $idButton
      $OnTop = $OnTop ? 0 : 1
      _OnTop()
  EndSwitch
WEnd

Func _OnTop()
  GUICtrlSetImage($idButton, "shell32.dll", -248+$OnTop)
  WinSetOnTop($hGUI, '', $OnTop)
EndFunc
 
Верх