F9
Новичок
- Сообщения
- 71
- Репутация
- 2
Добрый день!
Писал обработчик, столкнулся с проблемой отрисовки AutoIT некоторых элементов UI.
А именно:
Когда мы в цикле создадем (подозреваю, что и не в цикле) элементы UI, количество вкладок и элементов UI на которых равно количеству баз, к которым мы подключаемся (пути указаны в ini-файле, путь (значение ini) присваивается переменной, которая и является ключем ini.
Файл ini:
Далее в функции _GetPriceData($base) мы осуществляем коннект к FireBird БД и выбираем оттуда данные. Текст приводить не вижу смысла. С выборкой БД проблем нет. Есть проблема следуюзего характера (см. скриншоты):
1. - Исходная прорисовка интерфейса. Все корректно.
2. - После обновления (код ниже) - видим замечательную картину, что нет рамки у элемента ListView.
Данные в ListView и Процедура обновления следующая:
Почему
_GUICtrlListView_BeginUpdate
_GUICtrlListView_EndUpdate
_GUICtrlListView_RedrawItems
так коряво работает ? Как можно обойти глюки интерфейса ? :stars:
Писал обработчик, столкнулся с проблемой отрисовки AutoIT некоторых элементов UI.
А именно:
Когда мы в цикле создадем (подозреваю, что и не в цикле) элементы UI, количество вкладок и элементов UI на которых равно количеству баз, к которым мы подключаемся (пути указаны в ini-файле, путь (значение ini) присваивается переменной, которая и является ключем ini.
Файл ini:
Код:
[General]
SuperCO=10.32.10.26/3052:C:\IADB\IAPTEKA.FDB
VashaApteka=10.32.10.37/3052:E:\IADB\IAPTEKA.FDB
Edelveis=10.32.10.32/3052:E:\IADB\IAPTEKA.FDB
MAPlus=10.32.10.56/3052:E:\IADB\IAPTEKA.FDB
Mypharm=10.32.10.38/3052:E:\IADB\IAPTEKA.FDB
Tonus=10.32.10.66/3052:E:\IADB\IAPTEKA.FDB
Код:
Global $srv_ini = IniReadSection(@ScriptDir & "\Settings.ini", "General")
GUICtrlSetData($path_db,Eval($srv_ini[$ii][0]))
For $s = 1 to $srv_ini[0][0]
Assign($srv_ini[$s][0],$srv_ini[$s][1],2)
Next
For $ii = 1 to $srv_ini[0][0]
_ArrayAdd($List_Array, "result"&$ii) ; в массиве result хранятся имена переменных, которыми обозваны вкладки
Assign($Tab_Array[$ii],GUICtrlCreateTabItem($srv_ini[$ii][0]))
Assign($List_Array[$ii], GUICtrlCreateListView("|ID Поставщика|Поставщик|БД_дата|БД_время|ФАЙЛ_дата|ФАЙЛ_время|Комментарии|Файл Store", 50, 55, 1000, @DesktopHeight - 690, $LVS_REPORT+$LVS_SINGLESEL, $LVS_EX_CHECKBOXES+$LVS_EX_GRIDLINES+$LVS_EX_FULLROWSELECT))
_GetPriceData($ii, Eval($srv_ini[$ii][0]))
Next
Далее в функции _GetPriceData($base) мы осуществляем коннект к FireBird БД и выбираем оттуда данные. Текст приводить не вижу смысла. С выборкой БД проблем нет. Есть проблема следуюзего характера (см. скриншоты):
1. - Исходная прорисовка интерфейса. Все корректно.
2. - После обновления (код ниже) - видим замечательную картину, что нет рамки у элемента ListView.
Данные в ListView и Процедура обновления следующая:
Код:
;~ ******************************* заполнение in_XML[$TabNum], внутри функции _GetPriceData()
;где то выше объявление функции Func _GetPriceData($TabNum,$base)
Dim $temp_a[0] ;временный массив
$in_xml_filelist = _FileListToArray("\\" & $IP_Array[$TabNum] & "\mailbox\!Price\XML\")
If Not @error Then
For $X = 1 to $in_xml_filelist[0]
$2string = StringSplit(FileReadLine("\\" & $IP_Array[$TabNum] & "\mailbox\!Price\XML\" & $in_xml_filelist[$x],2),CHR(034)) ; парсим 2-ую строку, разделяя знаком кавычек
if $2string[2] = '10' Then ; и если в XML параметр = 10, значит это прайс
_ArrayAdd($temp_a,$2string[6])
;~ GUICtrlCreateListViewItem($2string[6],Eval("in_XML" & $TabNum)) ;ранее использовал GUICtrlCreateListViewItem, но мерцания слишком раздражают
Else
EndIf
Next ;для каждого XML-файла выбираем название поставщика, если это тип 10 и кладем во временный temp_a, т.к. Autoit не умеет делать _ArrayAdd(Eval("Price_XML"& $TabNum), $2string[6])
Else
EndIf
ConsoleWrite("------------- " & $in_XML[$TabNum] & @CR)
_GUICtrlListView_BeginUpdate($in_XML[$TabNum])
For $XM = 0 To UBound($temp_a)-1
_GUICtrlListView_AddItem(Eval($in_XML[$TabNum]), $temp_a[$XM])
Next
_GUICtrlListView_EndUpdate($in_XML[$TabNum])
Код:
Case $msg = $refresh
$id = _GUICtrlTab_GetCurSel ($Tab1)+1
_GUICtrlListView_DeleteAllItems (Eval("result" & $id)) ;ListView, куда выгружаем данные из БД
_GUICtrlListView_DeleteAllItems (Eval("XML_Files" & $id)) ;ListView, на скраншоте как "Подготовленные..."
_GUICtrlListView_DeleteAllItems (Eval("in_XML" & $id)) ;ListView на скриншоте как "Файлы, ожидающие..."
_GUICtrlListView_DeleteAllItems (Eval("OpenOrder" & $id)) ;ListView "открытые заявки"
_GetPriceData($id, Eval($srv_ini[$id][0]))
_GUICtrlListView_RedrawItems(Eval($in_XML[$id]),0,UBound(Eval("Price_XML" & $id)-1))
Почему
_GUICtrlListView_BeginUpdate
_GUICtrlListView_EndUpdate
_GUICtrlListView_RedrawItems
так коряво работает ? Как можно обойти глюки интерфейса ? :stars: