Что нового

Составление списка из каталога

eil

Новичок
Сообщения
53
Репутация
0
Версия AutoIt: 3.3.14

Описание: . итак программа для составления сметы из каталога. сам каталог(и) создаётся программой в формета ini по шаблону [Предмет] Параметр1= Параметр2= и т.д. до 12.
интерфейс состоит из обычного Заголовка окна, некоторого набора Кнопок, 2х Панелей для вывода каталога и составления списка, а так же Статус бура. пример рисоунок 111.
Заголовок показывает путь к отрытому файлу.
Левая панель показывает список Предметов считанный из открытого каталога.
Правая панел будет напонятся из левой.
Кнопки:
Открыть файл;
Сохранить файл; (любые изминения с каталогом не записывают в файл пока не сохранены этой кнопкой)
Добавить Предмет(в конец списка);
Редактировать Предмет(текущий выделенный в левой панели. можно изменить Имя и значения Параметров);
Удалить Предмет(текущий выделенный в левой панели);
Добавить в список(выделенный в левой в правую панель);
Удалить из списка(выделенный в правой панели);
Отчёт(список в txt)

когда элемент выбирается в левой панели его можно Удалить, Редактировать или Добавить в список. Редактирование позволяет менять имя выбранного Предмета и значения Праметров в отдельном окне. пример рисоунок 222. так же можно добавить новый Предмет, использует окно редактирования как на рисунке 222.

правая панель как накопительный список. элементы из левой панели могут добавляться по несколько раз. в результате будет состалвен Отчёт - список с количеством добавленных в правую панель Предметов и суммы параметров(далее что это).
каждый предмет имеет параметры, когда Предмет добавляется в Правую панель его параметры добавляются в Общие.

пример. из Левой в Правую мы добавляем Стул 3 раза и Шкаф. их параметры:
[Стул] Гвозди=16 Доски=2 Ножки=4 Двери=0
[Шкаф] Гвозди= 42 Доски= 14 Ножки=4 Двери=2

так вот в Отчёте после списка
Стул=3
Шкаф=1
дожно быть
ОбщГвозди=90 //это берётся из 16*3(стулья) + 42(шкаф) так же считаются суммы для всех
ОбщДоски=20
ОбщНожки=16
ОбщДвери=2

ОбщПараметр1= [Стул]Параметр1 *3 + [Шкаф]Параметр1 *1
кроме того в Статус баре эти суммы показываюются сразу после добавления новых элементов в Правую панель.

Примечания:
!. элементы в правую панель могут добавляются нескольо раз.
!. все изминения с каталогом в левой ранели происходят в памяти, запись в файл только после Сохранить файл.
когда элементов в панелях много должно появляться прокрутки.
была бы весьма полезна возможность масштабировать размеры окон мышкой при работе.
 

Вложения

  • 111.png
    111.png
    7.4 КБ · Просмотры: 29
  • 222.png
    222.png
    4.2 КБ · Просмотры: 24

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Не понятен момент со статус баром -
в Статус баре эти суммы показываюются сразу после добавления новых элементов в Правую панель.
поясните подробнее...это не похоже на статус бар. ini файл справочника существует в данный момент ? если да, то дайте пример с несколькими предметами - будет легче .
И ещё один вопрос - версия Autoit 3.3.14 , критична ? Устроит, если написать скрипт на 3.3.12 ?
Чем отличаются кнопки "Добавить Предмет(в конец списка)" и "Добавить в список(выделенный в левой в правую панель)" ?
 
Автор
E

eil

Новичок
Сообщения
53
Репутация
0
к сожалению файла с базой пока нет, раньше всё это считалось вручную, только сейчас пришла идея о утилитке. но примеры приведу.

новая база создаётся по шаблону из файла который лежит рядом с .ехе(в той же папке). это позволит мне потом просто в этом файле прописать нужные названия параметров и задать их количество. для примера давайте считать что Параметров 6, тогда шаблон-файл выглядит так
[Предмет]
Гвозди=
Доски=
Ножки=
Фанера=
ДСП=
Уголки=
Ручки=
при использовании кнопки Новый файл пользователь указывает имя новой базы и место сохранения. должен создаться ini с пустым таким же шаблоном. далее пользователь будет заполнять его формируя базу.

кнопка Добавить Предмет по сути добавляет еще один такой пустой блок в конец списка Предметов для заполнения. (рис: добавление элемента в базу)

пример базы может выглядеть так
[Стул]
Гвозди=12
Доски=2
Ножки=4
Фанера=
ДСП=
Уголки=4
Ручки=

[Стол]
Гвозди=8
Доски=
Ножки=4
Фанера=
ДСП=1
Уголки=4
Ручки=

[Тумбочка]
Гвозди=14
Доски=6
Ножки=4
Фанера=5
ДСП=
Уголки=8
Ручки=2

[Шкаф]
Гвозди=20
Доски=2
Ножки=
Фанера=
ДСП=6
Уголки=12
Ручки=2
как видно параметры у всех предметов одинаковые, просто заполнятьс ябудут по разному(те что нужны). количество параметров определяется тем сколько их в изначальном файле-шаблоне по которому создана база.

кнопка "Добавть Предмет"(Add object) открывает форму добавления нового элемента в базу и после заполнения показывает его в конце(левая панель), а кнопка "Добавить в список"(Add to list) вносит выделенный в левой панели элемент в список правой панели. создавая скетчи решил что для названий кнопок лучше использовать английский в силу краткости слов.

на основе примера рис; "обзор интерфейса в работе" получается что отчёт по кнопке Report должен выглдеть примерно так
Стол = 1
Шкаф 2 двери = 1
Комод = 1
Табуретка = 4
Стул = 2

Сумма Гвозди = 54
Сумма Доски = 12
Сумма Ножки = 24
Сумма Фанера = 7
Сумма ДСП = 10
Сумма Уголки = 34
Сумма Ручки =6
так Сумма Гвозди = (Стол)Гвозди + (Шкаф)Гвозди + (Комод)Гвозди + (Табурет)Гвозди*4 + (Стул)Гвозди*2

от статус бара решил отказаться. версия AutoIt не важна, просто указал какая установлена.
 

Вложения

  • вид программы при открытии.png
    вид программы при открытии.png
    6.6 КБ · Просмотры: 18
  • окно добаления нового Предмета.png
    окно добаления нового Предмета.png
    28.4 КБ · Просмотры: 23
  • добавление элемента в базу.png
    добавление элемента в базу.png
    27.7 КБ · Просмотры: 23
  • обзор интерфейса в работе.png
    обзор интерфейса в работе.png
    69.2 КБ · Просмотры: 26

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Вот, то что наваял :smile: нужно проверять, т.к писал в несколько заходов, возможно что-то не доглядел... Комментарии не писал, думаю всё понятно будет, если что-то нужно исправить или добавить - пишите.
Код:
#include <GUIConstants.au3>
#include <ListboxConstants.au3>
#include <GuiListBox.au3>
#include <GuiListView.au3>
#include <File.au3>
#include <Encoding.au3>

Global $ListView, $ContextMenu, $ListView_GUI, $EditObject_GUI, $EditParam = 0, $Name, $NameParam, $path, $Param, $line, $ListOll, $ListNew


If FileExists(@ScriptDir & '/Temp') Then FileDelete(@ScriptDir & '/Temp')
If FileExists(@ScriptDir & '/Temp') Then DirRemove(@ScriptDir & '/Temp', 1)

$Main = GUICreate("", 850, 500, -1, -1, $WS_OVERLAPPEDWINDOW)


$Group1 = GUICtrlCreateGroup('Файл', 5, 2, 240, 90)
GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")
GUICtrlSetResizing(-1, $GUI_DOCKALL)
$OpenBut = GUICtrlCreateButton('Открыть', 15, 20, 70, 60, $BS_MULTILINE)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
$SaveBut = GUICtrlCreateButton('Сохранить', 90, 20, 70, 60, $BS_MULTILINE)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
$NewBaseBut = GUICtrlCreateButton('Новый файл', 165, 20, 70, 60, $BS_MULTILINE)
GUICtrlSetResizing(-1, $GUI_DOCKALL)

$Group2 = GUICtrlCreateGroup('Предмет', 265, 2, 240, 90)
GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")
GUICtrlSetResizing(-1, $GUI_DOCKALL)
$AddBut = GUICtrlCreateButton('Добавить', 275, 20, 70, 60, $BS_MULTILINE)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
$EditBut = GUICtrlCreateButton('Редактиро-' & @CR & 'вать', 350, 20, 70, 60, $BS_MULTILINE)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
$DelBut = GUICtrlCreateButton('Удалить', 425, 20, 70, 60, $BS_MULTILINE)
GUICtrlSetResizing(-1, $GUI_DOCKALL)

$Group3 = GUICtrlCreateGroup('Список', 525, 2, 240, 90)
GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")
GUICtrlSetResizing(-1, $GUI_DOCKALL)
$AddListBut = GUICtrlCreateButton('Добавить в список', 535, 20, 70, 60, $BS_MULTILINE)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
$RemoveListBut = GUICtrlCreateButton('Удалить из' & @CR & 'списка', 610, 20, 70, 60, $BS_MULTILINE)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
$ReportBut = GUICtrlCreateButton('Отчёт', 685, 20, 70, 60, $BS_MULTILINE)
GUICtrlSetResizing(-1, $GUI_DOCKALL)

$ListOll = GUICtrlCreateList('', 10, 100, 410, 395, BitOR($WS_BORDER, $WS_VSCROLL, $LBS_NOINTEGRALHEIGHT))
GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")
GUICtrlSetResizing(-1, BitOR($GUI_DOCKTOP, $GUI_DOCKBOTTOM))
$ListNew = GUICtrlCreateList('', 430, 100, 410, 395, BitOR($WS_BORDER, $WS_VSCROLL, $LBS_NOINTEGRALHEIGHT))
GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")
GUICtrlSetResizing(-1, BitOR($GUI_DOCKTOP, $GUI_DOCKBOTTOM))

GUISetState(@SW_SHOW, $Main)


While 1
	$msg = GUIGetMsg()
	Select

		Case $msg = $GUI_EVENT_CLOSE
			DirRemove(@ScriptDir & '/Temp', 1)
			Exit

		Case $msg = $NewBaseBut

			NewBase()

		Case $msg = $AddBut

			If Not FileExists(@ScriptDir & '\Temp\Temp.ini') Then
				DirCreate(@ScriptDir & '\Temp')
				FileCopy($path, @ScriptDir & '\Temp', 1)
				FileMove(@ScriptDir & '\Temp\' & StringRegExpReplace($path, '^.*\\', ''), @ScriptDir & '\Temp\temp.ini', 1)
			EndIf

			_GUICtrlListBox_SetCurSel($ListOll, _AddObject($Main))
			ControlFocus($Main, '', $ListOll)

		Case $msg = $OpenBut

			$path = FileOpenDialog('Выбор файла каталога', @ScriptDir, 'ini file (*.ini)')
			If Not @error Then
				WinSetTitle('', '', $path)
				DirRemove(@ScriptDir & '/Temp', 1)
				DirCreate(@ScriptDir & '\Temp')
				FileCopy($path, @ScriptDir & '\Temp', 1)
				StringRegExpReplace($path, '^.*\\', '')
				FileMove(@ScriptDir & '\Temp\' & StringRegExpReplace($path, '^.*\\', ''), @ScriptDir & '\Temp\temp.ini', 1)

				_GUICtrlListBox_ResetContent($ListOll)
				_GUICtrlListBox_ResetContent($ListNew)
				$Catalog = IniReadSectionNames($path)
				If Not @error Then
					For $i = 1 To UBound($Catalog) - 1
						GUICtrlSetData($ListOll, $Catalog[$i])
					Next
					_GUICtrlListBox_SetCurSel($ListOll, 0)
					ControlFocus($Main, '', $ListOll)
				Else
					MsgBox(48, 'Ошибка !', 'Ошибка чтения файла каталога !')
				EndIf
			EndIf

		Case $msg = $AddListBut
			$ReportIni = @ScriptDir & '\Temp\report.ini'
			If Not FileExists($ReportIni) Then _FileCreate($ReportIni)

			$Subject = GUICtrlRead($ListOll)

			If IniRead($ReportIni, 'Предмет', $Subject, '-1') < 0 Then
				IniWrite($ReportIni, 'Предмет', $Subject, 1)
			Else
				IniWrite($ReportIni, 'Предмет', $Subject, IniRead($ReportIni, 'Предмет', $Subject, '') + 1)
			EndIf


			$Parametr = IniReadSection(@ScriptDir & '\Temp\temp.ini', $Subject)
			For $i = 1 To $Parametr[0][0]
				$Znach = IniRead($ReportIni, 'Параметр', $Parametr[$i][0], '0')
				If $Parametr[$i][1] > 0 Then IniWrite($ReportIni, 'Параметр', $Parametr[$i][0], $Znach + $Parametr[$i][1])
			Next

			_GUICtrlListBox_BeginUpdate($ListNew)
			$Item = _GUICtrlListBox_FindString($ListNew, $Subject & '  X' & IniRead($ReportIni, 'Предмет', $Subject, '') - 1, True)

			If $Item >= 0 Then
				_GUICtrlListBox_DeleteString($ListNew, $Item)
				_GUICtrlListBox_InsertString($ListNew, $Subject & '  X' & IniRead($ReportIni, 'Предмет', $Subject, ''), $Item)
				_GUICtrlListBox_EndUpdate($ListNew)
			Else
				_GUICtrlListBox_AddString($ListNew, $Subject & '  X' & IniRead($ReportIni, 'Предмет', $Subject, ''))
			EndIf

			_GUICtrlListBox_EndUpdate($ListNew)

		Case $msg = $RemoveListBut
			$ReportIni = @ScriptDir & '\Temp\report.ini'
			$index = _GUICtrlListBox_GetCurSel($ListNew)
			$SubjectX = StringInStr(GUICtrlRead($ListNew), 'X', 1, -1)
			$Subject = StringLeft(GUICtrlRead($ListNew), $SubjectX - 3)

			If $index >= 0 Then
				$ZnachPredm = IniRead($ReportIni, 'Предмет', $Subject, '') - 1
				If $ZnachPredm == 0 Then
					IniDelete($ReportIni, 'Предмет', $Subject)
				Else
					IniWrite($ReportIni, 'Предмет', $Subject, $ZnachPredm)
				EndIf



				$Parametr = IniReadSection(@ScriptDir & '\Temp\temp.ini', $Subject)
				For $i = 1 To $Parametr[0][0]
					$Znach = IniRead($ReportIni, 'Параметр', $Parametr[$i][0], '0') - $Parametr[$i][1]
					If $Znach == 0 Then
						IniDelete($ReportIni, 'Параметр', $Parametr[$i][0])
					Else
						IniWrite($ReportIni, 'Параметр', $Parametr[$i][0], $Znach)
					EndIf

				Next

				_GUICtrlListBox_BeginUpdate($ListNew)

				_GUICtrlListBox_DeleteString($ListNew, $index)
				If IniRead($ReportIni, 'Предмет', $Subject, '0') > 0 Then
					$string = $Subject & '  X' & IniRead($ReportIni, 'Предмет', $Subject, '')
					_GUICtrlListBox_InsertString($ListNew, $string, $index)
					_GUICtrlListBox_ClickItem($ListNew, $index)
				EndIf


				_GUICtrlListBox_EndUpdate($ListNew)

			EndIf


		Case $msg = $EditBut


			_Edit($Main)

		Case $msg = $DelBut

			If Not FileExists(@ScriptDir & '\Temp.ini') Then
				DirCreate(@ScriptDir & '\Temp')
				FileCopy($path, @ScriptDir & '\Temp', 1)
				StringRegExpReplace($path, '^.*\\', '')
				FileMove(@ScriptDir & '\Temp\' & StringRegExpReplace($path, '^.*\\', ''), @ScriptDir & '\Temp\temp.ini', 1)
			EndIf

			_GUICtrlListBox_BeginUpdate($ListOll)
			$index = GUICtrlSendMsg($ListOll, $LB_GETCURSEL, 0, 0)
			$DelName = GUICtrlRead($ListOll)
			If MsgBox(32 + 1, 'Внимание !', 'Вы действительно хотите удалить ' & $DelName & '?') = 1 Then
				_GUICtrlListBox_DeleteString($ListOll, $index)
				IniDelete(@ScriptDir & '\Temp\temp.ini', $DelName)
			EndIf
			_GUICtrlListBox_EndUpdate($ListOll)

		Case $msg = $SaveBut
			SaveBase()
		Case $msg = $ReportBut
			Report()

	EndSelect



	$Fokus = ControlGetFocus($path)

	Switch $Fokus
		Case 'Button1'
			HotKeySet("{Enter}")
		Case 'Button2'
			HotKeySet("{Enter}")
		Case 'Button3'
			HotKeySet("{Enter}")
		Case 'Button6'
			HotKeySet("{Enter}")
		Case 'Button7'
			HotKeySet("{Enter}")
		Case 'Button8'
			HotKeySet("{Enter}")
		Case 'Button10'
			HotKeySet("{Enter}")
		Case 'Button11'
			HotKeySet("{Enter}")
		Case 'Button12'
			HotKeySet("{Enter}")
		Case 'ListBox1'
			$line = _GUICtrlListBox_GetCurSel($ListOll)
			If $line >= 0 Then HotKeySet("{Enter}", "_Edit_")
		Case 'ListBox2'
			HotKeySet("{Enter}")

	EndSwitch


WEnd


Func _Edit_()
	HotKeySet("{Enter}")
	_Edit($Main)
	GUICtrlSetState($ListOll, $GUI_FOCUS)
EndFunc   ;==>_Edit_

Func SaveBase()

	$NewBaseFile = FileSaveDialog('Выберите название нового файла базы ', @ScriptDir, 'ini файл(*.ini)', 0, 'Новая база')
	If FileExists(@ScriptDir & '\Temp\Temp.ini') Then
		If FileExists($NewBaseFile) Then
			$answer = MsgBox(48 + 3, 'Внимание !', 'Файл базы ' & @CR & $NewBaseFile & @CR & 'уже существует , заменить ?' & @CR & 'Нет - сохранить отчёт под другим именем')
			Select
				Case $answer = 6
					FileCopy(@ScriptDir & '\Temp\Temp.ini', $NewBaseFile, 1)
				Case $answer = 7
					SaveBase()
			EndSelect
		EndIf

	Else

		MsgBox(48, 'Ошибка !', 'Невозможно сохранить файл,' & @CR & 'так как никаких изменнений небыло.')
	EndIf


EndFunc   ;==>SaveBase


Func NewBase()

	$NewFile = FileSaveDialog('Укажите новый файл базы', @ScriptDir, 'ini файл(*.ini)', 0, 'Новая база')
	If Not FileExists($NewFile) Then
		DirRemove(@ScriptDir & '\Temp', 1)
		_FileCreate($NewFile)
		FileCopy($NewFile, @ScriptDir & '\Temp\' & StringRegExpReplace($path, '^.*\\', ''), 0)
		WinSetTitle('', '', $NewFile)
		_GUICtrlListBox_ResetContent($ListOll)
		_GUICtrlListBox_ResetContent($ListNew)

	Else
		MsgBox(48, 'Ошибка !', 'Такой файл уже существует !' & @CR & 'Укажите другое имя файла !')
		NewBase()
	EndIf

EndFunc   ;==>NewBase


Func Report()
	$RepIni = @ScriptDir & '\Temp\report.ini'
	If FileExists($RepIni) Then
		$ReportFile = FileSaveDialog('Выберите файл отчёта', @ScriptDir, 'Текстовый файл(*.txt)', 0, 'Отчёт')

		If FileExists($ReportFile) Then
			$answer = MsgBox(48 + 3, 'Внимание !', 'Файл отчёта ' & @CR & $ReportFile & @CR & 'уже существует , заменить ?' & @CR & 'Нет - сохранить отчёт под другим именем')
			Select
				Case $answer = 6 ;Да
					CreateRepport($ReportFile)
				Case $answer = 7 ;Нет
					Report()

			EndSelect
		Else

			CreateRepport($ReportFile)

		EndIf



	Else
		MsgBox(48, 'Ошибка !', 'Не найден временный файл отчёта !')
	EndIf

EndFunc   ;==>Report


Func CreateRepport($ReportFile)
	$RepIni = @ScriptDir & '\Temp\report.ini'
	$RepSub = IniReadSection($RepIni, 'Предмет')
	If Not @error Then
		Dim $text[UBound($RepSub)][1]
		For $i = 1 To UBound($RepSub) - 1
			$text[$i][0] = $RepSub[$i][0] & ' = ' & $RepSub[$i][1]
		Next

	EndIf

	$RepParam = IniReadSection($RepIni, 'Параметр')
	If Not @error Then
		ReDim $text[UBound($RepParam) + $i][1]
		For $j = 1 To UBound($RepParam) - 1
			$text[$j + $i][0] = 'Сумма ' & $RepParam[$j][0] & ' = ' & $RepParam[$j][1]
		Next

		_FileWriteFromArray($ReportFile, $text)

	EndIf

EndFunc   ;==>CreateRepport


Func _AddObject($hParent = 0)

	$Opt = Opt("GUIOnEventMode", 0)
	$Result = 0
	$ListView_GUI = GUICreate('Добавить новый предмет', 300, 400, -1, -1, -1, -1, $hParent)

	$EditName = GUICtrlCreateInput('Название предмета', 10, 10, 280, 30)
	GUICtrlSetFont(-1, 16, 400, 0, "MS Sans Serif")

	$ListView = GUICtrlCreateListView('Название параметра|Значение параметра', 10, 50, 280, 300, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))


	$OllItems = IniReadSectionNames(@ScriptDir & '\Temp\Temp.ini')
	If Not @error Then
		$Items = IniReadSection(@ScriptDir & '\Temp\Temp.ini', $OllItems[1])
		For $i = 1 To UBound($Items) - 1
			_GUICtrlListView_AddItem($ListView, $Items[$i][0])
			_GUICtrlListView_AddSubItem($ListView, $i - 1, '', 1, 2)
		Next
	EndIf

	$DummyMenu = GUICtrlCreateDummy()
	$ContextMenu = GUICtrlCreateContextMenu($DummyMenu)
	$ItemCreate = GUICtrlCreateMenuItem("Создать параметр", $ContextMenu)
	$ItemDelete = GUICtrlCreateMenuItem("Удалить параметр", $ContextMenu)

	$OkBut = GUICtrlCreateButton('Добавить', 100, 355, 100, 40)

	GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
	GUISetState(@SW_DISABLE, $hParent)
	GUISetState(@SW_SHOW, $ListView_GUI)

	$EditParam = 0

	While 1
		$nMsg = GUIGetMsg()

		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				ExitLoop
			Case $OkBut


				$Name = GUICtrlRead($EditName)


				$Items = _GUICtrlListView_GetItemCount($ListView)
				If $Items > 0 Then
					For $i = 0 To $Items - 1

						IniWrite(@ScriptDir & '\Temp\Temp.ini', $Name, _GUICtrlListView_GetItemText($ListView, $i, 0), _GUICtrlListView_GetItemText($ListView, $i, 1))

					Next
				Else
					MsgBox(48, 'Ошибка !', 'Невозможно добавить предмет без параметров !', 3)
					ExitLoop
				EndIf

				$Result = _GUICtrlListBox_AddString($ListOll, $Name)

				ExitLoop

			Case $ItemCreate
				AddLine($ListView, GUICtrlRead($EditName), $ListView_GUI)

			Case $ItemDelete
				DelLine($ListView)


		EndSwitch
		If $EditParam Then NewObject($ListView, $ListView_GUI)
		$Fokus = ControlGetFocus('Добавить новый предмет')
		;   ConsoleWrite($Fokus&@CR)
		If $Fokus == 'SysListView321' Then
			HotKeySet("{Enter}", "_Add_")
		Else
			HotKeySet("{Enter}")
		EndIf


	WEnd

	HotKeySet("{Enter}")
	Opt("GUIOnEventMode", $Opt)
	GUISetState(@SW_ENABLE, $hParent)
	GUIDelete($ListView_GUI)
	Return $Result
EndFunc   ;==>_AddObject

Func _Add_()
	HotKeySet("{Enter}")
	NewObject($ListView, $ListView_GUI)
EndFunc   ;==>_Add_


Func WriteIni($Temppath, $WriteListView, $WriteName)

	For $i = 0 To ControlListView("", "", $WriteListView, "GetItemCount") - 1

		IniWrite($Temppath, $WriteName, ControlListView("", "", $WriteListView, "GetText", $i, 0), ControlListView("", "", $ListView, "GetText", $i, 1))

	Next

EndFunc   ;==>WriteIni




Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
	Local $hWndFrom, $iCode, $tNMHDR, $hWndListView, $tInfo

	$hWndListView = $ListView
	If Not IsHWnd($ListView) Then $hWndListView = GUICtrlGetHandle($ListView)

	$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
	$hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
	$iCode = DllStructGetData($tNMHDR, 'Code')

	Switch $hWndFrom
		Case $hWndListView
			Switch $iCode
				Case $NM_DBLCLK ;двойной клик левой кнопки мыши
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
					$iIndex = DllStructGetData($tInfo, 'Index')



					If $iIndex <> -1 Then

						$iLast_LV_Index = $iIndex

						$NameParam = ControlListView("", "", $ListView, "GetText", $iLast_LV_Index, 0)
						$Param = ControlListView("", "", $ListView, "GetText", $iLast_LV_Index, 1)

						$line = $iLast_LV_Index + 1

						$EditParam = 1

					EndIf

				Case $NM_RCLICK ;один клик правой кнопки мыши
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
					$iIndex = DllStructGetData($tInfo, 'Index')



					If $iIndex <> -1 Then

						$iLast_LV_Index = $iIndex
						$NameParam = ControlListView("", "", $ListView, "GetText", $iLast_LV_Index, 0)
						$line = $iLast_LV_Index + 1

					EndIf
					ShowMenu($hWnd, $ContextMenu, $ListView, 1)

			EndSwitch
	EndSwitch

	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY



Func ShowMenu($hWnd, $nContextID, $nContextControlID, $iMouse = 0)
	Local $hMenu = GUICtrlGetHandle($nContextID)
	Local $iCtrlPos = ControlGetPos($hWnd, "", $nContextControlID)

	Local $X = $iCtrlPos[0]
	Local $Y = $iCtrlPos[1] + $iCtrlPos[3]

	ClientToScreen($hWnd, $X, $Y)

	If $iMouse Then
		$X = MouseGetPos(0)
		$Y = MouseGetPos(1)
	EndIf

	DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $X, "int", $Y, "hwnd", $hWnd, "ptr", 0)
EndFunc   ;==>ShowMenu


Func ClientToScreen($hWnd, ByRef $X, ByRef $Y)
	Local $stPoint = DllStructCreate("int;int")

	DllStructSetData($stPoint, 1, $X)
	DllStructSetData($stPoint, 2, $Y)

	DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "ptr", DllStructGetPtr($stPoint))

	$X = DllStructGetData($stPoint, 1)
	$Y = DllStructGetData($stPoint, 2)
	$stPoint = 0
EndFunc   ;==>ClientToScreen


Func NewObject($ListView, $hParent1 = 0)
	$EditParam = 0
	$Item = _GUICtrlListView_GetSelectedIndices($ListView, True)
	If $Item[0] > 0 Then
		$Name = _GUICtrlListView_GetItemText($ListView, $Item[1])
		$Param = _GUICtrlListView_GetItemText($ListView, $Item[1], 1)
		Local $NewParam_GUI, $iGOEM_Opt

		$iGOEM_Opt = Opt("GUIOnEventMode", 0)

		$NewParam_GUI = GUICreate($Name, 150, 150, -1, -1, $WS_BORDER, -1, $hParent1)

		$NewParam = GUICtrlCreateInput($Param, 20, 20, 100, 30)
		GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")
		$OK = GUICtrlCreateButton('OK', 10, 70, 60, 30)
		$Cancel = GUICtrlCreateButton('Exit', 75, 70, 60, 30)

		GUISetState(@SW_DISABLE, $hParent1)
		GUISetState(@SW_SHOW, $NewParam_GUI)

		While 1
			$nMsg = GUIGetMsg()

			Switch $nMsg
				Case $GUI_EVENT_CLOSE
					ExitLoop
				Case $Cancel
					ExitLoop

				Case $OK

					_GUICtrlListView_SetItem($ListView, GUICtrlRead($NewParam), $Item[1], 1)
					ExitLoop

			EndSwitch

		WEnd

		Opt("GUIOnEventMode", $iGOEM_Opt)
		GUISetState(@SW_ENABLE, $hParent1)
		GUIDelete($NewParam_GUI)
	Else
		MsgBox(48, 'Ошибка !', 'Не выделена строка с параметром !')
	EndIf


EndFunc   ;==>NewObject

Func _Edit($hParent = 0)
	$EditParam = 0
	If Not FileExists(@ScriptDir & '\Temp\Temp.ini') Then
		DirCreate(@ScriptDir & '\Temp')
		FileCopy($path, @ScriptDir & '\Temp', 1)
		StringRegExpReplace($path, '^.*\\', '')
		FileMove(@ScriptDir & '\Temp\' & StringRegExpReplace($path, '^.*\\', ''), @ScriptDir & '\Temp\temp.ini', 1)
	EndIf
	$Subject = GUICtrlRead($ListOll)

	$iGOEM_Opt = Opt("GUIOnEventMode", 0)

	$EditObject_GUI = GUICreate('Редактирование предмета', 300, 410, -1, -1, -1, -1, $hParent)

	$EditName = GUICtrlCreateInput($Subject, 10, 10, 280, 30)
	GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")
	$ListView = GUICtrlCreateListView('Название параметра|Значение параметра', 10, 45, 280, 300, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
	$Items = IniReadSection(@ScriptDir & '\Temp\Temp.ini', $Subject)


	If Not @error Then
		For $i = 1 To UBound($Items) - 1
			_GUICtrlListView_AddItem($ListView, $Items[$i][0])
			_GUICtrlListView_AddSubItem($ListView, $i - 1, $Items[$i][1], 1, 2)
		Next
		ControlFocus($EditObject_GUI, 'Редактирование предмета', $ListView)
		_GUICtrlListView_SetItemSelected($ListView, 0)
	EndIf

	$DummyMenu = GUICtrlCreateDummy()
	$ContextMenu = GUICtrlCreateContextMenu($DummyMenu)
	$ItemCreate = GUICtrlCreateMenuItem("Создать параметр", $ContextMenu)
	$ItemDelete = GUICtrlCreateMenuItem("Удалить параметр", $ContextMenu)

	$OK = GUICtrlCreateButton('OK', 110, 355, 80, 40)

	GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
	GUISetState(@SW_DISABLE, $hParent)
	GUISetState(@SW_SHOW, $EditObject_GUI)



	While 1
		$nMsg = GUIGetMsg()

		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				ExitLoop
			Case $OK
				$NewSubject = GUICtrlRead($EditName)
				If $NewSubject <> $Subject Then
					IniDelete(@ScriptDir & '\Temp\Temp.ini', $Subject)
					$index = _GUICtrlListBox_GetCurSel($ListOll)
					_GUICtrlListBox_DeleteString($ListOll, $index)
					_GUICtrlListBox_InsertString($ListOll, $NewSubject, $index)
				EndIf
				WriteIni(@ScriptDir & '\Temp\Temp.ini', $ListView, $NewSubject)

				ExitLoop
			Case $ItemCreate
				AddLine($ListView, $Subject, $EditObject_GUI)
			Case $ItemDelete

				DelLine($ListView)

		EndSwitch
		If $EditParam Then NewObject($ListView, $EditObject_GUI)

		$Fokus = ControlGetFocus($EditObject_GUI)
		If $Fokus == 'Button1' Then
			HotKeySet("{Enter}")
		Else
			HotKeySet("{Enter}", "_EditParam_")
		EndIf

	WEnd
	HotKeySet("{Enter}")
	Opt("GUIOnEventMode", $iGOEM_Opt)
	GUISetState(@SW_ENABLE, $hParent)
	GUIDelete($EditObject_GUI)
	ControlFocus($Main, '', $ListOll)
EndFunc   ;==>_Edit

Func _EditParam_()
	HotKeySet("{Enter}")
	NewObject($ListView, $EditObject_GUI)
EndFunc   ;==>_EditParam_


Func DelLine($ListView)

	If MsgBox(48 + 1, 'Внимание !', 'Вы действительно хотите удалить параметр ' & $NameParam & ' ?') == 1 Then

		_GUICtrlListView_DeleteItem($ListView, $line - 1)
		$OllName = IniReadSectionNames(@ScriptDir & '\Temp\temp.ini')
		If Not @error Then
			For $i = 1 To $OllName[0]
				IniDelete(@ScriptDir & '\Temp\temp.ini', $OllName[$i], $NameParam)
			Next
		EndIf

	EndIf


EndFunc   ;==>DelLine


Func AddLine($ListView, $ObjName, $hParent)

	Local $NewLine_GUI, $iGOEM_Opt

	$iGOEM_Opt = Opt("GUIOnEventMode", 0)

	$NewLine_GUI = GUICreate('Добавить новый параметр', 260, 150, -1, -1, $WS_BORDER, -1, $hParent)

	$NewParam = GUICtrlCreateInput('Название параметра', 10, 10, 240, 30)
	GUICtrlSetFont(-1, 12, 600, 0, "MS Sans Serif")
	$OK = GUICtrlCreateButton('OK', 10, 70, 60, 30)
	$Cancel = GUICtrlCreateButton('Exit', 75, 70, 60, 30)

	GUISetState(@SW_DISABLE, $hParent)
	GUISetState(@SW_SHOW, $NewLine_GUI)

	While 1
		$nMsg = GUIGetMsg()

		Switch $nMsg
			Case $Cancel
				ExitLoop

			Case $OK
				Local $Orig = 1
				For $i = 0 To _GUICtrlListView_GetItemCount($ListView) - 1
					If _GUICtrlListView_GetItemText($ListView, $i) == GUICtrlRead($NewParam) Then
						MsgBox(48, 'Ошибка !', 'Имя параметра ' & GUICtrlRead($NewParam) & @CR & 'уже есть в ' & $ObjName & ' !')
						$Orig = 0
						WinActivate($hParent)
						ExitLoop
					EndIf
				Next

				If $Orig Then _GUICtrlListView_AddItem($ListView, GUICtrlRead($NewParam))
				ExitLoop
		EndSwitch

	WEnd

	Opt("GUIOnEventMode", $iGOEM_Opt)
	GUISetState(@SW_ENABLE, $hParent)
	GUIDelete($NewLine_GUI)


EndFunc   ;==>AddLine
Добавляются параметры двойным кликом по нужному параметру в таблице (от себя добавил возможность добавления нового параметра, например можно добавить пункты в шаблон по клику правой кнопки мышки при редактировании предмета), в процессе работы создаётся временная папка "Темп" в папке со скриптом, в ней два временных файла- с изменённым файлом базы и файл отчёта, который формируется в процессе изменения списка. При выходе из скрипта или если открыть новый файл базы временная папка удаляется и создаётся новая.

Уже позже перечитывал и увидел
при использовании кнопки Новый файл пользователь указывает имя новой базы и место сохранения
...на картинках с интерфейсом такой кнопки не было, по-этому и не реализовал эту функцию.По этому пока файл новой базы можно создать вручную, а дальше открыть пустую и добавить туда предметы.

Добавил, проверяйте.
 
Автор
E

eil

Новичок
Сообщения
53
Репутация
0
ra4o сказал(а):
.на картинках с интерфейсом такой кнопки не было, по-этому и не реализовал эту функцию.По этому пока файл новой базы можно создать вручную, а дальше открыть пустую и добавить туда предметы.

Добавил, проверяйте.
хех, скоры вы. я тоже писал описание не за раз и потому видимо кнопку пропустил. =) уже успел даже подумать как и без кнопки, но поидее теперь не нужно. (можно было бы чтоб при открытии программы если база была не открыта, но нажата Добавить Предмет то создавалась бы новая база). к слову идея пришла из получается бага - открываем прогу, никакой базы, но окно Добавления предмета вызвать можно(которое ничего не сделает без отрытой базы, но введёт в ступор).

ra4o сказал(а):
(от себя добавил возможность добавления нового параметра, например можно добавить пункты в шаблон по клику правой кнопки мышки при редактировании предмета)
на самом деле очень хорошо что добавили, пригодится.! только тут вопрос: не будет ли это мешать/вызывать нестыковку у программы изза несоответствия с "эталоном"? я не совсем понял есть ли гдето зависимость/сравнение, потому на всякий случай решил поднять этот момент..

вобще, надеюсь не сочтёте за наглость, но предложу такую дороботку по механизму:
- если программа была открыта и открыта существующая база, то за шаблон берутся параметры её первого Предмета; тогда при добавлении нового Предмета названия параметров берутся у первого Предмета из базы.
- если база не была открыта то при создании новой шаблон как раз будет создаваться с нуля = открываем программу, нажимаем Новый файл, Добавить Предмет и правым кликом создаём те самые параметры -а в альнейшем они будут считываться из 1го предмета, как описал выше
- если в уже существующей открытой базе при редактировании предмета добавить новый параметр, то поидее он должен добавиться у всех остальных Предметов(с пустым значением). правда тут возникает надобность и возможности удаления параметра(опять же у всех Предметов в базе)

^ такие изминения позволяют совсем отказаться от файла-шаблона и шаблона в коде, а так же создаёт более простую поддержку баз с разными параметрами.

пока заметил такие баги:
- не даёт выбрать в правой панели элемент для удаления -тем не менее при нажатии "Удалить из списка" просто удаляет последнее добавленное
- при сохранении отчета с тем же названием не предупреждает о перезаписывании файла(обычно система это делает, потому так понимаю autoit это "блокирует"). всё же это опасно, можно не заметить и затереть другой отчёт.
- если создать новый Предмет(кнопка "Добавить") а потом его добавить в правую панель("Добавить в список") -скрипт крашится


еще 2 пожелания:
+ похоже все параметры требуют обязательное значение? можно ли этого избежать?=незаполненое значение равно "" а не "0". скорей всего программу буду использовать не только я и не всем ясно что "ничего" при заполнении это 0.(dthytt 0 вызывает обман что значение там какое есть всё же- когда много цифр это мешает бывает) сейчас при пустом значении крашится. если это нельзя реализовать изза проблем при складывании параметров для Отчёта тогда ладно уж.
+ можно ли добавить некую работу с клавиатурой? в частности:
- стрелками можно перемещать выделение по элементам(в левой панели) - хорошо бы по Enter вызывать окно Редактирования.
- аналогично в окне редактирования Enter вызывает окошко ввода значения и он же подтвержает ввод.
- в окне редактирования(а так же окне создания нового Предмета) с помощью Tab переносить фокус

^ всё это ускоряет работу знакомыми методами= выбрал элемент, Enter(открылось окно Редактирвоания), если нужно изменил имя и потом Ефи(или сразу Tab), стрелками выбрал нужный параметр, Enter(появляется окно ввода значени), Enter для подверждения, когда с параметрами закончил- Tab(убрать фокус с параметров и Enter(подтвердить сохранение релактировния). Escape и так уже отменяет любые эти окна в любой момент, по сути как нажатие Exit.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
По поводу багов:
- не даёт выбрать в правой панели элемент для удаления -тем не менее при нажатии "Удалить из списка" просто удаляет последнее добавленное
-в правой невозможно выбрать строку, выбираете в левой панели и этот предмет убирается из правой. Это сделано так , потому что в правой панели название предмета отличается от оригинала, там добавлено "ХКоличество", был вариант для получения "чистого" названия убрать всё, что после "Х" , но вдруг в оригинальном названии будет этот символ...хотя, можно реализовать, если так как есть не удобно.
- при сохранении отчета с тем же названием не предупреждает о перезаписывании файла(обычно система это делает, потому так понимаю autoit это "блокирует"). всё же это опасно, можно не заметить и затереть другой отчёт.
- если создать новый Предмет(кнопка "Добавить") а потом его добавить в правую панель("Добавить в список") -скрипт крашится
Это исправил.

есть ли гдето зависимость/сравнение
нет, количество составляющих для разных предметов может быть разное и ни от чего не зависит , все данные хранятся в ini файле и при необходимости читается вся секция предмета целиком.

такие изминения позволяют совсем отказаться от файла-шаблона и шаблона в коде
Сделал

предложу такую дороботку по механизму:.....
незаполненое значение равно "" а не "0"
Есть, проверяйте

Осталось работу с клавиатурой прицепить

Остальное буду добавлять/исправлять и менять изначальный скрипт в посте выше.
 
Автор
E

eil

Новичок
Сообщения
53
Репутация
0
ra4o сказал(а):
в правой невозможно выбрать строку, выбираете в левой панели и этот предмет убирается из правой. Это сделано так , потому что в правой панели название предмета отличается от оригинала, там добавлено "ХКоличество"
а если сделать 2 колонки в правой панели- с названием и вторая с количеством?.. все же выбирать в правой для удаления из списка логичнее..

ra4o сказал(а):
количество составляющих для разных предметов может быть разное и ни от чего не зависит , все данные хранятся в ini файле и при необходимости читается вся секция предмета целиком.
только сейчас это заметил. а не мешает ли это при составлении Отчёта? как программа понимает что Гвозди одного предмета и другого подобный параметр для сложения? в смысле что будет если у у всех Предметов 12 параметров, а потом выясняется что есть 2 Предмета у которых есть по 13му парметру, они разные по названиям, да еще и эти Предметы в очёте - просто сложить 13е параметры ведь будет не верным.
возможно я просто чего то недопонял и всё в порядке,буду рад вашему обьяснению. кстати Добавит/Удалить Параметр очень полезны, спасибо!

еще заметил что при Редактировании Предмета всё же лучше использовать тоже окно что при создании, чтоб можно было и имя подредактировать если что.
а что за отступ под панелями, явно жесткого зарезервированного размера?(если менять размер окна он всё равно такого же размера в примерно 3 строки)

баги замеченные в полсденей версии(только что скопировал)
- если нажать Сохранить, выскакивает предупреждение "Вы действительно хотите сохранить изминения в файле?" с одной только ОК -может я не понял в чём смысл этого пердупреждения, потому что хоть закрытие окна крестиком хоть Ок приводит в окну сохранения..
- при создании отчёта если уже есть файл с таким названием приводит к предупреждению, но данные всё равно записывает и в ОТчёт.тхт.! тоесть есть файл Отчёт.тхт, программа об этом предупреждает, нажимаю ОК, выводит окно чтоб назвать файл иначе, воожу другое имя - в итоге имеем новый файл с отчётом и теже данные перезаписанные в файл Отчёт.тхт = к слову тут было бы логичнее чтоб предупреждение сообщало что файл с таким именем уже есть и предлагало ОК - заменить(перезаписать), Cancel - выбрать новое имя.
- после нажатия Сохранить все параметры у предметов в левой панели стираются(и названия и значения), если нажать Добавить то для названий параметров берутся названия Предметов. хотя в самом файле-базе данные сохраняются верно.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
как программа понимает что Гвозди одного предмета и другого подобный параметр для сложения?
При добавлении в список первого предмета создаётся временный ini файл отчёта, в который переписываются все не пустые параметры первого предмета , как ключи и количество параметров, как значение, дальше при добавлении других предметов проверяется наличие новых параметров, как ключей во временном файле - если есть совпадение - суммируются значения, если нет, то дописывается новый ключ со значением. Например, если в одном предмете будет параметр "Гвозди", а в другом "Гвоздь", то это будет два различных параметра.
а что за отступ под панелями
это я так GUI писал :blink: ,оставлял место на перспективу для каких-нибудь кнопочек...растяну чуть таблицу вниз. Баги поправлю,отпишусь.
- если нажать Сохранить, выскакивает предупреждение "Вы действительно хотите сохранить изминения в файле?" с одной только ОК
хмм... там три кнопки должны быть "Да"-перезаписывает файл под прежним именем,"Нет"-выбор другого имени для базы и"Отмена"-выход без сохранения , сейчас возьму отсюда, проверю .Проверил, так и есть! Попробуйте проверить, как у Вас сообщения выводятся :
Код:
MsgBox(3,'Проверка','Должно быть 3 кнопки - ДА, НЕТ, ОТМЕНА')
MsgBox(48+3,'Проверка','Должно быть 3 кнопки - ДА, НЕТ, ОТМЕНА'&@CR&'и знак ПРЕДУПРЕЖДЕНИЕ')
при Редактировании Предмета всё же лучше использовать тоже окно что при создании
Всё исправил, проверяйте.
 
Автор
E

eil

Новичок
Сообщения
53
Репутация
0
ra4o сказал(а):
это я так GUI писал :blink: ,оставлял место на перспективу для каких-нибудь кнопочек...растяну чуть таблицу вниз.
это я понял, просто спросил какие на него были планы ;D
ra4o сказал(а):
хмм... там три кнопки должны быть "Да"-перезаписывает файл под прежним именем,"Нет"-выбор другого имени для базы и"Отмена"-выход без сохранения , сейчас возьму отсюда, проверю .Проверил, так и есть!
работает, видимо я до этого брал старую версию.

баг с множественным сохранением отчёта так и не пропал. нажимаю Отчёт, сохранить под имнем Отчёт, выводит предупреждение что уже такой файл есть, жму ОК, меняю имя на Отчёт2, опять предупреждение(файл действительно есть, со старых проверок) - в итоге чтоб сохранить нужно ввести имя точно не присутствующего файла. НО в итоге он сохраняет отчёт много раз под всему названиями из "попыток". в этом примере появилось Отчёт, Отчёт2 и Отчёт6(наконец то файл которого не было).
думается мне тут тоже не помешало бы окно сохранения как теперь у базы, с вариантами перезаписать, переназвать, отмена.

так же заметил что клавиши функционируют, но не совсем. не хватает возможности когда стрелками перемещаешся по элементам левой панели, с помощью Enter открыть Редактирование; точно так же перемещаясь по параметрам в окне предмета - по enter открыть окно ввода значения. надеюсь это возможно.
кроме того окна добавления и редактирования предмета закрываются по Escape, но окно ввода значения параметра нет.
 
Автор
E

eil

Новичок
Сообщения
53
Репутация
0
к сожалению нашёл ещё ворох шероховатостей связаных с использованием клавиатуры. в остальном программа ведёт себя хорошо и практически готова к использованию( вашими стараниями). =)

нажимаю Добавить предмет, ввожу имя, по Tab перехожу к параметрам, Enter не открывает ввод значения параметров. кроме того, если перейти на ОК по Tab и нажать Enter то предмет добавляется и тут же снова открывается окно редактирования - теперь уже можно вводить/менять значения параметров.

^ все теже действия что и выше > если кликнуть 2 раза для добавления значения параметра выводит предупреждение "Не выделена строка с параметром!"

открываю для редактирования предмет, Добавить параметр, ввожу имя нового параметра(не даёт принять по Enter как при вводе значения), перехожу по Tab на Ok жму Enter, окно пропадает но появляется передупреждение "Не выделена строка с параметром!" и по Enter оно не закрывается, а только переоткрывается, пока не нажать ОК мышкой.

самым необычным.. "сюрпризом" оказался вот какой фокус= набирая все эти описания программа висела в фоне с открытым окном редактирования предмета и открытым окнов ввода значения параметра - когда я в браузере нажимаю Enter программа выходит на первый план :D
 
Автор
E

eil

Новичок
Сообщения
53
Репутация
0
в плане тестирования кажется всё работает, если чтото вдруг окажется не так выясню уже далее в использовании(ну и отпишусь тут).
последний штрих: в коде не заметил привязки, да и не знаю насколько это сложно добавить. кодировку сохранения что базы, что отчёта в UTF-8 а не ANSI. если это буквально пару строк то было бы не лишним, но если то много дописывать то ладно.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
У меня пишет в UTF-8, нужно в ANSI ?
 
Автор
E

eil

Новичок
Сообщения
53
Репутация
0
кажется тревога ложная, видимо это у меня чтото шалит - пользуюсь AkelPad и в нём всё открывается(что главное). а то в модуле предпросмотра чтото иероглифы были, но похоже это не от кодировки ибо другие файлы и с Ansi и с Utf-8 нормально показывает.
в общем всё в порядке. поидее тему стоит перевести в решённую.) а я смогу потом если что ещё тут к вам обратится?(тема не закроется?)
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Да, можете обращаться, тема не закроется, даже , если отметить её решенной.
 
Автор
E

eil

Новичок
Сообщения
53
Репутация
0
появилось 2 пожелания которые раньше не бросались в глаза:
- после компиляции у программы нет никакой иконки = можно ли добавить? допустим в переменной указываем название иконки, а при компиляции она лежит в той же папке и берется для отображения у .exe, на панели задач, и в заголовке окна.
- можно ли чтото сделать с чрезмерным масштабированием групп кнопок? уж очень они разьезжаются при раскрытии на весь экран, а обрамляющие их рамки групп так вобще... то что они "съёживаются" при уменьшении вполне полезно, а вот при раскрытии мобще было бы неплохо если бы кнопки и группы сохраняли размер и позиции как по-умолчанию(при открытии программы). у мен при открытии они выглядят как в приложенной картинке.
 

Вложения

  • 11-29_001749.png
    11-29_001749.png
    3.8 КБ · Просмотры: 24

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
- после компиляции у программы нет никакой иконки
скачайте иконку любую в формате .ico и при компиляции из SciTE (Tools-Compile) в строке "Icon" нажмите кнопку "..." и укажите путь к своей скачанной иконке , дальше кнопка "Compile Script" и будет ехе с иконкой !
По второму вопросу изменил, размер кнопок и групп не изменяется при изменении размеров окна, только если делать окно по горизонтали меньшим, чем размер кнопок - кнопки и группы остаются за пределами окна.
 
Автор
E

eil

Новичок
Сообщения
53
Репутация
0
никак не мог написать = подскажите где докачать Encoding.au3, в моей версии его почему то не оказалось.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Вот, прикрепил, но в моём скрипте она по-моему осталась после экспериментов с кодировкой, попробуйте её убрать вообще.
 

Вложения

  • Encoding.au3
    24 КБ · Просмотры: 5
Верх