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

Вниз

выделение в TListView   Найти похожие ветки 

 
Darvin ©   (2007-08-09 09:41) [0]

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


 
Sonia ©   (2007-08-09 10:29) [1]

HideSelection в False поставь


 
Darvin ©   (2007-08-09 10:31) [2]

>Sonia ©   (09.08.07 10:29) [1]
стоит. не помогает


 
Sonia ©   (2007-08-09 10:50) [3]

хм....мне помог..


 
Sonia ©   (2007-08-09 10:51) [4]

я использовала ваш 1) случай


 
Darvin ©   (2007-08-09 10:51) [5]

забавно...


 
Sonia ©   (2007-08-09 10:52) [6]

У меня выделяется сереньким...А что у вас происходит, вообще ничего не выделяет или выделяет, но не все? В каком событии вы это пишете?


 
Darvin ©   (2007-08-09 10:56) [7]

ничего не выделяет.

>В каком событии вы это пишете?
В обработчике нажатия на кнопку, лежащую на форме.


 
Sonia ©   (2007-08-09 11:29) [8]

А каким способом вы помещаете данные в ListView?


 
Darvin ©   (2007-08-09 11:36) [9]

lvFactors.AddItem ( Info.Name, nil );
lvFactors.Items.Item[N].SubItems.Add ( Info.ShortName );


 
Sonia ©   (2007-08-09 11:42) [10]

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


 
Darvin ©   (2007-08-09 11:47) [11]

да все правильно заполняется....
Просто не выделяет


 
Riply ©   (2007-08-09 11:50) [12]

>[11] Darvin ©   (09.08.07 11:47)
А ListView, случайно, не должен ли быть в фокусе, чтобы показать выделение ?


 
Darvin ©   (2007-08-09 11:59) [13]

>Riply ©   (09.08.07 11:50) [12]
Пробовал и фокус включать как до, так и после выделения
lvFactors.SetFocus;


 
Sonia ©   (2007-08-09 12:28) [14]

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

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

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


 
Darvin ©   (2007-08-09 12:31) [15]

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


 
Sonia ©   (2007-08-09 12:38) [16]


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

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


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

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

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

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


 
Elen ©   (2007-08-09 12:46) [18]


> Darvin ©   (09.08.07 09:41)

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


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


 
umbra ©   (2007-08-09 12:46) [19]

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


 
Darvin ©   (2007-08-09 13:09) [20]

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


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

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

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


 
Loginov Dmitry ©   (2007-08-09 13:19) [22]

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


 
Darvin ©   (2007-08-09 13:27) [23]

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

 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:31) [24]

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


 
Elen ©   (2007-08-09 13:33) [25]


> if lvFactors.Items.Count > 0 then begin

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


 
Darvin ©   (2007-08-09 13:36) [26]

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

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


 
{RASkov} ©   (2007-08-09 13:40) [27]

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

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


 
Darvin ©   (2007-08-09 13:46) [28]

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


 
Loginov Dmitry ©   (2007-08-09 13:48) [29]


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


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


 
{RASkov} ©   (2007-08-09 13:53) [30]

> [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


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

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


 
Sonia ©   (2007-08-09 14:02) [32]

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


 
Darvin ©   (2007-08-09 14:03) [33]

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



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

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

Наверх




Память: 0.54 MB
Время: 0.024 c
4-1173866657
fon-karlson
2007-03-14 13:04
2007.09.02
не ловится WM_COMMAND при нажатии на пункт меню


2-1186835096
Ivolg
2007-08-11 16:24
2007.09.02
Про WebBrowser


15-1186120453
robot1
2007-08-03 09:54
2007.09.02
О Автоматизации


15-1186059055
Dib@zol
2007-08-02 16:50
2007.09.02
Fraps must die


15-1185983624
antonn
2007-08-01 19:53
2007.09.02
потестируйте пожалуйста