Добрый день!
Ситуация: интерфейс состоит из двух панелей. На первой панели - текстовые поля (в состоянии skip) и кнопки, на второй панели browse с данными из view. В по мере изменения данных в browse меняется значение одного текстового поля в первой панели, но данные по данному полю обновляются лишь при нажатии кнопки мыши на первой панели или нажатии любой кнопки на первой панели. Все попытки сделать рефрешь данного поля автоматически не увенчались успехом (пробовал и rescanPanel по screen, rereadrecord по полю, изменение статуса c visible на visible, позиционирование на данное текстовое поле) ((( Что делать?
Обновление значения текстового поля
-
- Сообщения: 72
- Зарегистрирован: Вт, 21/12/2010 06:01
- Имя Фамилия: Лобастов Александр
- Откуда: Сода
Re: Обновление значения текстового поля
Рескан или ReReadRecord - обычно помогает, поле менять нужно через set
-
- заказчик
- Сообщения: 49
- Зарегистрирован: Пн, 22/12/2008 16:39
- Имя Фамилия: Владимир Жуков
- Откуда: Северные МН
Re: Обновление значения текстового поля
все так и делал. не помогает. Еще - может прояснит ситуацию , в первой панели NoTableNavigation стоит
- larin
- топ-софт
- Сообщения: 228
- Зарегистрирован: Пн, 10/09/2007 12:13
- Имя Фамилия: Михаил Ларин
- Откуда: ТопCофт
- Контактная информация:
Re: Обновление значения текстового поля
Совет 1:
Попробуйте значение переменной от которой зависит отображаемая в верней панели информация присваисвать с помощью оператора SET. После оператора SET вроде автоматически должна активироваться перерисовка экрана.
Совет 2:
По опыту, панели с признаком NoTableNavigation лично мне не очень нравиться как они работают. Там есть некоторые ограничения и особенности которые работают не так как у панелей связанных с таблицами. Эти ограничения и особенности не описаны в документации, но на практике могут обернуться всякими неожиданными сюрпризами.
Поэтому я предпочитаю в таких случаях делать панель привязанную к какой то фиктивной таблице. Например в специально созданной для этой цели пустотой таблице в памяти.
Пример
Попробуйте значение переменной от которой зависит отображаемая в верней панели информация присваисвать с помощью оператора SET. После оператора SET вроде автоматически должна активироваться перерисовка экрана.
Код: Выделить всё
Set MyVariable := 'New value';
По опыту, панели с признаком 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);
}
-
- заказчик
- Сообщения: 49
- Зарегистрирован: Пн, 22/12/2008 16:39
- Имя Фамилия: Владимир Жуков
- Откуда: Северные МН
Re: Обновление значения текстового поля
спасибо! с table Struct получилось!
- Screw
- топ-софт
- Сообщения: 73
- Зарегистрирован: Пт, 14/09/2007 22:54
- Имя Фамилия: Виталий Корзюк
- Откуда: ТопСофт
- Контактная информация:
Re: Обновление значения текстового поля
Вот работающий пример
Обратите внимание на параметр tnNoTable в вызове RedrawPanel. Это стандартная константа для обозначения всех узлов типа "не-таблица". Перерисовать анкетный редактор с NoTableNavigation можно только так. Set не помогает - он заточен на работу с табличными полями. Перерисовать содержимое табличного редактора с NoTableNavigation можно аналогичным манером - RescanPanel(tnNoTable).
Код: Выделить всё
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.
-
- заказчик
- Сообщения: 49
- Зарегистрирован: Пн, 22/12/2008 16:39
- Имя Фамилия: Владимир Жуков
- Откуда: Северные МН
Re: Обновление значения текстового поля
Спасибо! Очень и очень полезная информация!