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

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

Как отмечать записи в TListBox [D7, 95/98, XP]


abhtr ©   (2009-01-12 09:30:00) 

Использую TListBox для выведения списка файлов, с которыми работаю либо с одним из всех, либо со всеми, либо с выбранными.
Когда надо выбрать несколько из всех, то пользуюсь левой кнопкой мышки с одновременным удержанием кнопки "Ctrl".
Можно ли сделать такой выбор (несколько из всех) но пользуясь не мышкой, а "горячей" кнопкой.
Пробовал на отработку кнопки использовать код:
iStr := lbxActWrOf.ItemIndex;
lbxActWrOf.Selected[iStr] := True;
не получилось.
Подскажите как можно это сделать.


Leonid Troyanovsky   (2009-01-13 18:25:00) [1]


> abhtr   (12.01.09 10:54) [3]

> То же самое я хочу сделать, только без "мышки".

ListBox.ExtendedSelect := False

--
Regards, LVT.


MsGuns   (2009-01-13 12:36:00) [2]

>Германн ©   (13.01.09 01:22) [8]
>"Выделение" в стрингриде точно также снимется при нажатии >на стрелку на клавиатуре.

А вот нифига ни разу :)


Германн   (2009-01-13 01:22:00) [3]


> MsGuns ©   (13.01.09 00:37) [7]
>
> Предпочитаю листбоксу стрингрид. Значительно функциональнее
> и гибче ИМХО
>

Но стрингрид не поможет автору. "Выделение" в стрингриде точно также снимется при нажатии на стрелку на клавиатуре.


MsGuns   (2009-01-13 00:37:00) [4]

Предпочитаю листбоксу стрингрид. Значительно функциональнее и гибче ИМХО


KilkennyCat   (2009-01-12 13:17:00) [5]


> Нажимаю, например, F5, и запись приобретает синий фон


а как тогда выбрать запись? стрелками клавиатуры? будет как раз проблема, аналогичная [5]

все-таки MBo более красивее предложил, во-первых, проще реализовать, во-вторых, проще работать как с клавиатуры, так и с мыши, и в-третьих - стандартный интерфейс.


abhtr   (2009-01-12 12:37:00) [6]

После проб и ошибок пришел к выводу, что код:
iStr := lbxActWrOf.ItemIndex;
lbxActWrOf.Selected[iStr] := True;
работает.
НО! Когда я нажимаю кнопку со стрелкой вниз (или ввер) то установленное выделение снимается.
Подскажите как это избежать.


DFT   (2009-01-12 11:46:00) [7]

Не совсем коротко, но грамотно - это унаследовать свой класс от TListBox и перекрыть в нем процедуру обработчик
procedure WMChar(var Message: TWMChar); message WM_CHAR;
begin
 inherited;
 ... {нужный код}
end;


abhtr   (2009-01-12 10:54:00) [8]


> А собственно, что тут должно было получиться?

Если использовать Ctrl+Левая кнопка "мышки", то эти записи приобретают синий фон, который показывает, что у этих записей lbxActWrOf.Selected[iStr] = True
и затем, по этому признаку я определяю, какие из них выбраны.
То же самое я хочу сделать, только без "мышки".
Нажимаю, например, F5, и запись приобретает синий фон, и свойство ее
lbxActWrOf.Selected[iStr] становитья True.

Вариант с SendMessage не прошел. После нажатия кнопки со стрелкой, синий фон не остается на записи, которую я хотел отметить.


KilkennyCat   (2009-01-12 10:14:00) [9]


> iStr := lbxActWrOf.ItemIndex;
> lbxActWrOf.Selected[iStr] := True;


А собственно, что тут должно было получиться?

можно так, генофондно:
if MultiSelect then SendMessage(lbxActWrOf.Handle, LB_SETCARETINDEX, Value, 0)
   else SendMessage(lbxActWrOf.Handle, LB_SETCURSEL, Value, 0);

Хотя, я бы прсто переключил константу... фиг поймешь этих борландцев..


MBo   (2009-01-12 09:41:00) [10]

Можно воспользоваться TCheckListBox


Наверх

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