Zobrazují se příspěvky se štítkemdialog. Zobrazit všechny příspěvky
Zobrazují se příspěvky se štítkemdialog. Zobrazit všechny příspěvky

pátek 5. února 2010

Pole na dialogu

Někdy je potřeba umístit na dialog pole (tzn. datový typ s Array elementy). Zdrojový kód je triviální:
Dialog      dialog = new Dialog("Dimenze");
;
dialog.addField(typeId(Dimension));
dialog.run();
Pokud je dále třeba nastavit nějakou vlastnost, například AllowEdit, nabízel by se takovýto zápis:
Dialog      dialog = new Dialog("Dimenze");
DialogField field;
;

field = dialog.addField(typeId(Dimension));
field.allowEdit(false);

dialog.run();
Jenže… výsledek není správný. Znepřístupněné je jen první políčko: Na formuláři totiž ve skutečnosti vznikne více políček (Fld1_1, Fld1_2 a Fld1_3) a proměnná field ukazuje pouze na první z nich. Je nutné projít všechny všechná příslušná políčka a nastavit požadovanou vlastnost každému zvlášť.
Dialog                  dialog = new Dialog("Dimenze");
DialogField             field;
SysDictType             dictType;
FormBuildStringControl  control;
int i;
;

field = dialog.addField(typeId(Dimension));

dictType = new DictType(typeId(Dimension) >> 16);

for (i = 1; i <= dictType.arraySize(); i++)
{
   control = dialog.dialogForm().buildControl(field.fieldname(i));
   control.allowEdit(false);
}

dialog.run();
Výsledný dialog pak má všechny dimenze neaktivní, jak bylo požadováno.