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

Приемы и подходы, обмен опытом

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

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

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

Сообщение beatlov »

Добрый день!
Ситуация: интерфейс состоит из двух панелей. На первой панели - текстовые поля (в состоянии skip) и кнопки, на второй панели browse с данными из view. В по мере изменения данных в browse меняется значение одного текстового поля в первой панели, но данные по данному полю обновляются лишь при нажатии кнопки мыши на первой панели или нажатии любой кнопки на первой панели. Все попытки сделать рефрешь данного поля автоматически не увенчались успехом (пробовал и rescanPanel по screen, rereadrecord по полю, изменение статуса c visible на visible, позиционирование на данное текстовое поле) ((( Что делать?
n0where
Сообщения: 72
Зарегистрирован: Вт, 21/12/2010 06:01
Имя Фамилия: Лобастов Александр
Откуда: Сода

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

Сообщение n0where »

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

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

Сообщение beatlov »

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

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

Сообщение larin »

Совет 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 »

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

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

Сообщение Screw »

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

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

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 »

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