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

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

События происходят дважды. Это нормально? [D7, WinXP]


ZemA ©   (2004-09-02 12:32:00) 

Всем добрый день.
Как вы считаете, мастера, когда события OnChange, OnChanging у TListView происходят дважды это нормально?
Вернее: OnChanging, OnChange, OnChanging, OnChange.


ZemA   (2004-09-02 14:49:00) [1]

18] следует читать так.

>Анонимщик ©   (02.09.04 14:12) [17]
события генерирую я, выбирая элементы.

Digitman ©   (02.09.04 14:10) [16]
правильно!
 выделяется 1TListItem.
1. changing. not 1Item.selected, not 1Item.focused.
2. change.   1Item.selected, 1Item.focused.

 1TListItem теряет фокус.
3. changing. 1Item.selected, 1Item.focused.
4. change.   1Item.selected, not 1Item.focused.
5. changing. 1Item.selected, not 1Item.focused.
6. change.   not 1Item.selected, not 1Item.focused.

 выделяется 2TListItem.
7. changing. not 2Item.selected, not 2Item.focused.
8. change.   2Item.selected, 2Item.focused.

А я все думаю "жалко что у State нет focused, selected", совсем забыл это все у TListItem есть. Перетрудился видно.

ВСЕМ СПАСИБО.


ZemA   (2004-09-02 14:35:00) [2]

>Анонимщик ©   (02.09.04 14:12) [17]
события генерирую я выбирая элементы

> ZemA   (02.09.04 13:58) [12]
  выделяется 1TListItem.
1. changing. not 1Item.selected, not 1Item.focused.
2. change.   1Item.selected, 1Item.focused.

  1TListItem теряет фокус.
3. changing. 1Item.selected, 1Item.focused.
4. change.   1Item.selected, not 1Item.focused.
5. changing. 1Item.selected, not 1Item.focused.
6. change.   not 1Item.selected, not 1Item.focused.

  выделяется 2TListItem.
7. changing. not 2Item.selected, not 2Item.focused.
8. change.   2Item.selected, 2Item.focused.

А я все думаю "жалко что у State нет focused, selected", совсем забыл это все у TListItem есть. Перетрудился видно.

ВСЕМ СПАСИБО.


Анонимщик   (2004-09-02 14:12:00) [3]

Да ты посмотри, какие именно причины вызывают генерацию событий.


Digitman   (2004-09-02 14:10:00) [4]


> ZemA   (02.09.04 13:58) [12]


да State же элементов меняются !

сфокусирован/несфокусирован,  выбран/не выбран и т.п.


ZemA   (2004-09-02 14:10:00) [5]

можно сделать так

var XItem: TListItem;

procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem;
 Change: TItemChange);
begin
 if Item = XItem then exit;
 ..........................
 XItem := Item;
end;


но считаю то что событие генерится 2 раза это неправильно.


ZemA   (2004-09-02 14:07:00) [6]

> Анонимщик © (02.09.04 14:00) [13]

результат в [4]


Анонимщик   (2004-09-02 14:00:00) [7]

На точке останова:
View->Debug Windows->CallStack


ZemA   (2004-09-02 13:58:00) [8]

Неужели у вас у всех события не дублируются???


ZemA   (2004-09-02 13:16:00) [9]

всем. ради эксперимента попробуйте.

procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem;
 Change: TItemChange);
begin
 messagebox('LV change '+Item.Caption);
end;

procedure TForm1.ListView1Changing(Sender: TObject; Item: TListItem;
 Change: TItemChange; var AllowChange: Boolean);
begin
 messagebox('LV changing '+Item.Caption);
end;


ZemA   (2004-09-02 13:13:00) [10]

Digitman ©   (02.09.04 13:11) [9]

Change = ctState


Digitman   (2004-09-02 13:11:00) [11]


> ZemA   (02.09.04 13:08) [8]


а параметр Change ? анализировал ?


ZemA   (2004-09-02 13:08:00) [12]

Digitman ©   (02.09.04 13:02) [6]
я смотрел. результат в ZemA   (02.09.04 12:51) [4]


ZemA   (2004-09-02 13:05:00) [13]

> Анонимщик ©   (02.09.04 12:56) [5]
как это сделать?


Digitman   (2004-09-02 13:02:00) [14]


> ZemA


ты действуешь по принципу чукчи, объезжающего просторы родной тундры - "что вижу - то и пою"

а ты возьми лупу (отладчик) да посмотри gjdybvfntkmytq, на какой ListItem при вызове того или иного обработчика в тот или иной раз ссылается параметр Item !


Анонимщик   (2004-09-02 12:56:00) [15]

ZemA
А давай так: протрассируешь грамотно, с заглядыванием в стек вызовов, и нам расскажешь.


ZemA   (2004-09-02 12:51:00) [16]

> да, это нормально
> каждая пара событий возбуждается для своего ListItem - один ListItem, например, теряет фокус, другой получает

неа.
- выделяю 1ListItem - 1OnChanging, 1OnChange, 1OnChanging.
- 1ListItem теряет фокус, получает 2ListItem.
- 1OnChanging, 1OnChange, 1OnChanging, 1OnChange, 2OnChanging, 2OnChange, 2OnChanging.

ПОЧЕМУ???


Digitman   (2004-09-02 12:36:00) [17]


> это нормально?


да, это нормально

каждая пара событий возбуждается для своего ListItem - один ListItem, например, теряет фокус, другой получает


Ega23   (2004-09-02 12:35:00) [18]

Критерий нормальности?

Эта... Пеньпеньдикуляр к поверхности...


Алхимик   (2004-09-02 12:34:00) [19]

Критерий нормальности?


Наверх

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