Maks150988

Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Товарищи, помогите разобраться. Вкратце: читаю настройки из ини файла. В комбобокс добавляю строки. После чтения настроек необходимо выделить в комбобоксе ту строчку, которую прочитали в ини файле. Пользуюсь методом: Код: CmbxNetBuf := '10'; SendMessage(GetDlgItem(hStg, CTRL_COMBOBOX_NETPREBUF), CB_ADDSTRING, 0, Integer(@CmbxNetBuf)); CmbxNetBuf := '15'; SendMessage(GetDlgItem(hStg, CTRL_COMBOBOX_NETPREBUF), CB_ADDSTRING, 0, Integer(@CmbxNetBuf)); CmbxNetBuf := '30'; SendMessage(GetDlgItem(hStg, CTRL_COMBOBOX_NETPREBUF), CB_ADDSTRING, 0, Integer(@CmbxNetBuf)); | Далее выделяю требуемые данные в комбобоксе которыю прочитал в ини файле Код: CheckBuffer := IniReadString(GetCurDir + 'Settings.ini', 'Options', 'TimeOut', #0); if CheckBuffer = '10' then SendMessage(GetDlgItem(hStg, CTRL_COMBOBOX_NETPREBUF), CB_SETCURSEL, 0, 0); if CheckBuffer = '15' then SendMessage(GetDlgItem(hStg, CTRL_COMBOBOX_NETPREBUF), CB_SETCURSEL, 1, 0); if CheckBuffer = '30' then SendMessage(GetDlgItem(hStg, CTRL_COMBOBOX_NETPREBUF), CB_SETCURSEL, 2, 0); | Потом обрабатываю изменение в комбобоксе через CBN_SELCHANGE и похожим макаром сохраняю строку в ини файл... Так вот этот код добавления каждой строчки в комобокс не универсален, так как есть другие настройки, где чуть ли не сотни таких строчек. Задолбаешься такой код писать... Решил попробовать с массивом: Код: type TCBExItemInfo = record iImage, iIndent : integer; pszText : pchar; end; var ItemInfo : array [0..7] of TCBExItemInfo = ((iImage:0; pszText:'50'), (iImage:0; pszText:'55'), (iImage:0; pszText:'60'), (iImage:0; pszText:'65'), (iImage:0; pszText:'70'), (iImage:0; pszText:'75'), (iImage:0; pszText:'80'), (iImage:0; pszText:'85')); for i := low(ItemInfo) to high(ItemInfo) do SendMessage(GetDlgItem(hStg, CTRL_COMBOBOX_NETPREBUF), CB_ADDSTRING, 0, Integer(ItemInfo[i].pszText)); | Но возник вопрос. Как можно меньшим кодом выделять требуемую строчку в комбобоксе без конструкции типа CheckBuffer := IniReadString(GetCurDir + 'Settings.ini', 'Options', 'TimeOut', #0); if CheckBuffer = '10' then SendMessage(GetDlgItem(hStg, CTRL_COMBOBOX_NETPREBUF), CB_SETCURSEL, 0, 0); ? И еще один интересующий меня вопрос. В своей программе много перекрашиваю контролов, ну в общем и графики там многовато со всякими имэйджлистами и т.п. Заметил что после уничтожения диалога память, занимаемая программой не изменяется. Потом при открытии диалога она еще боьше сжирается. Порылся в некоторых исходниках и нашел там ImageList_Destroy DeleteObject. Ну вроде как память уменбшается при уничтожении диалога. Но вот все равно интересует, надо ли уничтожать еще и кисть если я создаю ее при каждом появлении диалога, а идентификатор этой кисти в var один и тот же (то есть к главному диалогу применена эта кисть и я опять к дочернему создаю ее при инициализации)? Спасибо. =) |