![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отмечать записи в 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