Обновление значения текстового поля

Программирование на Atlantis: приемы и подходы, обмен опытом

Модераторы: larin, Screw

beatlov
заказчик
Сообщения: 49
Зарегистрирован: Пн, 22/12/2008 16:39
Имя Фамилия: Владимир Жуков
Откуда: Северные МН

Обновление значения текстового поля

Сообщение beatlov » Вт, 30/04/2013 09:16

Добрый день!
Ситуация: интерфейс состоит из двух панелей. На первой панели - текстовые поля (в состоянии skip) и кнопки, на второй панели browse с данными из view. В по мере изменения данных в browse меняется значение одного текстового поля в первой панели, но данные по данному полю обновляются лишь при нажатии кнопки мыши на первой панели или нажатии любой кнопки на первой панели. Все попытки сделать рефрешь данного поля автоматически не увенчались успехом (пробовал и rescanPanel по screen, rereadrecord по полю, изменение статуса c visible на visible, позиционирование на данное текстовое поле) ((( Что делать?

n0where
Сообщения: 72
Зарегистрирован: Вт, 21/12/2010 06:01
Имя Фамилия: Лобастов Александр
Откуда: Сода

Re: Обновление значения текстового поля

Сообщение n0where » Вт, 30/04/2013 09:24

Рескан или ReReadRecord - обычно помогает, поле менять нужно через set

beatlov
заказчик
Сообщения: 49
Зарегистрирован: Пн, 22/12/2008 16:39
Имя Фамилия: Владимир Жуков
Откуда: Северные МН

Re: Обновление значения текстового поля

Сообщение beatlov » Вт, 30/04/2013 09:42

все так и делал. не помогает. Еще - может прояснит ситуацию , в первой панели NoTableNavigation стоит

Аватара пользователя
larin
корпорация
Сообщения: 228
Зарегистрирован: Пн, 10/09/2007 12:13
Имя Фамилия: Михаил Ларин
Откуда: ТопCофт
Контактная информация:

Re: Обновление значения текстового поля

Сообщение larin » Чт, 02/05/2013 18:25

Совет 1:

Попробуйте значение переменной от которой зависит отображаемая в верней панели информация присваисвать с помощью оператора SET. После оператора SET вроде автоматически должна активироваться перерисовка экрана.

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

  Set MyVariable := 'New value';


Совет 2:

По опыту, панели с признаком NoTableNavigation лично мне не очень нравиться как они работают. Там есть некоторые ограничения и особенности которые работают не так как у панелей связанных с таблицами. Эти ограничения и особенности не описаны в документации, но на практике могут обернуться всякими неожиданными сюрпризами.

Поэтому я предпочитаю в таких случаях делать панель привязанную к какой то фиктивной таблице. Например в специально созданной для этой цели пустотой таблице в памяти.

Пример

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


Table struct EmptyTable (Empty: LongInt);

Create view
As Select '*'
From
  EmptyTable
;

Screen scFooter ('',,sci1Esc);
  Show at(,10,,) FIXED_Y;
  Table EmptyTable;
Buttons
  cmOk,default,,'Сохранить изменения',,sci1Esc;
  cmCancel,,,'Выход',,sci1Esc;
<<
           <.    Сохранить    .>          <.      Выход      .>
>>
end;


function SomeFunction: boolean;
{
  ReDrawPanel(#EmptyTable);
}


beatlov
заказчик
Сообщения: 49
Зарегистрирован: Пн, 22/12/2008 16:39
Имя Фамилия: Владимир Жуков
Откуда: Северные МН

Re: Обновление значения текстового поля

Сообщение beatlov » Вт, 07/05/2013 09:27

спасибо! с table Struct получилось!

Аватара пользователя
Screw
корпорация
Сообщения: 73
Зарегистрирован: Пт, 14/09/2007 22:54
Имя Фамилия: Виталий Корзюк
Откуда: ТопСофт
Контактная информация:

Re: Обновление значения текстового поля

Сообщение Screw » Чт, 16/05/2013 17:16

Вот работающий пример

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

interface TestNoTableNavigation;
  var AnotherVar: string;
  create view var SomeVar: string;
  from x$files;

  screen DummyScreen;
    show(,,,10);
    notablenavigation;
    fields
      SomeVar: protect;
      AnotherVar: protect;
<<
  SomeVar
  .@@@@@@@@@@@
  AnotherVar
  .@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
  end;

  browse DummyBrowse;
    show(,11);
    table x$files;
    fields
      xf$title 'title': protect;
  end;

  tableevent table x$files;
    cmPositionChanged: {
      AnotherVar := xf$title;
      SomeVar := xf$title;
      RedrawPanel(tnNotable);
    }
  end;
end.


Обратите внимание на параметр tnNoTable в вызове RedrawPanel. Это стандартная константа для обозначения всех узлов типа "не-таблица". Перерисовать анкетный редактор с NoTableNavigation можно только так. Set не помогает - он заточен на работу с табличными полями. Перерисовать содержимое табличного редактора с NoTableNavigation можно аналогичным манером - RescanPanel(tnNoTable).

beatlov
заказчик
Сообщения: 49
Зарегистрирован: Пн, 22/12/2008 16:39
Имя Фамилия: Владимир Жуков
Откуда: Северные МН

Re: Обновление значения текстового поля

Сообщение beatlov » Ср, 29/05/2013 14:08

Спасибо! Очень и очень полезная информация!


Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей