Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ComboBox


Страницы:   1 2 3

Alex8 ©   (2008-04-01 12:31:00) 

Уважаемые мастера !
Помогите, пожалуйста, разобраться в следующей ситуации.
 Выпадающий список компонента ComboBox формируется при
открытии формы в процедуре FormActivate() Посредством
cmb.Item.Add();
  Дальше. Если мои действия стандартны (т.е. кликаю
кнопку списка, а затем выбираю одну из его позиций),
то все нормально.
  А вот если после раскрытия списка кликнуть в любом
пустом месте формы (вне списка), то взникает исключение
непонятно к чему относящееся.
  Текст сообщения следующий:
" 65536 is not a valid value for field 'iKod'.
 The allowed range is -32768 to 32767"

 При этом все это происходит только с тем ComboBox'ом,
Список которого формируется в процедуре FormActivate().
Остальные ComboBox этой формы работают нормально.
Кликай где угодно-никаких исключений.
 Пробовал остановиться по событию OnClick - не останавливается.
я в полной растеряности. Спасибо


Сергей М.   (2008-04-02 21:01:00) [1]


>  iKod - фактически № записи, определяемый своим
> положением в исходном файле


Какой еще нафих "исходный файл" ?
Нет никакого файла.
Есть НД, ты запрашиваешь его RecordCount, который заведомоinteger.
Ты его с какого-то перепугу усекаешь до word. Вопрос - с какого конкретно перепугу ?)


Alex8   (2008-04-02 17:57:00) [2]

> Причем здесь i ? [49]
> Сергей М. ©   (01.04.08 15:44) [30]

> А выводы отсюда давным давно озвучены в [3] и [9] : -1,
> пройдя какие-то несуразные приведения типа к Cardinal и
> получив при этом значение 65536, тычется в поле iKod, имеющее
> тип Smallint

  Я что-то запутался.  iKod - фактически № записи, определяемый своим
положением в исходном файле. Поэтому i и iKod  величины одного порядка.
И если iKod (i) превосходят допустимые границы типа Smallint,
то сделав LongInt, я эти границы расширю.


Сергей М.   (2008-04-02 17:31:00) [3]


> При большом числе записей я сделаю
>   iне SmallInt, а LongInt.
>


Причем здесь i?

Да и какой тайный смысл объявлять сч-к цикла разрядностью меньшей, чем разрядность значения, возвращаемого св-вом RecordCount и ItemIndex ?


Alex8   (2008-04-02 17:21:00) [4]

> Это вопрос кол-ва записей
При большом числе записей я сделаю
  i не SmallInt, а LongInt.


Сергей М.   (2008-04-02 15:16:00) [5]


> это уже вопрос выбора типа данных


Да нихрена это не вопрос выбора типа данных)

Это вопрос кол-ва записей в НД, по которому ты проходишь в цикле с целью заполнения своего комбобокса.


Alex8   (2008-04-02 14:52:00) [6]

> Если у тебя в списке более 32767

Ну, это уже вопрос выбора типа данных.
Фактор размерности, конечно, надо учитывать.
И не только при работе с ComboBox.


Сергей М.   (2008-04-02 12:08:00) [7]


> Этот обработчик
> начинает работы только при допустимых значениях ItemIndex
> Правильно?


Нет, не правильно.
Если у тебя в списке более 32767 элементов и ты щелкнул , например, на 32768-м, то ItemIndex в обработчике события вернет тебе именно 32768, в то время как соотв.поле НД у тебя имея тип SmallInt допускает значения в диапазоне -32768..32767, что, разумеется, вызовет проблемы.


Alex8   (2008-04-02 11:52:00) [8]

> Есть же событие OnSelect !
> В его обработчике и следует обращаться к ItemIndex.

 Очень ценная мысль! Зачем onClozeUp-лишние хлопоты.
При OnSelect никаких блокировок не нужно. Этот обработчик
начинает работы только при допустимых значениях ItemIndex
Правильно?
Спасибо. Обязательно воспользуюсь.


Сергей М.   (2008-04-02 10:39:00) [9]


> Alex8   (01.04.08 19:41) [41]


ССЗБ.

Есть же событие OnSelect !
В его обработчике и следует обращаться к ItemIndex.


{RASkov}   (2008-04-01 20:19:00) [10]

> Ну что мне землю есть?

Вот ведь не везет людям :(
:)


Alex8   (2008-04-01 19:41:00) [11]

> Врешь. Сам по себе temIndex не может получить такое значение.

 Ну что мне землю есть?
Прверил все в пошаговом режиме.


Германн   (2008-04-01 19:26:00) [12]


> Alex8   (01.04.08 19:15) [39]
>
> > Хоть раз уидешь 65536?
>
>  В рассматриваемом случае ItemIndex=65536.

Врешь. Сам по себе temIndex не может получить такое значение.


Alex8   (2008-04-01 19:15:00) [13]

> Хоть раз уидешь 65536?

 В рассматриваемом случае ItemIndex=65536. Причем не только
в ComboBox, где возникло исключение, но и в других при клике
снаружи. А есть исключение или нет, это уже зависит от содержания
обработчика OnCloseUp.


{RASkov}   (2008-04-01 18:13:00) [14]

> Только когда клик внутри ItemIndex=-1,
> а клик снаружи ItemIndex=65536....
> Правильно?

Нет :)
Поставь строку в самое начало OnCloseUp следующую:
ShowMessage(IntToStr(ComboBox.ItemIndex));
И скажи: Хоть раз уидешь 65536?


Alex8   (2008-04-01 17:52:00) [15]

Я тут немного отлучился, а вернувшись с интересом и благодарностью ознакомился с прошедшей беседой. Как будто все прояснилось
 Все действительно упирается в OnCloseUp, где у меня предусмотрена
блокировка на ItemIndex=-1, но не блокирован вариант ItemIndex=65536.
Я просто упустил из виду, что при клике по форме список все равно убирается, а потому OnCloseUp. Только когда клик внутри ItemIndex=-1,
а клик снаружи ItemIndex=65536. Значит надо блокировать оба значения.
Правильно?  Хороший урок на будущее.
 Большое спасибо всем, принявшим участие в обсуждении.


Anatoly Podgoretsky   (2008-04-01 17:33:00) [16]

> {RASkov}  (01.04.2008 16:29:32)  [32]

После такого количество сообщений, не так уж и хочется его видеть.


Семеныч   (2008-04-01 16:37:00) [17]

> {RASkov} ©   (01.04.08 16:31) [33]

Потому что отвечающим уже все ясно...
:о)


tesseract   (2008-04-01 16:36:00) [18]


> Ошибка-то ведь в нем, скорее всего. Похоже, что именно там
> пытаются что-то запихнуть в поле iKod, а в комбобоксе в
> этот момент ничего не выбрано.


Я это уже вроде как сказал. И сказал чего его сбрасывает.


{RASkov}   (2008-04-01 16:31:00) [19]

> иначе долго можно гадать...

и как не страно, гадают не отвечающие в данной ветке, а вопрошающий :)


{RASkov}   (2008-04-01 16:29:00) [20]

> [17] Alex8   (01.04.08 14:00)
> > {RASkov} [7]
> > Какие обработчики задействованы у данного комбобокса?
>
> У данного комбобокса задействован только onCloseup

Ну вот и покажи его... иначе долго можно гадать...


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо