Введение Списков и Всплывающих Списков
Вы основываете списки, отображенные в списках, и во всплывающих списках, используя последовательность вызывает к трем функциям: ads_start_list (), ads_add_list (), и ads_end_list (). Как только список был создан, Вы можете исправлять это. Имеются три возможных операции, которые определены ads_start_list () параметр операции функции (чей значения показываются в круглых скобках в следующем списке).
§
Создают новый список (LIST_NEW).
После ads_start_list () запрос, Вы можете вызывать ads_add_list () неоднократно.
Каждый ads_add_list () запрос прибавляет новый элемент к списку. Конечная обработка списка, вызывая ads_end_list ().
§ Изменяют элемент в списке (LIST_CHANGE).
После ads_start_list (), вызовите ads_add_list () однажды заменить элемент, чей индекс был определен в ads_start_list () запрос. ( Если Вы называете ads_add_list () больше чем однажды, это заменяет тот же самый элемент снова.) В конце обработки вызывают ads_end_list ().
§ Добавляют элемент к списку (LIST_APPEND).
После ads_start_list (), вызовите ads_add_list () чтобы добавить элемент к концу списка. Если Вы продолжаете вызывать ads_add_list (), большее количество элементов добавлено в конец, пока Вы не вызываете ads_end_list ().
Независимо от которой списка операции Вы делаете, Вы должны вызвать три функции в правильной последовательности: ads_start_list(), тогда ads_add_list() (возможно больше чем однажды) и ads_end_list().
Списки наиболее легко представлены связанными буферами результатов, как показано в следующем примере:
struct resbuf *appnames, *rb;
// Initialize the appnames list here.
//
...
rb = appnames;
ads_start_list(hdlg, "selections", LIST_NEW, 0);
while (rb != NULL) {
ads_add_list(rb->resval.rstring);
rb = rb->rbnext;
}
ads_end_list();
Для коротких списков, проще передать индивидуальные строки. Список буфера результата не требован.
Значение list_box поля ввода - индекс (или индексы) отобранного элемента (или элементы). Если ваша программа должна знать фактический текст, связанный с индексом, это должно сохранить первоначальный список. Это должно также проследить изменения, сделанные методами, показанными в следующих примерах.
Элементы списка Добавления в конец подобны созданию нового списка. Например, appnames имеет 12 элементов в этом, и Вы хотите добавить другой список, вызвал newnames:
(start_list "selections" 2)
(mapcar ’add_list newnames)
(end_list)
В ObjectARX, Вы должны определить индексное значение, но ads_add_list () игнорирует это в добавляющейся операции.
struct resbuf *appnames, *newnames, *rb;
rb = newnames;
ads_start_list(hdlg, "selections", LIST_APPEND, 0);
while (rb != NULL) {
ads_add_list(rb->resval.rstring);
rb = rb->rbnext;
}
ads_end_list();
Изменение единственного элемента требует только одного ads_add_list () запрос. В следующем примере, Вы определяете индекс элемента, чтобы измениться:
ads_start_list(hdlg, "selections", LIST_CHANGE, 5);
ads_add_list("SURPRISE!");
ads_end_list();
Вы не можете удалять элемент списка или вставлять элемент без того, чтобы восстановить полный список.