Вопрос
Как быстро перекинуть данные (List, ItemData) из одного Комбо в другой? Нужен максимально быстрый способ на ВБ6.
Ответ
Можно так попробовать. Просто сделать List c Index(0), по сути, массив. Как понадобится скопировать куда-то — Load List(1) и ставим в нужное место. Как данные теряют актуальность, Unload List(1) и снова Load(1).
Вообще, быстро сделать можно элементарным перебором с помощью АПИ, который произойдет хотябы ненамного быстрее перебора средствами VB.
Вот пример для ЛистБокса. Без труда оптимизируется для КомбоБокса.
Private Declare Function SendMessageStr Lib "user32" Alias "SendMessageA" (ByVal _
hWnd As Long, ByVal wMsg As Long,
ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal _
hWnd As Long, ByVal wMsg As Long,
ByVal wParam As Long, ByVal lParam As Long) As Long
Private Function CopyListToList(source As ListBox, target As ListBox) As Long
Dim c As Long
Const LB_GETCOUNT = &H18B
Const LB_GETTEXT = &H189
Const LB_ADDSTRING = &H180
Dim numitems As Long
Dim sItemText As String * 255
numitems = SendMessageLong(source.hWnd, LB_GETCOUNT, 0&, 0&)
If numitems > 0 Then
For c = 0 To numitems — 1
Call SendMessageStr(source.hWnd, LB_GETTEXT, c, ByVal sItemText)
Call SendMessageStr(target.hWnd, LB_ADDSTRING, 0&, ByVal sItemText)
Next
End If
numitems = SendMessageLong(target.hWnd, LB_GETCOUNT, 0&, 0&)
CopyListToList = numitems
End Function
Еще быстрее, думаю, не выйдет.
Из конференции VB
Copyright 2000-2004 Сообщество Чайников
Контактная информация