Ads_mode_tile (hdlg, "lastname", MODE_SETSEL);

На некоторых платформах, устанавливая фокус к окну редактирования автоматически высвечивает это, делая этот дополнительный ненужный шаг.

Изменение Режимов Повторного вызова и Значений

При повторном вызове время, Вы можете проверять значение поля ввода. Если приложение вызывает для этого, Вы можете использовать ads_set_tile () снова, чтобы изменить это значение. В течение повторных вызовов, Вы можете также использовать ads_mode_tile () чтобы изменить состояние поля ввода. Следующая таблица показывает значения ads_mode_tile () параметр режима:

Значения режима поля ввода

Значение

Символ

Описание

0

MODE_ENABLE

Позволяют поле ввода

1

MODE_DISABLE

Отключают поле ввода

2

MODE_SETFOCUS

Набор сосредотачивается к полю ввода

3

MODE_SETSEL

Выбор части содержания окна редактирования

4

MODE_FLIP

Зеркальное изображение, высвечивающее вкл. или выкл.

Когда Вы используете ads_mode_tile () чтобы отключить поле ввода, которое имеет текущий фокус, Вы должны вызвать ads_mode_tile () снова, чтобы установить фокус в отличное поле ввода (в большинстве случаев, следующий табулятор в диалоговом окне). Иначе, фокус останется на заблокированном поле ввода, которое является нелогичным и может вызывать ошибки.

Пример поля ввода “отключение” является рядом диалогового окна “страницы”, что пользователь шагает через, выбирая кнопку Next или Previous. Когда пользователь нажимает Затем на предпоследней странице, кнопка заблокирована. Тот же самый случается после нажима Предыдущего на второй странице. В обоих случаях, код должен отключить кнопку, которая была нажата, и затем устанавливала фокус в различное поле ввода.

НЕ нашли? Не то? Что вы ищете?

Следующий пример управляет кластером названным “группа”. Когда переключатель установлен в От, поля ввода в кластере неактивны и не должны измениться:

static void CALLB group_on_off(ads_callback_packet *cbpkt)

{

ads_hdlg hdlg = cbpkt->dialog;

char value[TILE_STR_LIMIT];

strcpy(value, cbpkt->value);

if (strcmp(value, "0") == 0) { // Cluster is disabled.

ads_mode_tile(hdlg, "group", MODE_DISABLE);

} else { // The value must equal "1".

ads_mode_tile(hdlg, "group", MODE_ENABLE);

}

}

Вы можете осматривать другие атрибуты помимо значения поля ввода с get_attr () функция. Следующий пример отыскивает метку кнопки, вызвал “pressme”:

char label_str[TILE_STR_LIMIT];

ads_get_attr(hdlg, "pressme", "label", label_str, TILE_STR_LIMIT);

Если Вы используете ads_get_attr () чтобы отыскать атрибут значения, это сохраняет атрибут значения в файле DCL (начальное значение поля ввода). Ads_get_tile () функция, однако, получает текущее значение во время выполнения поля ввода. Два значения - не обязательно тот же самый.

Ads_get_attr () функция возвращает значение атрибута в строковом параметре (значение). Поскольку эта функция устанавливает значение строки, Вы должны разместить пространство для этого, как показано в предшествующем примере.

Введение Списков и Всплывающих Списков

Вы основываете списки, отображенные в списках, и во всплывающих списках, используя последовательность вызывает к трем функциям: 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();

Вы не можете удалять элемент списка или вставлять элемент без того, чтобы восстановить полный список.

Значения Списка Обработки

Значение list_box поля ввода может содержать ведущие пробелы. Если Вы отыскиваете множественные элементы, не проверите значение как строковое сравнение. Преобразуйте это к целому числу сначала, используя atoi ().

Принимая, что список принимает только единственный выбор, следующие проверки фрагмента кода был ли третий список элемент отобран. (Убедитесь, что строка пуста первая, потому что atoi () возвращается 0 для пустой строки также как для строки “0”.) следующий пример использует значение, прошел в пакете повторного вызова:

if (*cpkt->value!= EOS) {

if ((atoi(cpkt->value) == 2) {

// Process the third entry.

...

}

}

Значение всплывающего списка никогда не имеет ведущее пространство, так что Вы не должны преобразовать значение. Всплывающие списки не позволяют множественный выбор.

Если список поддерживает множественный выбор, ваша программа должна делать преобразование и шаг через множественные значения в строке значения. Следующий пример требует, чтобы Вы включили файл заголовка стандартной библиотеки для C string. h.

Кроме того, Вы должны назвать mk_list () функцией со значением потока поля списка, cpkt - >value, и указателем на первоначальный список. Ради простоты, сообщения об ошибках не учтены.

resbuf

*mk_list(char *local, struct resbuf *oldlist)

{

char spaceset[] = {’ ’, ’\t’, ’\n’}, item[TILE_STR_LIMIT];

int nitem, i;

struct resbuf *findrb; *usrlist, *scratch, *usrlast;

usrlist = usrlast = NULL;

while (item = strtok(local, spaceset) != NULL) {

nitem = atoi(item);

findrb = oldlist;

for (i=0; i<nitem; i++) {

findrb=findrb->rbnext;

}

if (usrlist == NULL) {/*AБ*/ /* First item */

if (scratch = acutNewRb(RTSTR) == NULL)

// Assume it’s a string.

return NULL;

if ((scratch->resval. rstring = malloc(strlen(findrb->resval. rstring))) == NULL)

return NULL;

strcpy(scratch->resval. rstring, findrb->resval. rstring);

usrlist = usrlast = scratch;

} else { /* Trailing items */

if (scratch = acutNewRb(findrb->restype) == NULL)

return NULL;

if ((scratch->resval. rstring =malloc(strlen(findrb->resval. rstring))) ==NULL)

return NULL;

strcpy(scratch->resval. rstring, findrb->resval. rstring);

usrlast->rbnext = scratch;

usrlast = scratch;

}

}

return usrlist;

}

Этот пример также работает для выродившегося случая единственного выбора.

Создание изображения

Последовательность запроса, чтобы создать изображения для полей ввода изображения и кнопок изображения подобна обрабатывающей списку последовательности. Ads_start_image () функция начинает создание изображения, и ads_end_image () заканчивает это. Однако, опции для того, чтобы рисовать определены следующей отдельной функцией, вызывает вместо параметров:

§  N ads_vector_image () рисует вектор (единственный, прямо выравнивать) в текущем изображении.

§  N ads_fill_image () рисует заполненный прямоугольник в текущем изображении.

§  N ads_slide_image () рисует слайд AutoCAD в изображении.

Векторы и заполненные прямоугольники полезны для простых изображений, типа цветных образчиков (заполненные прямоугольники) использования диалогового окна AutoCAD Select Color, чтобы отобразить выбор пользователя цвета. Для сложных изображений, слайды более удобны. Однако их отображение может быть потребление время. Если Вы используете их, сохраните их простой.

Рисующая изображение функция, ads_vector_image (), требует, чтобы Вы определили абсолютные координаты, в то время как ads_fill_image () и ads_slide_image () требуют стартовой координаты с относительной шириной и высотой. Чтобы делать это правильно, Вы должны знать точные измерения о поле ввода изображения или кнопке изображения. Поскольку эти измерения обычно назначаются, когда диалоговое окно размещено, пакет PDB обеспечивает функцию, ads_dimensions_tile (), который возвращает ширину и высоту специфического поля ввода. Вызовите эту функцию прежде, чем Вы начинаете создавать изображение. Начало координат поля ввода (0,0), является всегда его левым верхним углом.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132