Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.27;
Скачать: CL | DM;

Вниз

ComboBox   Найти похожие ветки 

 
Alex8   (2008-04-01 12:31) [0]

Уважаемые мастера !
Помогите, пожалуйста, разобраться в следующей ситуации.
 Выпадающий список компонента 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 - не останавливается.
я в полной растеряности. Спасибо


 
tesseract ©   (2008-04-01 12:33) [1]


> Список которого формируется в процедуре FormActivate().


Используй FormShow или FormCreate. Activate тебе задолбает.


> " 65536 is not a valid value for field "iKod".  The allowed
> range is -32768 to 32767"


Поле Smallint у тебя наверно с адской скоростью заполняеться..


 
Сергей М. ©   (2008-04-01 12:35) [2]


> ComboBox формируется при
> открытии формы в процедуре FormActivate()


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


 
Reindeer Moss Eater ©   (2008-04-01 12:35) [3]

65536 это -1 по-русски.
точнее -1 это 65536, которое не влазит в смалинт.


 
Сергей М. ©   (2008-04-01 12:38) [4]


> tesseract ©   (01.04.08 12:33) [1]



> Используй FormShow


При бездумном использовании хрен редьки не слаще будет)


 
Alex8   (2008-04-01 13:01) [5]

> Используй FormShow или FormCreate. Activate тебе задолбает.

FormShow дает тот же результат.
FormCreate, как я и опасался, показал, что список формируется
               раньше создания самого ComboBox

> При бездумном использовании хрен редьки не слаще будет
 Так, что сделать, если подумать? Не добавлять же кнопку создания
списка.


 
oldman ©   (2008-04-01 13:03) [6]


> Выпадающий список компонента ComboBox формируется при
> открытии формы в процедуре FormActivate()


ЗАЧЕМ??????????


 
{RASkov} ©   (2008-04-01 13:05) [7]

> [5] Alex8   (01.04.08 13:01)

Какие обработчики задействованы у данного комбобокса? Возможно в них ошибка, раз говоришь наполнение проходит нормально и уже при раскрытии и "не правильном" закрытии - ошибка.


 
Сергей М. ©   (2008-04-01 13:06) [8]


> FormCreate, как я и опасался, показал, что список формируется
> раньше создания самого ComboBox


Момент формирования списка тебе полностью подконтролен.


> Не добавлять же кнопку создания
> списка


Конечно, не не нужна она.
Такая кнопка уже есть - кнопка открытия выпадающего списка комбобокса, при нажатии на которую возбуждается событие OnDropDown


 
Reindeer Moss Eater ©   (2008-04-01 13:08) [9]

проблема-то не в событиях, а в том, что в поле смалинт попадает itemindex при уходе с комбо. а это -1.


 
{RASkov} ©   (2008-04-01 13:18) [10]

> [9] Reindeer Moss Eater ©   (01.04.08 13:08)
> проблема-то не в событиях, а в том, что в поле смалинт попадает
> itemindex при уходе с комбо. а это -1

В каком поле? :) У Комбобокса полей как таковых нет)
Это понятно что -1 кудато попадает, но где это может попадать? В реализации обработчиков событий комбика)...


 
tesseract ©   (2008-04-01 13:21) [11]


> а в том, что в поле смалинт попадает itemindex при уходе
> с комбо. а это -1.


Smallint не понимает -1, может word  ? Возможно только если одно значение знаковое (iKOD), а другое не очень. И  только если в беззнаковое предварительно попадёт -1, а потом будет приравнено к знаковому


> 65536 это -1 по-русски.


Только для word справедливо.


 
Reindeer Moss Eater ©   (2008-04-01 13:22) [12]

Я имею ввиду что нет разницы для текущей проблемы в каком обработчике формы он заполняет список.


 
{RASkov} ©   (2008-04-01 13:23) [13]

> [12] Reindeer Moss Eater ©   (01.04.08 13:22)

Вот и я о том же :)
Но замечания по тем местам нужно принять автору к свединию)


 
tesseract ©   (2008-04-01 13:28) [14]


> Это понятно что -1 кудато попадает, но где это может попадать?
>  


-1 Это ItemIdex combobox-а, когда в нём не выбрано значение. Если перезаполнять ComBobox по  FormActivate - оно там сбрасываться будет регулярно.


> Я имею ввиду что нет разницы для текущей проблемы


Как видишь есть, но без кода всё равно не вычислишь, где там чего.


 
Anatoly Podgoretsky ©   (2008-04-01 13:57) [15]


> Я имею ввиду что нет разницы для текущей проблемы в каком
> обработчике формы он заполняет список.

Есть и OnShow и OnActivate могут вызываться не один раз.


 
Reindeer Moss Eater ©   (2008-04-01 14:00) [16]

Ну в общем да.
Если при уходе с комбо будет OnActivate, то можно нарваться.


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

> {RASkov} [7]
> Какие обработчики задействованы у данного комбобокса?

У данного комбобокса задействован только onCloseup

>Сергей М. [8]
OnDropDown тоже не помогает. Результат тот же.
Да и отдельная кнопка (проверил на всякий случай)
   не решает проблемы.

А рассуждения по поводу ItemIndex=-1 распространяться
 на все ComboBox, а у меня остальные работают нормально.


 
Сергей М. ©   (2008-04-01 14:03) [18]


> OnDropDown тоже не помогает. Результат тот же.
> Да и отдельная кнопка (проверил на всякий случай)
>    не решает проблемы.


Тогда тряси бубен)

Или код выкладывай)


 
Плохиш ©   (2008-04-01 14:08) [19]

А мой телепатор подсказывает, что ошибка у аФтара в днк.


 
Reindeer Moss Eater ©   (2008-04-01 14:18) [20]

А рассуждения по поводу ItemIndex=-1 распространяться
на все ComboBox, а у меня остальные работают нормально.


А тип полей которые они редактируют?


 
Alex8   (2008-04-01 14:46) [21]

> А тип полей которые они редактируют?
Short и Alpha (БД- PARADOX)

> Тогда тряси бубен  Или код выкладывай

procedure TfrmPoisk.FormActivate(Sender: TObject);
Var r1: String;
    i: Word;
begin
 frmNm := Trim(TForm(pFrm1).Name);//Фильтрация (только ParentForm)

 // Определяем файл поиска
 If pFrm1.Name="FrmTiz" Then pTb1 := MDMyBook.Tiz;
 If pFrm1.Name="FrmTmt" Then pTb1 := MDMyBook.Tmt;
 If pFrm1.Name="frmPsb" Then pTb1 := MDMyBook.TPsb;
  // Подготовка
 cmbRkv.Clear;
 cmbRkv.Text := "";
 cmbVal.Clear;
 cmbVal.Text := "";
 cmbValDop.Visible := False;
 cmbValDop.Text:="";
 cmbValDop.Clear;

 //Формируем Item для cmbRkv  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 MDMyBook.TPoisk.Filtered := True;
 MDMyBook.TPoisk.Filter := "CFrm =""" + frmNm +"""";
 MDMyBook.TPoisk.First;
 For i:= 0 to MDMyBook.TPoisk.RecordCount-1 Do
  begin
    r1 := MDMyBook.TPoisk.FieldByName("Rkv").AsString;
    cmbRkv.Items.Add(r1);
    MDMyBook.TPoisk.Next;
  end;
 MDMyBook.TPoisk.Filtered := False; //>>>>>>>>>>>>>>>>>>>>>>>>
end;


 
tesseract ©   (2008-04-01 14:51) [22]

Вообще неплохо бы onChange ComboBox-а привести, а не это.


 
Alex8   (2008-04-01 14:57) [23]

> Вообще неплохо бы onChange ComboBox-а привести, а не это.

Так onChange ComboBox пустой.
У данного комбобокса задействован только onCloseup


 
Сергей М. ©   (2008-04-01 15:07) [24]


> Alex8   (01.04.08 14:46) [21]


Ошибка не в этом коде.


 
Alex8   (2008-04-01 15:16) [25]

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


 
Сергей М. ©   (2008-04-01 15:27) [26]


> По onClick не останавливается


Еще раз - OnClick какого конкретно объекта ?


 
Alex8   (2008-04-01 15:31) [27]

> Еще раз - OnClick какого конкретно объекта ?
Формы.
Исключение возникает при клике по форме.


 
Сергей М. ©   (2008-04-01 15:37) [28]

А при старте приложения какой контрол на какой форме у тебя автоматически получает фокус ?


 
Семеныч   (2008-04-01 15:37) [29]

> Alex8

> если после раскрытия списка кликнуть в любом
> пустом месте формы (вне списка), то взникает исключение

> У данного комбобокса задействован только onCloseup

> Исключение возникает при клике по форме.

При клике по форме закрывается список комбобокса и возникает этот самый OnCloseUp. Какие отсюда выводы?


 
Сергей М. ©   (2008-04-01 15:44) [30]


> Какие отсюда выводы?


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


 
Семеныч   (2008-04-01 16:08) [31]

> Сергей М. ©   (01.04.08 15:44) [30]

Отсюда следует и еще один вывод - если при закрытии списка вылезает какая-то ошибка, то неплохо было видеть код обработчика OnCloseUp.

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


 
{RASkov} ©   (2008-04-01 16:29) [32]

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

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


 
{RASkov} ©   (2008-04-01 16:31) [33]

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

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


 
tesseract ©   (2008-04-01 16:36) [34]


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


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


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

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

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


 
Anatoly Podgoretsky ©   (2008-04-01 17:33) [36]

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

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


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

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


 
{RASkov} ©   (2008-04-01 18:13) [38]

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

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


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

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

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


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


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

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



Страницы: 1 2 вся ветка

Текущий архив: 2008.04.27;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.019 c
11-1173843627
ryslan56
2007-03-14 06:40
2008.04.27
Не работают библиотеки


11-1188050116
Andrey_rus
2007-08-25 17:55
2008.04.27
TKOLRichEdit & RE_InsertRTF


2-1207054711
asdf2
2008-04-01 16:58
2008.04.27
Не получается сделать запрос IB6.5


2-1206943796
Kolan
2008-03-31 10:09
2008.04.27
Что значит константа 7 в WMDEVICECHANGE?


15-1205341451
Пробегал2...
2008-03-12 20:04
2008.04.27
out/var vs Pointer ;)