Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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&#39;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
6-1131021421
Vetalich
2005-11-03 15:37
2006.02.12
Время задержки (ping)


15-1137705160
DiamondShark
2006-01-20 00:12
2006.02.12
Как же может быть так хреново,..


9-1113560515
Антон К.
2005-04-15 14:21
2006.02.12
Требуется музыкант/композитор...


2-1137611006
Sysanin
2006-01-18 22:03
2006.02.12
webBrowser


1-1136908476
Arazel
2006-01-10 18:54
2006.02.12
TreeView и TObject (Как добратся до самого Object а не Text)?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский