Страница 1 из 2
Embedded-обновление данных
Добавлено: 24 ноя 2006, 17:56
evchic
Такой вопрос:
На фейсе есть Tree
чуть ниже tabbedSheet
в нем встроен фейс
Код: Выделить всё
Embedded scINFOS1 'Предопределенные данные' interface qwe;
end;
В нем браузер.
Нужно при переходе по дереву обновлять данные в interface qwe(в Браузере)
Добавлено: 26 ноя 2006, 17:29
dp
если на вскидку (так как не видно всего текста)
и у дерева и у скрина можно прописать атрибут table.
если одна и таже таблица - то будет само отрисовываться,
если разные и то перерисовывайте какими либо путями - ReDrawPanel, ReScanPanel и т.п. по событиям смены позиции в дереве
Добавлено: 20 июн 2008, 10:39
Алексей
evchic Вам удалось добиться? у меня аналогичная ситуация, поле обновляю во встроенном фейсе (он дочерняя табличка основной) а вверху обновляется только когда меняешь закладку.
Добавлено: 20 июн 2008, 11:46
evchic
несовсем сделал по другому
Добавлено: 20 июн 2008, 12:05
Алексей
evchic Как?
Добавлено: 20 июн 2008, 12:06
edward_K
вставте в главный фейс
cmIdle:
{ rescanpanel(tnваша_табла)
}
это поможет 100%.
Другой путь - отправить Notify в cmUpdateRecord дочернего фейса
(но она в доке не описана).
можно еще конечно в cmUpdateRecord попробовать вызвать PutCommand(cmValue30) а в главном по этой команде сделать rescan
Добавлено: 20 июн 2008, 12:31
Алексей
1. рескан конечно хорошо, но в айдл - не будет грузить систему? что-то не хочется так..
2. с нотифай есть примерчики?
3. во встроенном пут отрабатывает а в родном не ловится....
Добавлено: 20 июн 2008, 12:41
Алексей
хм. через
notify(cmValue30,0) передалось и поймалось. Только вот ни ресканпанел ни реридрекорд не меняют данные на экране... только мышкой ткнешься - меняется...
Добавлено: 20 июн 2008, 12:46
Алексей
Упс... edward_K спасибо. Не ту таблицу ресканил. Всё отработало.
Добавлено: 20 июн 2008, 13:14
edward_K
По стандарту конечно bindevent надо и возможно какой то промежуточный объектный фейс.
насчет грузить заведите переменную и блокируйте по ней повторное обновление. само собой переменную надо в дочке и обновлять функцией в главном.
Добавлено: 09 июл 2008, 11:37
Алексей
А как во встроенный интерфейс передать нрек, чтобы внутри него произошло позиционирование по нужной записи?
Добавлено: 09 июл 2008, 11:48
Алексей
Видимо надо процедуру позиционирования написать и в ней позиционироваться.
И вызывать её перед вызовом окна, где используется этот встроенный интерфейс...
Добавлено: 08 авг 2008, 11:38
Den_Is
Алексей писал(а):хм. через
notify(cmValue30,0) передалось и поймалось. Только вот ни ресканпанел ни реридрекорд не меняют данные на экране... только мышкой ткнешься - меняется...
1. Чему равен cmValue30?
2. Где и как описать функцию Notify?
Добавлено: 08 авг 2008, 15:58
edward_K
1. распакуйте все архивы в папочке frm и там поиском пройдитесь. Использовать явно я бы не советовал - в следующей версии могет поменяться.
2. Нигде. Эта функция специально разрабатывалась для зарплаты и кадров и кроме как там не используется..
Добавлено: 09 авг 2008, 02:39
Screw
1. Классический метод синхронизации - использование объектных интерфейсов (либо со стороны встроенного интерфейса, либо со стороны контейнера) для управления содержимым друг друга.
Типа этого (управляем встроенным интерфейсом):
objinterface IDriven;
procedure MoveTo(RecordNumber: comp);
...
end;
Понятно, что втроенный интерфейс должен реализовывать IDriven. Контейнер в нужный момент дёргает метод MoveTo, передавая в него номер текущей записи. Встроенный меняет позицию и перерисовывается ({Redraw|Rescan}Panel - в зависимости от того, отображаются данные в скрине или в браузе). Впрочем, перерисовку лучше вынести в отдельный метод. Логично предусмотреть метод для жесткого передергивания записи (ReReadRecord). Синхронизацию лучше выполнять в cmIdle контейнера.
2. Notify рассылает широковещательное сообщение всем вставленным в десктоп интерфейсам (не уверен насчет тех, которые загружены в память, но в деск не вставлены). Кроме кода сообщения, в функцию передаётся дополнительный параметр InfoPtr: longint. Notify возвращает значение, отличное от 0, если какой-либо из интерфейсов, вызывал в обработчике события метод Stop. Значение дополнительного параметра можно получить в обработчике события с помощью функции GetNotificationInfoPtr: longint;