Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.04.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
AIK ©   (2009-03-10 08:48) [0]

Здравствуйте Уважаемые.
Не могу понять принцип ошибки «обращения к запрещенной памяти» в данном случае:

procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
 Selected: Boolean);
var
 Nom: String;
begin
BEGIN
 nom:= ListView1.Items[ListView1.ItemIndex].Caption;

 If nom="0" then
     Button1.Enabled:= true else
     Button1.Enabled:= false;
END;
end;


Код я уже подправил:

...
If ListView1.SelCount > 0 then
BEGIN

 nom:= ListView1.Items[ListView1.ItemIndex].Caption;
...


Но почему первый вариант выдает ошибку? Ведь итемы ListView’a уже заранее созданы да и ошибка вылетает только со второго клика.


 
Palladin ©   (2009-03-10 08:51) [1]

Какого фига ты лезешь в ItemIndex? нужный пункт тебе в параметрах передается. И если он был выделен то selected=true, если с него только что сняли отметку о выделении то selected=false


 
AIK ©   (2009-03-10 09:07) [2]


> нужный пункт тебе в параметрах передается


Так в ItemIndex он и передается


 
AIK ©   (2009-03-10 09:11) [3]

Может я тебя неправильно понял но вариант:
...
nom:= ListView1.Selected.Caption;
...
тоже самое.


 
Palladin ©   (2009-03-10 09:13) [4]


> Так в ItemIndex он и передается

да что ты говоришь, это тебе приснилось сегодня? или откуда ты это узнал? убеждения?


> AIK ©   (10.03.09 09:11) [3]

я с тебя фигею. ты на параметры события вообще смотрел хоть раз в жизни? Item это что по твоему?


 
brother ©   (2009-03-10 09:21) [5]

> procedure TForm1.ListView1SelectItem(Sender: TObject; Item:
> TListItem;

> Selected: Boolean);

это про [1]


 
korneley ©   (2009-03-10 09:22) [6]


> AIK ©   (10.03.09 09:07) [2]
> > нужный пункт тебе в параметрах передаетсяТак в ItemIndex
> он и передается

Ага, только сначала в ИтемИндекс -1 приходит, на которое ты никаких проверок не поставил.

>  If nom="0" then      Button1.Enabled:= true else      Button1.
> Enabled:= false;

А чего не Button1.Enabled := nom = "0";?


 
Palladin ©   (2009-03-10 09:25) [7]


> korneley ©   (10.03.09 09:22) [6]

не только сначала, но и при уведомлении о снятии выделения


 
AIK ©   (2009-03-10 09:26) [8]


> > Так в ItemIndex он и передаетсяда что ты говоришь, это
> тебе приснилось сегодня? или откуда ты это узнал? убеждения?
>


Да я ступил :о)


>  Item это что по твоему?

Это поле.


 
korneley ©   (2009-03-10 09:29) [9]


> Palladin ©   (10.03.09 09:25) [7]

Дык, понятно... Ну хочет человек через... ItemIndex делать, пусть. Его проблемы. Но проверить-то индекс на валидность надо :)


 
Сергей М. ©   (2009-03-10 09:30) [10]


> AIK ©   (10.03.09 09:26) [8]


> Это поле


"Поле" по-непорусски - это "Field".
Где в объявлении формального параметра Item ты видишь слово "Field" ?


 
Palladin ©   (2009-03-10 09:33) [11]


> korneley ©   (10.03.09 09:29) [9]

боюсь тебя разочаровать, но ItemIndex отнюдь не тот элемент который был выделен


 
AIK ©   (2009-03-10 09:38) [12]


> А чего не Button1.Enabled := nom = "0";?


Да хоть  Button1.caption:="абвгд";

Меня интересовала суть ошибки
Может я опять туплю но вот я выбираю одно из полей ListView1 Item"у присваивается соответствующий номер поля и я вытаскиваю Caption из этого поля  ListView1.Items[ListView1.ItemIndex].Caption ( пусть даже если  ListView1.Selected.Caption, а тут вылетает ошибка типа обращаюсь туда где ничего нет, всеголиш хотелось понять почему?


 
korneley ©   (2009-03-10 09:39) [13]


> Palladin ©   (10.03.09 09:33) [11]
>боюсь тебя разочаровать, но ItemIndex отнюдь не тот элемент
> который был выделен

Не, не разочаруешь. Я же не спорю. ;) Я по поводу откуда у автора AV нарисовалось :))) А уж то он там анализирует, не то, ему уже в [1] показали.
 Да, автор, в [3] Selected запросто nil может оказаться. Будет AV номер два.


 
AIK ©   (2009-03-10 09:40) [14]


> ... ( пусть даже если  ListView1.Selected.Caption)...


:)


 
Palladin ©   (2009-03-10 09:46) [15]


> вот я выбираю одно из полей ListView1 Item"у присваивается
> соответствующий номер поля

фантазии фантазии... они редко пересекаются с реальностю... Item"у ничего не присваивается, Item и есть тот Item который реально существует.... кажется я тебе доходчиво еще в [1] обяснил, что означает параметр selected... думани логически, что произойдет если selected будет false ?


> Может я опять туплю

"Может" - лишнее


 
AIK ©   (2009-03-10 09:53) [16]


> Palladin ©   (10.03.09 09:46) [15]


Нутоесть типа создал несколько полей и у каждого свой итем чтоли?


 
Palladin ©   (2009-03-10 09:56) [17]

я в шоке от тебя :) коллекция TListView.Items[]:TListItem - это что? фикция? так вот на событие TListView.OnSelectItem передается объект Item:TListItem из этой коллекции... неужели это так трудно понять?


 
Palladin ©   (2009-03-10 10:07) [18]

Хм, а ты вообще о каких таких полях говоришь?


 
AIK ©   (2009-03-10 10:28) [19]


> Хм, а ты вообще о каких таких полях говоришь?


Строчки в у ListView"а


 
Palladin ©   (2009-03-10 10:29) [20]

В этом случае все вышесказаное мной справедливо.


 
AIK ©   (2009-03-10 10:42) [21]


> Palladin ©   (10.03.09 10:29) [20]
> В этом случае все вышесказаное мной справедливо.


Полностью с вами согласен, а можно спросить почему в данном случаи вылетает ошибка?


 
Palladin ©   (2009-03-10 10:57) [22]

Объясняю на пальцах, еще раз. Событие OnItemSelect, как видно из справки, возбуждается в случае выделении элемента, а так же и при снятии отметки о выделении, что же произошло, нам рассказывает параметр Selected, если отметка была снята, как по твоему, в какие места будет указывать ListView1.Selected ? Правильно, туда где не светит солнце.


 
AIK ©   (2009-03-10 11:15) [23]


> Palladin ©   (10.03.09 10:57) [22]


Ууу... теперь понял. Спасибо



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

Форум: "Начинающим";
Текущий архив: 2009.04.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
15-1235597402
Юрий
2009-02-26 00:30
2009.04.26
С днем рождения ! 26 февраля 2009 четверг


4-1208500714
Leon.iD
2008-04-18 10:38
2009.04.26
запуск DLL из памяти


2-1236634530
Дмитрий Белькевич
2009-03-10 00:35
2009.04.26
Как правильнее закрывать приложение? App.Terminate или Close


2-1236670123
vat
2009-03-10 10:28
2009.04.26
как заставить OpenDialog выделять папку


15-1235497716
NoDt
2009-02-24 20:48
2009.04.26
Вопрос о wi-fi маршрутизаторах.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский