Что нового

[Элементы GUI] [ListView] неправильная Прорисовка элементов

F9

Новичок
Сообщения
71
Репутация
2
Добрый день!

Писал обработчик, столкнулся с проблемой отрисовки 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:
 

Вложения

  • Price_Manager_1.jpg
    Price_Manager_1.jpg
    92.1 КБ · Просмотры: 31
  • Price_Manager_2.jpg
    Price_Manager_2.jpg
    91.2 КБ · Просмотры: 27
Автор
F9

F9

Новичок
Сообщения
71
Репутация
2
Как ни странно, но
Код:
_WinAPI_RedrawWindow()

перерисовало всё корректно
 
Верх