Форум: "KOL";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];
ВнизВопрос по TKOLListBox Найти похожие ветки
← →
ALex13 (2004-11-08 23:12) [0]Камрады помогите!
Как программно выделить определенный пункт в ListBox.
Используя CurIndex можно только получить индекс текущего элемента.
Строка типа: ListBox1.CurIndex:=5 - не срабатывает.
Использую: Delphi 6, KOL v.1.95
← →
Sewix © (2004-11-08 23:31) [1]ListBox1.ItemSelected[5]:=true;
← →
ecm (2004-11-08 23:37) [2]Что бы работало присваивание, типа
ListBox1.CurIndex:=5
не обходимо чтобы в ListBox1.Options обязательно было:
loNoExtendSel = TRUE;
loMultiSelect = FALSE;
иначе НЕ работает :)
...
MSDN: LB_SETCURSEL
...
Remarks
Use this message only with single-selection list boxes. You cannot use it to set or remove a selection in a multiple-selection list box.
← →
Alex13 (2004-11-09 18:17) [3]Спасибо большое.
Все заработало!
← →
Halfback (2005-02-15 02:09) [4]У меня вот тоже вопрос по TKOLListBox.
Т.к. CheckListBox в KOL/MCK нет(во всяком случае я не нашел) то вот хотелось бы узнать, как в имеющемся компоненте TKOLListBox приделать к стороке слева галочку как это реализовано в VCL CheckListBox??? А то простое выделение строки как то визуально не очень смотриться и хочется галочку.
← →
SPeller © (2005-02-15 10:42) [5]Halfback (15.02.05 2:09) [4]
Только OwnerDraw
← →
Unknown Mystic © (2005-02-15 12:57) [6]>> Halfback (15.02.05 02:09) [4]
Попробуй TKOLListView у него есть опция что-то вроде lvoCheckBoxes. Кстати Style не забудь в lvsList поставить (так кажется он называется)
← →
Halfback (2005-02-15 13:59) [7]>> Unknown Mystic ©
Всё сделал как Вы написали но в компоненте вообще ничего не появляется. Вот, например, пишу процедуру:
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
var
i: integer;
begin
ListView1.Clear;
for i:=1 to 10 do
begin
ListView1.Add("Slovo " + Int2Str(i));
end;
end;
и ничего не появляется. Почему так?
← →
Unknown Mystic © (2005-02-15 14:18) [8]>> Halfback (15.02.05 13:59) [7]
Потому, что надо использовать метод LVItemAdd().
Что бы проверить стоит ли галочка или нет надо использовать LVItemStateImgIdx[]
// В твоем примере в цикле begin и end можно было не ставить.
← →
VNavigator © (2005-02-15 23:20) [9]Попробуй ставить чек этой процедурой
procedure TForm1.Set_Checked(hwndLV: HWND; i: Integer; Checked: Boolean);
var
Item: TLVItem;
begin
Item.statemask := LVIS_STATEIMAGEMASK;
Item.State := ((Integer(Checked) and 1) + 1) shl 12;
SendMessage(hwndLV, LVM_SETITEMSTATE, i, Integer(@Item));
end;
← →
Halfback (2005-02-15 23:51) [10]>> Unknown Mystic
Вот теперь всё пучком. Сенкс!!!
>> VNavigator
Прошу ногами не пинать но не пойму как эту процедуру вызывать. Я вот пишуprocedure TForm1.Button1Click(Sender: PObj);
begin
Set_Checked(,1,True);
end;
А вот что писать до первой запятой??? И можно пояснение процедуры??? Т.е. что каждый параметр значит? Особенно что писать на место hwndLV: HWND ???
← →
thaddy (2005-02-16 01:12) [11]hwndLV: HWND = yourcontrol.handle
Thats all
← →
thaddy (2005-02-16 01:13) [12]procedure TForm1.Button1Click(Sender: PObj);
begin
Set_Checked(Listview.handle,1,True);
end;
← →
Halfback (2005-02-16 02:37) [13]И вот еще тогда вопросик: как узнать, напротив какой строки я поставил галочку. Лично я нашел решение только циклом
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 02:54) [14]ListView_GetNextItem in win32.help. with LVM_SELECTED
← →
Halfback (2005-02-16 03:06) [15]>> thaddy
А Set_Checked с listBox прокатит?
← →
Unknown Mystic © (2005-02-16 10:56) [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()
но ни один из них не выдавал нужного результата.
← →
thaddy (2005-02-16 11:35) [17]You are right, I didn't realize they were different!
← →
Halfback (2005-02-16 23:37) [18]>> 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 сделать - ????
← →
Unknown Mystic © (2005-02-17 16:33) [19]OnLVStateChange - срабатывает в том числе и на установку/снятие галочки.
Что какой параметр означает? Используй, например, MsgOK и смотри.
Если тебе нужна только 1 галочка, то нет смысла перебирать все эл-ты. Храни где-нибудь номер выделенного, например, в св-ве Tag.
← →
Halfback (2005-02-17 17:29) [20]Вот короче процедура, которая ставит только одну галочку в 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-18 18:11) [21]Кошмар какой :)
Зачем все элементы списка перебирать? Зачем Old_checkind? И зачем выключать галочки у всех элементов, когда нужно только у одного?
Не понял вопроса. Убрать иконку совсем, т.е. чтоб ни квадратика, ни галочки вообще небыло? Так это написано в kol.pas в комментарии к LVItemStateImgIdx[].
← →
Halfback (2005-02-18 18:35) [22]>> Unknown Mystic
на мою процедуру забей - сам знаю что она кривая. Зато работает.
Вопрос вот какой - как в определенной стороке убрать иконку сосвем(чтоб ни квадратика и ни галочки)??? Что то мне сейчас такой процедуры не найти (хотя раньше когда всё перебирал точно была такая, только вот забыл какая).
← →
Unknown Mystic © (2005-02-18 19:10) [23]Как я уже сказал:
> Так это написано в kol.pas в комментарии к LVItemStateImgIdx[].
← →
Halfback (2005-02-18 20:11) [24]>> 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 20:55) [25]Во-первых не во второй строке, а в третьей. А во-вторых косяк у тебя где-то в другом месте, потому как у меня это работает.
← →
Unknown Mystic © (2005-02-18 23:52) [26]А виновата в этом, я думаю, та самая, которая "кривая" и которая "Зато работает".
Неплохо было бы пошагово программу выполнять...
← →
Halfback (2005-02-19 01:16) [27]>> Unknown Mystic
А если более точно, то косяк был в том, что у меня была отрублена двойная буфферизация. Теперь иконка убирается.
Зачем все элементы списка перебирать? Зачем Old_checkind? И зачем выключать галочки у всех элементов, когда нужно только у одного?
А как найти номер строки, в иконки которой стоит галочка??? Походу нет такой функции в ListView... Посему и перебирал всё иконки в итемсах.
← →
Halfback (2005-02-19 01:52) [28]Еще есть вопрос по KOLListBox. Нужен аналог VCL функции ListBox1.ItemEnabled[]
В принципе устроит реализция в KOLListView.
← →
Unknown Mystic © (2005-02-19 09:12) [29]>> Halfback (19.02.05 01:16) [27]
DoubleBuffer тут не причем вообще (я его вообще ни разу не включал), ну разве что как-то влияет на твои begin и end Update, хотя что-то сомнительно.
> А как найти номер строки, в иконки которой стоит галочка???
А зачем тебе глобальная переменная? Но для этого нужна 1 переменная, а не 2.
и вообще, только сейчас заметил, у тебя код вообще зацикливаться должен... Присвоение значения LVItemStateImgIdx[], тоже срабатывает OnLVStateChange.
>> Halfback (19.02.05 01:52) [28]
Не знаю. Посмотри еще раз может в KOL"е есть что-то такое, если нет - посмотри как это сделано в VCL.
← →
0legat0r (2005-06-16 14:47) [30]Галочка - хорошо, а вот как выделять всю строку другим цветом по клику в любой колонке? Как, например, в Тотальном Командире?
Выделяется только строка в левой колонке.
← →
thaddy (2005-06-16 15:10) [31]Can you mail me a picture of what you mean? Then I can make it maybe.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.038 c