Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634

Как бороться с Отрицательными значениями list.ListCount?

26.01.2016, 18:35. Показов 1539. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Как сие победить.
При заполнении элемента ListBox, с какого то значения (вроде свыше 30000) Счетчик элементов ListCount начинает "глючить", а именно получает отрицательное значение.

Добавлено через 20 минут
так все таки можно получить как то количество элементов списка если оно превышает 32767?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.01.2016, 18:35
Ответы с готовыми решениями:

Как задать интервал с отрицательными и положительными значениями
Доброго времени суток. Подскажите как задать интервал в Mathcad с отрицательными и положительными значениям: например xj =...

Массив: Разместить все элементы с положительными значениями в левой части массива, элементы с отрицательными значениями - в правой
Напишите пожалуйста программу Разместить все элементы с положительными значениями в левой части массива, элементы с отрицательными...

Не получается разобраться с отрицательными значениями
Задача очень простая при нажатии на кнопку область должна прокручивается влево и когда left у области становится равен -2550, кнопка...

26
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
26.01.2016, 19:05
Цитата Сообщение от kreotodr Посмотреть сообщение
так все таки можно получить как то количество элементов списка если оно превышает 32767?
Если это ограничение Integer то никак.
Тут встречный вопрос, зачем так издеваться на пользователем программы? Разве может нормальный человек просмотреть 32767 значений ?
Надо что то в программе менять!
3
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
26.01.2016, 22:31  [ТС]
ну пользователи тут не причем.
ответ не верный.
встречал раньше тему через сендмеседж можно получить, но не могу найти..
Анатолий можете подсобить?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
27.01.2016, 07:59
Цитата Сообщение от kreotodr Посмотреть сообщение
через сендмеседж
Ну так то любой может сделать, что тут сложного?
Visual Basic
1
2
3
4
5
6
7
8
9
10
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Const LB_GETCOUNT = &H18B
Private Sub Form_Load()
Dim i As Long
    For i = 1 To 35000
       List1.AddItem "Count" & i
   Next
   MsgBox SendMessage(List1.hwnd, LB_GETCOUNT, 0, 0&)
End Sub
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
27.01.2016, 08:10  [ТС]
спасибо.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
27.01.2016, 10:43
Это потому что количество элементов это беззнаковое число, а VB6, поэтому можно обойтись без API:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit
Private Sub Form_Load()
    Dim i As Long
    For i = 1 To 47000
       List1.AddItem "Count" & i
    Next
    
    MsgBox ToUshort(List1.ListCount)
End Sub
 
Private Function ToUshort(ByVal v As Integer) As Long
    If v >= 0 Then
        ToUshort = v
    Else
        ToUshort = 65536 + v
    End If
End Function
3
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
27.01.2016, 16:14  [ТС]
Лучший ответ Сообщение было отмечено Pro_grammer как решение

Решение

Простите а как в данном случае обратится (прочитать, изменить, установить новое значение) элемента списка, если его порядковый номер больше 32767?

Добавлено через 3 часа 38 минут
После недолго исследования, вопрос решен следующим образом...

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long
Const LB_GETCOUNT = &H18B
Const LB_GETTEXT = &H189
Const LB_GETTEXTLEN = &H18A
 
Private Sub Form_Load()
    
    Dim count As Long
    Dim itemtext As String
    Dim textlen As Long
    
        For i = 1 To 35000
            List1.AddItem "Count" & i
        Next
    
    count = SendMessage(List1.hWnd, LB_GETCOUNT, ByVal CLng(0), ByVal CLng(0))
    textlen = SendMessage(List1.hWnd, LB_GETTEXTLEN, ByVal 34999, ByVal CLng(0))
    itemtext = Space(textlen) & vbNullChar
    textlen = SendMessage(List1.hWnd, LB_GETTEXT, ByVal 34999, ByVal itemtext)
    itemtext = Left(itemtext, textlen)
    
  Debug.Print "count     = " & count
  Debug.Print "itemtext  = " & itemtext
    
End Sub
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
27.01.2016, 16:22
а вот так ..

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Form_Load()
    Dim i As Long
    For i = 1 To 47000
       List1.AddItem "Count" & i
    Next
    
    MsgBox ToUshort(List1.ListCount)
    
    With List1
        .Text = "Count" & 40000 - 1
        MsgBox ToUshort(.ListIndex) 'Текущий индекс
    End With
    
End Sub
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.01.2016, 21:56
List1.List( -32768 ... -2 ) выдает Out of Memory. Так что дальше только через WinAPI.
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
28.01.2016, 11:05  [ТС]
коллеги а где вообще искать значение констант?
В частности не могу наяти значение для LB_SETITEMDATA

Добавлено через 1 час 57 минут
я ошибся, думая что с помощью LB_SETITEMDATA можно изменить значение списка.
последний вопрос остался открытым. как изменить значение списка через API
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.01.2016, 11:41
Цитата Сообщение от kreotodr Посмотреть сообщение
как изменить значение списка через API
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Const LB_GETCOUNT = &H18B
Const LB_ADDSTRING = 384
Const LB_INSERTSTRING = 385
 
Private Sub Form_Load()
Dim i As Long
    For i = 1 To 35000
       List1.AddItem "Count" & i
   Next
   SendMessage List1.hwnd, LB_ADDSTRING, 0, "Neuer Item 35001" ' в конец
   SendMessage List1.hwnd, LB_INSERTSTRING, 2, "Neuer Item 3" ' куда надо, считая с 0
   MsgBox SendMessage(List1.hwnd, LB_GETCOUNT, 0, 0&)
End Sub
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
28.01.2016, 11:47
Вы точно чтото не то делаете, вам же говорили не надо этого делать
тоесть никому это не пригодиться в практике более 1000 элементов в списке
Pro_grammer, вы уж .. будьте верны своему слову
1
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.01.2016, 11:50
И предполагая следующий вопрос
Visual Basic
1
2
Const LB_DELETESTRING = 386
SendMessage List1.hwnd, LB_DELETESTRING, 2, 0& ' Удаляет запись номер 2, считая с 0
1
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
28.01.2016, 11:51
Я тоже ща.. буду качать ногой 1000 раз, а потом скажу... чёт я не могу уже качать больше 1000 раз ..
наверное тут чтото случилось с техникой.. а давайте разбераться ..
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.01.2016, 11:55
Цитата Сообщение от fever brain Посмотреть сообщение
Pro_grammer, вы уж .. будьте верны своему слову
Тут вот в чем дело. ListBox хороший контрол в плане хранения информации, его можно использовать в качестве примитивной базы данных. Тут есть механизм сортировки, быстрого поиска, добавления и изменения информации и работает это дело очень быстро - все данные в памяти, не гоняются с диска, один раз загрузил и всё.
Т.е. юзер может и не видеть его на форме, но программа может с ним работать. Я однажды сам использовал этот прием в своей проге.
1
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
28.01.2016, 12:15
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Я однажды сам использовал этот прием в своей прог
Я тоже однажды использовал, но вообщето это не для того чтобы использовать для таких именно дел
тут вот попытались вскользь сказать что именно тип хранения просто не позволяет хранить данные
TheTrick показал (что я тоже знал) что иногда можно в 2 раза расширить использования значений
так-как Integer именно от -32767 до +32767 , а этот .. вдруг надо ему еще больше ..

я и ответил ..

Добавлено через 8 минут
Pro_grammer, почему лучший ответ стоит в этом посте №5 https://www.cyberforum.ru/post8675274.html

ведь это пост автора .. ??
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.01.2016, 13:22
Цитата Сообщение от fever brain Посмотреть сообщение
ведь это пост автора .. ??
Ну если он его использовал
Цитата Сообщение от kreotodr Посмотреть сообщение
После недолго исследования, вопрос решен следующим образом...
значит для него это и есть ответ. Там не написано лучший, это просто ответ на его вопрос.
Хотя этот ответ на 90% из моего кода, но из природной скромности отдаю лавры ТС.
1
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
28.01.2016, 13:31  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
LB_DELETESTRING = 386
откройте секрет. где вы находите значение констант?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.01.2016, 13:43
Цитата Сообщение от kreotodr Посмотреть сообщение
значение констант?
Для этого есть заголовочные файлы ( header'ы) для VС++, описания в MSDN
Почти все декларации WIN API + все константы в этом архиве:
Вложения
Тип файла: zip API Data.zip (1.70 Мб, 18 просмотров)
1
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
28.01.2016, 13:55
Поставь New API Viewer 1.0.3 by David Ross Goben.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.01.2016, 13:55
Помогаю со студенческими работами здесь

Реализовать удаление листьев с отрицательными значениями
Program siaod_lab2; uses crt; const TAB = chr(9); type Tree = ^Node; Node = record data: integer; left:...

Заполнить массив дробными и отрицательными значениями
Program Primer2; uses crt; const a: array of char=('a','b','c','d','e'); procedure Print(n: integer); var i: integer; begin ...

Подсчитать количество элементов с отрицательными значениями
Подсчитать количество элементов массива с отрицательными значениями.

Дополнить макрос мигания ячеек с отрицательными значениями
вместо ячейки А1 нужно написать функцию для выделенных ячеек с отрицательными элементами, например , дана таблица с положительными и...

Возможно ли задать переменную-диапазон с отрицательными значениями?
Добрый день. Решил поближе узнать про переменную-диапазон и наткнулся на такую проблему: Возможно ли вообще такое задание? Мне нужно,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru