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

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

выделение в TListView [D7, XP]


Страницы:   1 2

Darvin ©   (2007-08-09 09:41:00) 

Здравствуйте. У меня есть компонет TListView в виде таблицы, причем у него стоит RowSelect = true. Мне нужно программно, а не щелчком мышки, выделить строку. Я для этого делаю следующее:
1) lvFactors.Items[0].Selected := true;
или
2) lvFactors.Selected := lvFactors.Items[0];
но строка визуально не  подсвечивается так, как это было бы при выделении ее мышкой.
Как правильно выделить строку?


Darvin   (2007-08-09 14:03:00) [1]

Спасибо всем!
Я понял из общения, что проблема не в данной процедуре, а где-то в другом месте. Буду искать.


Sonia   (2007-08-09 14:02:00) [2]

Я думаю, вам стоит пошагово выполнить кусок, на который вам указывает народ. Вам самому надо проявить инициативу, за вас проблему никто не сможет решить :)


Darvin   (2007-08-09 14:00:00) [3]

>Единственное я не прослеживал операторные скобки в [23], может и всамом деле [25] - т.е. не поподает?
Я ставил внутри Beep - попадает


{RASkov}   (2007-08-09 13:53:00) [4]

> [28] Darvin ©   (09.08.07 13:46)

Не верю, что вот так не выделит:
 if lvFactors.Items.Count > 0 then begin
  lvFactors.ItemIndex := 0;
  lvFactors.SetFocus;
 end;

Единственное я не прослеживал операторные скобки в [23], может и всамом деле [25] - т.е. не поподает?
if FFactors.Count > 0 then begin


Loginov Dmitry   (2007-08-09 13:48:00) [5]


> Делал по разному внутри этого кода:


Почитай, о чем тебе пишут в этой ветке. Глядишь - поможет!


Darvin   (2007-08-09 13:46:00) [6]

>{RASkov} ©   (09.08.07 13:40) [27]
Комментирование этой процедуры эффекта не дает


{RASkov}   (2007-08-09 13:40:00) [7]

> [26] Darvin ©   (09.08.07 13:36)
> ShowDynamic;

Что там делается?


Darvin   (2007-08-09 13:36:00) [8]

Делал по разному внутри этого кода:

    // Выделить первую строчку
    if lvFactors.Items.Count > 0 then begin
       lvFactors.Items[0].Selected := true;
       или:
       lvFactors.Selected := lvFactors.Items[0];      или:
      lvFactors.ItemIndex := 0;      добавлял:
      lvFactors.SetFocus;
      ShowDynamic;
    end;


Elen   (2007-08-09 13:33:00) [9]


> if lvFactors.Items.Count > 0 then begin

Оно хоть попадает сюда?


Loginov Dmitry   (2007-08-09 13:31:00) [10]

Ну и где устанавливаешь фокус на нужную строчку?


Darvin   (2007-08-09 13:27:00) [11]

Вот код процедуры:

 lvFactors : TListView;

procedure Fill;
var
 I, J, N : Integer;
 Col     : TListColumn;
begin
   if FFactors.Count > 0 then begin
     // Очистка
     if lvFactors.Items.Count > 0 then
       lvFactors.Clear;
     lvFactors.Items.BeginUpdate;

     // Заполнение
     for I:=0 to FFactors.Count - 1 do begin  // По всем участкам
       N := 0;
       // По показателям
       for J:=0 to FFactors.Items[I].FactorsCount - 1 do begin  
           // Название показателя
           if I = 0 then begin
             lvFactors.AddItem ( <имя показателя>, nil );
             lvFactors.Items.Item[N].SubItems.Add ( <короткое имя показателя> );
           end;

           // Значение
           if J = 0 then begin   // Для первого показателя добавляем колонку
             Col := lvFactors.Columns.Add;
             Col.Caption := IntToStr ( (I+1) * 5 );
           end;
           // Заносим значение показателя
           lvFactors.Items.Item[N].SubItems.Add ( FFactors.Items[I].Values[J] );
           Inc(N);
         end;
       end;
     end;

     // Выделить первую строчку
     if lvFactors.Items.Count > 0 then begin
//        lvFactors.Items[0].Selected := true;
//        lvFactors.Selected := lvFactors.Items[0];
       lvFactors.ItemIndex := 0;
       ShowDynamic;
     end;

     lvFactors.Items.EndUpdate;
end;


Loginov Dmitry   (2007-08-09 13:19:00) [12]

ListView1.ItemIndex := Index;
 ListView1.Selected.Focused := True;


{RASkov}   (2007-08-09 13:11:00) [13]

> [20] Darvin ©   (09.08.07 13:09)

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


Darvin   (2007-08-09 13:09:00) [14]

Пробовал по-разному. Ничего не получается...


umbra   (2007-08-09 12:46:00) [15]

а если еще lvFactors.Items[0].Focused := true ?


Elen   (2007-08-09 12:46:00) [16]


> Darvin ©   (09.08.07 09:41)

А Так Выделять пробовал? :


ListView1.Selected:=ListView1.Items.Item[0];
ListView1.SetFocus;


{RASkov}   (2007-08-09 12:44:00) [17]

> [11] Darvin ©   (09.08.07 11:47)

А случаем xx DrawItemXxx не задавал?

Впрочем при:
ListView.HideSelection:=False;
ListView.RowSelect:=True;
.....
отлично все должно выделятся и так
ListView.ItemIndex:=N;


Sonia   (2007-08-09 12:38:00) [18]


> добавляет подпункты (столбцы таблицы), а не элементы ListView

ну понятно, что подпункты, но если они должны быть столбцами, тогда чем должны быть пункты?


Darvin   (2007-08-09 12:31:00) [19]

Эта строка:
lvFactors.Items.Item[N].SubItems.Add ( Info.ShortName );
добавляет подпункты (столбцы таблицы), а не элементы ListView


Sonia   (2007-08-09 12:28:00) [20]

Да нет, дело тут скорее всего не в фокусе.
Мы медленно, но упорно продвигаемся к цели :)

Кстати, у меня вообще lvFactors.Items.Item[N].SubItems.Add ( Info.ShortName ); не добавляется. :(

А выделение работает....


Страницы:   1 2

Наверх

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