![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по TKOLListBox [Delphi, Windows]
ALex13 © (2004-11-08 23:12:00)Камрады помогите!
Как программно выделить определенный пункт в ListBox.
Используя CurIndex можно только получить индекс текущего элемента.
Строка типа: ListBox1.CurIndex:=5 - не срабатывает.
Использую: Delphi 6, KOL v.1.95
thaddy (2005-06-16 15:10:00) [1]Can you mail me a picture of what you mean? Then I can make it maybe.
0legat0r (2005-06-16 14:47:00) [2]Галочка - хорошо, а вот как выделять всю строку другим цветом по клику в любой колонке? Как, например, в Тотальном Командире?
Выделяется только строка в левой колонке.
Unknown Mystic (2005-02-19 09:12:00) [3]>> Halfback (19.02.05 01:16) [27]
DoubleBuffer тут не причем вообще (я его вообще ни разу не включал), ну разве что как-то влияет на твои begin и end Update, хотя что-то сомнительно.
> А как найти номер строки, в иконки которой стоит галочка???
А зачем тебе глобальная переменная? Но для этого нужна 1 переменная, а не 2.
и вообще, только сейчас заметил, у тебя код вообще зацикливаться должен... Присвоение значения LVItemStateImgIdx[], тоже срабатывает OnLVStateChange.
>> Halfback (19.02.05 01:52) [28]
Не знаю. Посмотри еще раз может в KOL'е есть что-то такое, если нет - посмотри как это сделано в VCL.
Halfback (2005-02-19 01:52:00) [4]Еще есть вопрос по KOLListBox. Нужен аналог VCL функции ListBox1.ItemEnabled[]
В принципе устроит реализция в KOLListView.
Halfback (2005-02-19 01:16:00) [5]>> Unknown Mystic
А если более точно, то косяк был в том, что у меня была отрублена двойная буфферизация. Теперь иконка убирается.
Зачем все элементы списка перебирать? Зачем Old_checkind? И зачем выключать галочки у всех элементов, когда нужно только у одного?
А как найти номер строки, в иконки которой стоит галочка??? Походу нет такой функции в ListView... Посему и перебирал всё иконки в итемсах.
Unknown Mystic (2005-02-18 23:52:00) [6]А виновата в этом, я думаю, та самая, которая "кривая" и которая "Зато работает".
Неплохо было бы пошагово программу выполнять...
Unknown Mystic (2005-02-18 20:55:00) [7]Во-первых не во второй строке, а в третьей. А во-вторых косяк у тебя где-то в другом месте, потому как у меня это работает.
Halfback (2005-02-18 20:11:00) [8]>> Unknown Mystic
Ну там написано
Value 0 allows to remove checkbox at all.
Т.е. если я пишу
ListView2.LVItemStateImgIdx[2]:=0;
то иконка с галочкой(или без) во второй строке дложна исчезнуть.
Но такого не происходит. Причем включение(LVItemStateImgIdx[2]:=2) и отключение галочки(LVItemStateImgIdx[2]:=1) работают без проблем.
Unknown Mystic (2005-02-18 19:10:00) [9]Как я уже сказал:
> Так это написано в kol.pas в комментарии к LVItemStateImgIdx[].
Halfback (2005-02-18 18:35:00) [10]>> Unknown Mystic
на мою процедуру забей - сам знаю что она кривая. Зато работает.
Вопрос вот какой - как в определенной стороке убрать иконку сосвем(чтоб ни квадратика и ни галочки)??? Что то мне сейчас такой процедуры не найти (хотя раньше когда всё перебирал точно была такая, только вот забыл какая).
Unknown Mystic (2005-02-18 18:11:00) [11]Кошмар какой :)
Зачем все элементы списка перебирать? Зачем Old_checkind? И зачем выключать галочки у всех элементов, когда нужно только у одного?
Не понял вопроса. Убрать иконку совсем, т.е. чтоб ни квадратика, ни галочки вообще небыло? Так это написано в kol.pas в комментарии к LVItemStateImgIdx[].
Halfback (2005-02-17 17:29:00) [12]Вот короче процедура, которая ставит только одну галочку в ListView:
procedure TForm1.LV1OnLVStateChange(Sender: PControl; IdxFrom,
IdxTo: Integer; OldState, NewState: Cardinal);
var i: smallint;
begin
ListView1.BeginUpdate;
for i:=0 to ListView1.LVCount do
if ListView1.LVItemStateImgIdx[i]=2 then
if i<>Old_checkind then New_Checkind:=i;
ListView1.LVItemStateImgIdx[-1]:=1;
ListView1.LVItemStateImgIdx[New_checkind]:=2;
Old_checkind:=New_checkind;
ListView1.EndUpdate;
end;
Переменные Old_checkind и New_checkind - глобальные.
Еще вот вопрос: как с определенной стороки ListView убрать иконку где ставится галочка?
Unknown Mystic (2005-02-17 16:33:00) [13]OnLVStateChange - срабатывает в том числеи на установку/снятие галочки.
Что какой параметр означает? Используй, например, MsgOK и смотри.
Если тебе нужна только 1 галочка, то нет смысла перебирать все эл-ты. Храни где-нибудь номер выделенного, например, в св-ве Tag.
Halfback (2005-02-16 23:37:00) [14]>> Unknown Mystic
Вот и я про что.
Просто я пытаюсь сделать алгоритм, при котором в ListView можно было бы поставить не более одной галочки. Т.е. если поставить новую то старая убирется. На VCL это выглядело так:
procedure TForm1.OnClickCheck(Sender: TObject);
var
i: byte;
begin
CheckListBox1.Items.BeginUpdate;
for i:=0 to CheckListBox1.Count-1
do CheckListBox1.Checked[i]:=False;
CheckListBox1.Checked[CheckListBox1.ItemIndex]:=True;
CheckListBox1.Items.EndUpdate;
end;
А как это в KOL сделать - ????
thaddy (2005-02-16 11:35:00) [15]You are right, I didn't realize they were different!
Unknown Mystic (2005-02-16 10:56:00) [16]>> Halfback (16.02.05 03:06) [15]
Как уже говорил SPeller © (15.02.05 10:42) [5] для ListBox'а только OwnerDraw. Кстати если посмотреть исходники CheckListBox'а, то там как раз используется OwnerDraw.
>> thaddy (16.02.05 02:54) [14]
Может я ошибаюсь(приду домой - проверю), но selected и checked - разные вещи и LVM_SELECTED не поможет.
Я как-то пробовал получать номера выбранных(checked) элементов не перебирая их в цикле, но ничего не вышло.
У ListView есть 2 метода:
LVNextItem() и LVNextSelected()
но ни один из них не выдавал нужного результата.
Halfback (2005-02-16 03:06:00) [17]>> thaddy
А Set_Checked с listBox прокатит?
thaddy (2005-02-16 02:54:00) [18]ListView_GetNextItem in win32.help. with LVM_SELECTED
Halfback (2005-02-16 02:37:00) [19]И вот еще тогда вопросик: как узнать, напротив какой строки я поставил галочку. Лично я нашел решение только циклом
i:=0;
while ListView1.LVItemStateImgIdx[i]<>2 do
begin
inc(i);
if i>=ListView1.LVCount then
begin
i:= -1; // Т.е. таких строк НЕТ
break;
end;
end;
Label1.Caption:= Int2Str(i); // Показывает номер строки в кот. галочка
Может есть способ полегче?
thaddy (2005-02-16 01:13:00) [20]procedure TForm1.Button1Click(Sender: PObj);
begin
Set_Checked(Listview.handle,1,True);
end;