![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
выделение в TListView [D7, XP]
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 ); не добавляется. :(
А выделение работает....