и у дерева и у скрина можно прописать атрибут table.
если одна и таже таблица - то будет само отрисовываться,
если разные и то перерисовывайте какими либо путями - ReDrawPanel, ReScanPanel и т.п. по событиям смены позиции в дереве
evchic Вам удалось добиться? у меня аналогичная ситуация, поле обновляю во встроенном фейсе (он дочерняя табличка основной) а вверху обновляется только когда меняешь закладку.
вставте в главный фейс
cmIdle:
{ rescanpanel(tnваша_табла)
}
это поможет 100%.
Другой путь - отправить Notify в cmUpdateRecord дочернего фейса
(но она в доке не описана).
можно еще конечно в cmUpdateRecord попробовать вызвать PutCommand(cmValue30) а в главном по этой команде сделать rescan
1. рескан конечно хорошо, но в айдл - не будет грузить систему? что-то не хочется так..
2. с нотифай есть примерчики?
3. во встроенном пут отрабатывает а в родном не ловится....
хм. через
notify(cmValue30,0) передалось и поймалось. Только вот ни ресканпанел ни реридрекорд не меняют данные на экране... только мышкой ткнешься - меняется...
По стандарту конечно bindevent надо и возможно какой то промежуточный объектный фейс.
насчет грузить заведите переменную и блокируйте по ней повторное обновление. само собой переменную надо в дочке и обновлять функцией в главном.
Видимо надо процедуру позиционирования написать и в ней позиционироваться.
И вызывать её перед вызовом окна, где используется этот встроенный интерфейс...
Алексей писал(а):хм. через
notify(cmValue30,0) передалось и поймалось. Только вот ни ресканпанел ни реридрекорд не меняют данные на экране... только мышкой ткнешься - меняется...
1. распакуйте все архивы в папочке frm и там поиском пройдитесь. Использовать явно я бы не советовал - в следующей версии могет поменяться.
2. Нигде. Эта функция специально разрабатывалась для зарплаты и кадров и кроме как там не используется..
1. Классический метод синхронизации - использование объектных интерфейсов (либо со стороны встроенного интерфейса, либо со стороны контейнера) для управления содержимым друг друга.
Типа этого (управляем встроенным интерфейсом):
objinterface IDriven;
procedure MoveTo(RecordNumber: comp);
...
end;
Понятно, что втроенный интерфейс должен реализовывать IDriven. Контейнер в нужный момент дёргает метод MoveTo, передавая в него номер текущей записи. Встроенный меняет позицию и перерисовывается ({Redraw|Rescan}Panel - в зависимости от того, отображаются данные в скрине или в браузе). Впрочем, перерисовку лучше вынести в отдельный метод. Логично предусмотреть метод для жесткого передергивания записи (ReReadRecord). Синхронизацию лучше выполнять в cmIdle контейнера.
2. Notify рассылает широковещательное сообщение всем вставленным в десктоп интерфейсам (не уверен насчет тех, которые загружены в память, но в деск не вставлены). Кроме кода сообщения, в функцию передаётся дополнительный параметр InfoPtr: longint. Notify возвращает значение, отличное от 0, если какой-либо из интерфейсов, вызывал в обработчике события метод Stop. Значение дополнительного параметра можно получить в обработчике события с помощью функции GetNotificationInfoPtr: longint;