Войти

Показать полную графическую версию : AutoIt - Добавление иконки 24x24 на кнопку формы


ypmail
04-05-2016, 10:16
Есть скрипт, в котором иконка просто берётся из файла navigation.ico. Нужно сделать так, чтобы эта иконка была зашита в полученный из этого скрипта exe.
Пробовал GUICtrlSetImage(-1, "1.exe", -2). Иконка появляется на кнопке 16x16 или 32x32, или мелкая или крупная и кубиками (у меня она 24x24). Как это обойти?
Нужно, чтобы GUICtrlSetImage выводило иконку именно 24x24.

Код скрипта:
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=1\2.ico
#AutoIt3Wrapper_Res_Icon_Add=D:\3\2\navigation.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#Include <WinAPIEx.au3>
#Include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <Word.au3>

Global $hParent, $hForm, $hIcon

$hParent = GUICreate('', 116, 0, 0, 0, 0, $WS_EX_TOOLWINDOW)
$hForm = GUICreate('Выбор шаблона таблички', 240, 378, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_DLGMODALFRAME, $hParent)

$hIcon = _WinAPI_GetClassLongEx($hForm, $GCL_HICON)
_WinAPI_DestroyIcon($hIcon)
_WinAPI_SetClassLongEx($hForm, $GCL_HICON, 0)
_WinAPI_SetClassLongEx($hForm, $GCL_HICONSM, 0)


$Button1 = GUICtrlCreateButton(" Документ", 10, 10, 220, 35)
GUICtrlSetFont(-1, 12, 800, 2, "Times New Roman")
GUICtrlSetImage(-1, "D:\3\2\navigation.ico")


While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Local $oWord = _Word_Create()
Local $sDocument = "D:\3\2\1.doc"
_Word_DocOpen($oWord, $sDocument)
WinActivate($sDocument)
Exit

EndSwitch
WEnd

Creat0R
05-05-2016, 03:05
Если по проще, то так:

FileInstall('D:\3\2\navigation.ico', @TempDir & '\navigation.ico')
GUICtrlSetImage($Button1, @TempDir & '\navigation.ico', 0)

ypmail
05-05-2016, 14:05
Спасибо!

1) Но в случае с FileInstall, судя по справке, картинка извлекается из exe и потом остаётся в папке.
Если же просто использовать GUICtrlSetImage(-1, "1.exe", -2), то нет лишних действий по извлечениям и не остается мусора после работы exe.
Пока решил использовать иконки 16x16 и GUICtrlSetImage(-1, "1.exe", -2). Надеюсь, что когда-нибудь разработчики добавят возможность вывода формата 24x24 в GUICtrlSetImage.

2) Ещё нигде не смог найти как перейти в корневую папку? Т.е. скрипт находится в папке 2, которая находится в папке 1 (...1\2\script.au3).
С помощью @ScriptDir я попаду в папку 2, а как задать путь к папке 1?
Т.е. (@ScriptDir & ?как прописывается в AutoIt на папку вверх?) чтобы попасть в папку 1.

Iska
05-05-2016, 16:20
С помощью @ScriptDir я попаду в папку 2, а как задать путь к папке 1? »
Как обычно — относительным путём, указанием ссылки на родительский каталог «..» от @ScriptDir.

ypmail
06-05-2016, 10:12
Как обычно — относительным путём, указанием ссылки на родительский каталог «..» от @ScriptDir. »

Т.е. путь будет выглядеть так?:
@ScriptDir & '..\..'
Что-то не работает

Iska
06-05-2016, 12:52
Т.е. путь будет выглядеть так?:
@ScriptDir & '..\..' »
Так:
@ScriptDir & '\..'

Creat0R
07-05-2016, 22:05
картинка извлекается из exe и потом остаётся в папке »
Что мешает её удалить по завершении работы скрипта?

ypmail
17-05-2016, 14:23
Что мешает её удалить по завершении работы скрипта? »

Распаковать, показать, удалить. Зачем машине лишние действия? Я использовал другую иконку 16х16 и использовал GUICtrlSetImage, зашил её в exe, ничего не извлекается и не удаляется. Разработчикам Autoit не мешало бы расширить функционал GUICtrlSetImage.




© OSzone.net 2001-2012