CB_SETITEMDATA
От: Maks1509 Россия http://mv-software.narod.ru
Дата: 01.12.10 11:34
Оценка:
Использую ComboboxEx и добавляю текст в каждый элемент списка в стековый массив pszData в WM_INITDIALOG.


//
var
  pszData: Array of WideString;
//
          SetLength(pszData, iItem + 1);
          pszData[iItem] := hData.cFileName;
          SendMessageW(GetDlgItem(hWnd, IDC_LANG_LIST), CB_SETITEMDATA, iItem,
            LPARAM(pszData[iItem]));


На семёрке этот код возвращает ересь в WM_CLOSE:

var
  dwRet  : Integer;
  pszText: WideString;
//
          dwRet := SendMessageW(GetDlgItem(hWnd, IDC_LANG_LIST), CB_GETCURSEL,
            0, 0);
          if (dwRet <> CB_ERR) then
          begin

            pszText := LPWSTR(SendMessageW(GetDlgItem(hWnd, IDC_LANG_LIST),
              CB_GETITEMDATA, dwRet, 0));

          end;


Неужто надо объявить этот массив глобальным? Не хочу лишних глобальных переменных, тем более под 2000 и XP корректно извлекается текст с каждого элемента. Рассматриваю как вариант SetWindowLongPtrW + GWL_USERDATA для массива, должно сработать. Что можно придумать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.