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

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

Вопрос по TKOLListBox [Delphi, Windows]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

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