www.map-info.ru :: Просмотр темы - Диалоги и массивы
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Пт Июн 05, 2015 6:51 am    Заголовок сообщения: Диалоги и массивы Добавить ответ со ссылкой на данный текст

Добрый день.
Обобщил Ваше мнение по теме MultiListBox и массивы.
Получил нужное для себя решение.
MultiListBox здесь наполняется числами.
Может и Вам будет интересно использовать это в своей практике.
Вот код:

Include "MAPBASIC.DEF"
Include "Menu.def"
Declare Sub Main
Declare Sub FirstStep

Dim vd() As String
Sub Main

dim nVd, nID as integer,
w as string

nVd = 34 ' размер массива для MultiListBox
reDim vd(nVd)
nID = 1
w = "--" ' не всегда будет необходимость учитывать
' этот параметр в расчетах
Do while nID <= nVd
ReDim vd(Ubound(vd)+1)
vd(nID) = w
w = Str$(nID)
nID = nID+ 1
Loop

Dialog
Title "Диалог"
Width 235
Height 140

Control StaticText
Position 10, 10
Title "Параметр"

Control MultiListBox
Title From Variable vd
Value 1
Position 10,20
Width 35
Height 90
ID 1

Control OkButton
Position 65, 115
ID 2
Calling FirstStep
Title "Ok"
Enable

Control CancelButton
Position 135, 115
Title "Cancel"

End Sub
'=======
Sub FirstStep
Dim q1, q11 As String,
nID As Integer

For nID = 1 To UBound(vd)
q1 = ReadControlValue(1)
q11 = vd(q1)

Note "Параметр " + q11

Next
End Sub

Вот какая тут закавырка.
Выражение
Note "Параметр " + q11
показывает поочередно все выбранные в окне диалога значения.
Собственно, то что нужно, но после этого сразу же появляется сообщение
"Индекс массива выходит за заданные пределы"
и указывается строка, где записано
q11 = vd(q1)
Соответственно, далее программа не работает.
Помогите пожалуйста разобраться что здесь не так и как с этим бороться.
Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
thegeo



Зарегистрирован: 17.01.2012
Сообщения: 119

СообщениеДобавлено: Пт Июн 05, 2015 3:27 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Непонятно какую задачу решает код. Если вы хотите показать выбранные в списке значения, то это может выглядеть как то так:
Include "MAPBASIC.DEF"
Declare Sub Main
Declare Sub lbClick
Dim vd() As String
dim fldInd() as smallint
Sub Main
dim nVd,i as smallint
dim ss as string
nVd = 34 ' размер массива для MultiListBox
reDim vd(nVd)
vd(1)="--"
For i = 2 To nVd
vd(i)=Str$(i-1)
Next
Dialog
Title "Диалог"
Control StaticText
Title "Параметр"
Control MultiListBox
Title From Variable vd
Value 1
ID 1
Control OkButton
Title "Ok"
Calling lbClick
Control CancelButton
Title "Cancel"
If CommandInfo(CMD_INFO_DLG_OK)=true Then
ss=""
For i = 1 To ubound(fldInd)-1
ss=ss & vd(fldInd(i)) & chr$(10)
Next
note ss
End If
End Sub
'Обработчик события (клик мышью на элементе Ok)
Sub lbClick
dim ind,j as smallint
j=0
Do
ind = ReadControlValue(1)
j=j+1
redim fldInd(j)
fldInd(j)=ind
if ind=0 then exit do end if
Loop
end sub
PS. В вашем примере поставьте в цикл print q1 и увидите что последний индекс определяется как 0 что для МВ недопустимо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Пт Июн 05, 2015 4:09 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Большое спасибо за Ваш пример.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru