Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Вниз

Как получить индексы выделенных элементов в ListBox е?   Найти похожие ветки 

 
vvp   (2006-02-19 05:34) [0]

Как получить индексы выделенных элементов в ListBox"е? Использую множественное выделение, соответственно curindex не подходит.


 
ECM ©   (2006-02-19 16:04) [1]

SelStart
      Start of selection (editbox - character position, listbox and combobox -
      index of [the first] selected item)
SelLength
      Length of selection (editbox - number of characters selected, multiline
      listbox - number of items selected)
Если элементы выделяются  не подряд - нужно смотреть в сторону

ListBox.Perform(LB_GETSELITEMS,...

An application sends an LB_GETSELITEMS message to fill a buffer with an array of integers that specify the item numbers of selected items in a multiple-selection list box.

Syntax

To send this message, call the SendMessage function as follows.
lResult = SendMessage(      // returns LRESULT in lResult     (HWND) hWndControl,      // handle to destination control     (UINT) LB_GETSELITEMS,      // message ID     (WPARAM) wParam,      // = (WPARAM) () wParam;    (LPARAM) lParam      // = (LPARAM) () lParam; );  
Parameters

wParam
Specifies the maximum number of selected items whose item numbers are to be placed in the buffer.
Microsoft® Windows® 95/Windows 98/Windows Millennium Edition (Windows Me) : The wParam parameter is limited to 16-bit values. This means list boxes cannot contain more than 32,767 items. Although the number of items is restricted, the total size in bytes of the items in a list box is limited only by available memory.

lParam
Pointer to a buffer large enough for the number of integers specified by the wParam parameter.
Return Value

The return value is the number of items placed in the buffer. If the list box is a single-selection list box, the return value is LB_ERR.


 
Vladimir Kladov   (2006-02-19 16:50) [2]

Намного проще
for i := 0 to LB1.Count-1 do
 if LB1.ItemSelected[ i ] then ...


 
ECM ©   (2006-02-19 19:21) [3]

А как же основной постулат КОЛ - минимум кода?  И по максимуму использовать то что встроено в систему?
:))

и вопрос был - "как получить индексы"?
Упрощенно - (допустим строк в листбоксе не более 1024):

var
 IdxArr: Array[0..1023] of Integer;
 SelCnt: Integer;
...
 SelCnt := ListBox1.Perform(LB_GETSELITEMS,1024,Integer(@IdxArr[0]));

вызовом одной API функции - получаем результат - первые SelCnt элементов массива будут содержать индексы выделенных элементов...
:))


 
Vladimir Kladov   (2006-02-19 22:02) [4]

вот как раз мой вариант - это и есть минимум кода. А то, что предложено, за минимум не сойдет, скорее за оптимизацию скорости.


 
ECM ©   (2006-02-20 12:06) [5]

Странно... сравнил две процедуры (D6 $0+}

procedure TForm1.Button1Click(Sender: PObj);
var
IdxArr: Array[0..1023] of Integer;
SelCnt: Integer;
begin
SelCnt := ListBox1.Perform(LB_GETSELITEMS,1024,Integer(@IdxArr[0]));
end;

procedure TForm1.Button2Click(Sender: PObj);
var
 i,j: Integer;
 IdxArr: Array[0..1023] of Integer;
begin
 j := 0;
 for i := 0 to ListBox1.Count-1 do begin
    if ListBox1.ItemSelected[ i ] then begin
      IdxArr[j] := i;
      Inc(j);
    end;
 end;
end;

Первая уменя имеет размер $28 (40 байт) вторая $42(66 байт)

???


 
Thaddy   (2006-02-20 14:04) [6]

Even more correct is calling LB_GETSELCOUNT first. To avoid missing one or more of 32767 possible selected items :)


 
ECM ©   (2006-02-20 14:51) [7]


> To avoid missing one or more of 32767 possible selected
> items :)


> ECM ©   (19.02.06 19:21) [3]


> Упрощенно - (допустим строк в листбоксе не более 1024):


 
Thaddy   (2006-02-20 15:06) [8]

Hm, back to babelfish.....
Russian is VERY difficult.



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.05 c
2-1164214839
Галинка
2006-11-22 20:00
2006.12.10
"Резинка" в c#


6-1149953076
brother
2006-06-10 19:24
2006.12.10
Модемные клиент-сервер


2-1164382085
redlord
2006-11-24 18:28
2006.12.10
переворот BITMAPa на 180"


9-1140081963
Древолаз
2006-02-16 12:26
2006.12.10
GL Scene Холм и Танк


2-1164290067
Elf@ck
2006-11-23 16:54
2006.12.10
работа с обьектами





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский