Страница 1 из 1

Изменить программно radiobox

Добавлено: 26 янв 2010, 21:18
galover
Может кто знает. Есть ли способ программно изменить элементы radiobox-a. Т.е. были одни элементы, нажали кнопку, проверили условие, стали другие. Или хотя бы то же самое но при запуске интерфейса. Попробовал поиграться с SetEnumList, но не работает. Код сейчас такой:

Код: Выделить всё

interface Test dialog, escClose;
   show at (,, 120, 40);

   var
      _selItem : longint;

   screen scrMain (,, sci13Esc);
      noTableNavigation;

      fields
         _selItem;

      buttons
         cmChangeList;
         cmChangeCO;
         cmCancel;
<<
     Значения
      (.) Один`
      (.) Два`
      (.) Три`

                          <.Изменить список.> <. Ok .> <. Отмена.>
>>
   end;

   handleEvent
      cmChangeList:
      {
         var lValues: array [1..5] of integer;
         lValues[1] := 10;
         lValues[2] := 20;
         lValues[3] := 30;
         lValues[4] := 40;
         lValues[5] := 50;

         var sValues: array [1..5] of string;
         sValues[1] := 'Изменения 1';
         sValues[2] := 'Изменения 2';
         sValues[3] := 'Изменения 3';
         sValues[4] := 'Изменения 4';
         sValues[5] := 'Изменения 5';

         SetEnumList(scrMain, #_selItem, sValues, lValues);
      }
   end;
end.

Добавлено: 27 янв 2010, 10:15
LaaLaa
Функция SetEnumList предназначена совсем для другого типа элемента, для выпадающего списка. Выпадающий список это обычное поле ввода с опцией LIST.

Код должен выглядеть примерно как то так

Код: Выделить всё



interface Test dialog, escClose;
   show at (,, 120, 40);

   var
      _selItem : longint;

   screen scrMain (,, sci13Esc);
      noTableNavigation;

      fields
         _selItem : [LIST 'Один', 'Два', 'Три'];

      buttons
         cmChangeList;
         cmChangeCO;
         cmCancel;
<<
     Значения .@@@@@@@@@@@@@@@@@@@@
      

                          <.Изменить список.> <. Ok .> <. Отмена.>
>>
   end;

   handleEvent
      cmChangeList:
      {
         var lValues: array [1..5] of integer;
         lValues[1] := 10;
         lValues[2] := 20;
         lValues[3] := 30;
         lValues[4] := 40;
         lValues[5] := 50;

         var sValues: array [1..5] of string;
         sValues[1] := 'Изменения 1';
         sValues[2] := 'Изменения 2';
         sValues[3] := 'Изменения 3';
         sValues[4] := 'Изменения 4';
         sValues[5] := 'Изменения 5';

         SetEnumList(scrMain, #_selItem, sValues, lValues);
      }
   end;
end. 
Если нужен элемент радио-кнопка, и нужно динамически управлять радио кнопками. То нужно применять другие функции: ClusterDisabledField, API конфигуратора и т.д.

Добавлено: 27 янв 2010, 10:21
LaaLaa
Может будет полезен пример, динамическое создание контролов с помощью API конфигуратора.

Для корректной работы примера нужен Атлантис 5.4.19 и выше.

Код: Выделить всё


interface ConfTest2 'Тест';
  show at (,,,30);

create view as select * from x$resources;

screen scr1 'screen';
 show at(,21,20,);
buttons
  cmOk;
<<
  <.OK.>
>>
end;

handleEvent
cmOk:
{
  var pobj1, pobj2 : longInt;
  var err : string;

  cfsSetCurrentContainer('ConfTest2');
  cfsSetProp('ConfTest2', 'Title', 'Интерфейс тест API конфигуратора');
 
  err := '';

  err := err + ' ' + string(cfsCreateObject('Screen', 'ConfTest2', 'scr2', false, pobj1));
  cfsSetProp(pobj1, 'RectA_X', 1);
  cfsSetProp(pobj1, 'RectA_Y', 1);
  cfsSetProp(pobj1, 'RectB_X', 60);
  cfsSetProp(pobj1, 'RectB_Y', 20);
  cfsSetProp(pobj1, 'PanelTable', tnx$resources);

    err := err + ' ' + string(cfsCreateObject('PanelInputLine', pobj1, 'x$resources.XR$NAME', false, pobj2));
    cfsSetProp(pobj2, 'Origin_X', 10);
    cfsSetProp(pobj2, 'Origin_Y', 10);
    cfsSetProp(pobj2, 'Size_X', 120);
    pobj2 := 0;

    err := err + ' ' + string(cfsCreateObject('StaticText', pobj1, 'StaticText вавава', false, pobj2));
    cfsSetProp(pobj2, 'Origin_X', 10);
    cfsSetProp(pobj2, 'Origin_Y', 30);
    cfsSetProp(pobj2, 'Size_X', 120);
    pobj2 := 0;

    err := err + ' ' + string(cfsCreateObject('Label', pobj1, 'Label 34534535', false, pobj2));
    cfsSetProp(pobj2, 'Origin_X', 10);
    cfsSetProp(pobj2, 'Origin_Y', 50);
    cfsSetProp(pobj2, 'Size_X', 120);
    pobj2 := 0;

    err := err + ' ' + string(cfsCreateObject('FieldLine', pobj1, 'FieldLine dsdsd', false, pobj2));
    cfsSetProp(pobj2, 'Origin_X', 10);
    cfsSetProp(pobj2, 'Origin_Y', 70);
    cfsSetProp(pobj2, 'Size_X', 120);
    pobj2 := 0;

    err := err + ' ' + string(cfsCreateObject('Bevel', pobj1, 'Bevel sdffsfdf', false, pobj2));
    cfsSetProp(pobj2, 'Origin_X', 10);
    cfsSetProp(pobj2, 'Origin_Y', 90);
    cfsSetProp(pobj2, 'Size_X', 120);
    cfsSetProp(pobj2, 'Size_y', 120);
    pobj2 := 0;

    err := err + ' ' + string(cfsCreateObject('Button', pobj1, 'Button qweqwe', false, pobj2));
    cfsSetProp(pobj2, 'Origin_X', 140);
    cfsSetProp(pobj2, 'Origin_Y', 10);
    cfsSetProp(pobj2, 'Size_X', 120);
    cfsSetProp(pobj2, 'Size_y', 20);
    pobj2 := 0;

  err := err + ' ' + string(cfsCreateObject('Browser', 'ConfTest2', 'br2', false, pobj1));
  cfsSetProp(pobj1, 'RectA_X', 61);
  cfsSetProp(pobj1, 'RectA_Y', 1);
  cfsSetProp(pobj1, 'RectB_X', 90);
  cfsSetProp(pobj1, 'RectB_Y', 20);
  cfsSetProp(pobj1, 'PanelTable', tnx$resources);

    err := err + ' ' + string(cfsCreateObject('Column', pobj1, 'x$resources.XR$TYPE', false, pobj2));
    cfsSetProp(pobj2, 'Title', 'Поле1');
    pobj2 := 0;

    err := err + ' ' + string(cfsCreateObject('Column', pobj1, 'Field: x$resources.XR$NAME', false, pobj2));
    cfsSetProp(pobj2, 'Title', 'Поле2');
    pobj2 := 0;

    err := err + ' ' + string(cfsCreateObject('Column', pobj1, 'ExtAttr: X$RESOURCES,281474976710702', false, pobj2));
    cfsSetProp(pobj2, 'Title', 'Атрибут1');
    pobj2 := 0;

    err := err + ' ' + string(cfsCreateObject('Column', pobj1, 'ExtAttr: X$RESOURCES,2814702', false, pobj2));
    cfsSetProp(pobj2, 'Title', 'Атрибут2');
    pobj2 := 0;


  err := err + ' ' + string(cfsCreateObject('MemoViewer', 'ConfTest2', 'x$resources.XR$DATA', false, pobj1));
  cfsSetProp(pobj1, 'RectA_X', 22);
  cfsSetProp(pobj1, 'RectA_Y', 22);
  cfsSetProp(pobj1, 'RectB_X', 90);
  cfsSetProp(pobj1, 'RectB_Y', 28);

  ReReadRecord;
  message(err);
}
end;
end.

Добавлено: 27 янв 2010, 10:29
galover
Про SetEnumList в курсе, думал может у нее есть какой-то побочный эффект)) С конфигуратором как-то сложно, задача гораздо проще. Но за пример спасибо. Если будет время, накатай статью по API конфигуратора, и в опыт, всем полезно будет!

Добавлено: 27 янв 2010, 10:30
LaaLaa
Радио кнопки правда не пробовал так создавать, но возможно получится аналогичным способом в функцию cfsCreateObject передавать 'RadioButton' 'CheckBox' 'ClusterItem'

Если получится, пример пожалуйста, опубликуйте.

Добавлено: 27 янв 2010, 10:32
LaaLaa
А со временем у меня большой дефицит.

Добавлено: 27 янв 2010, 10:41
LaaLaa
Забыл предупредить. :-)

В примере используется системная таблица x$resources только для того чтобы на чем то можно было показать функции API. Ни в коем случае не запускайте этот пример на рабочей базе. Замусорите x$resources - испортите базу. Тренируйтесь в программировании только на тестовых базах. Которые не жалко потерять