Embedded-обновление данных

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Embedded-обновление данных

Сообщение evchic »

Такой вопрос:

На фейсе есть Tree
чуть ниже tabbedSheet
в нем встроен фейс

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

Embedded scINFOS1 'Предопределенные данные' interface qwe;
end;
В нем браузер.

Нужно при переходе по дереву обновлять данные в interface qwe(в Браузере)
dp
Местный житель
Сообщения: 216
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Беларусь, Минск
Контактная информация:

Сообщение dp »

если на вскидку (так как не видно всего текста)

и у дерева и у скрина можно прописать атрибут table.

если одна и таже таблица - то будет само отрисовываться,
если разные и то перерисовывайте какими либо путями - ReDrawPanel, ReScanPanel и т.п. по событиям смены позиции в дереве
dP
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

evchic Вам удалось добиться? у меня аналогичная ситуация, поле обновляю во встроенном фейсе (он дочерняя табличка основной) а вверху обновляется только когда меняешь закладку.
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

несовсем сделал по другому
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

evchic :) Как?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

вставте в главный фейс
cmIdle:
{ rescanpanel(tnваша_табла)
}
это поможет 100%.
Другой путь - отправить Notify в cmUpdateRecord дочернего фейса
(но она в доке не описана).
можно еще конечно в cmUpdateRecord попробовать вызвать PutCommand(cmValue30) а в главном по этой команде сделать rescan
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

1. рескан конечно хорошо, но в айдл - не будет грузить систему? что-то не хочется так..
2. с нотифай есть примерчики?
3. во встроенном пут отрабатывает а в родном не ловится....
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

хм. через
notify(cmValue30,0) передалось и поймалось. Только вот ни ресканпанел ни реридрекорд не меняют данные на экране... только мышкой ткнешься - меняется...
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Упс... edward_K спасибо. Не ту таблицу ресканил. Всё отработало.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

По стандарту конечно bindevent надо и возможно какой то промежуточный объектный фейс.
насчет грузить заведите переменную и блокируйте по ней повторное обновление. само собой переменную надо в дочке и обновлять функцией в главном.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

А как во встроенный интерфейс передать нрек, чтобы внутри него произошло позиционирование по нужной записи?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Видимо надо процедуру позиционирования написать и в ней позиционироваться.
И вызывать её перед вызовом окна, где используется этот встроенный интерфейс...
Den_Is
Постоянный обитатель
Сообщения: 169
Зарегистрирован: 08 авг 2005, 20:11
Откуда: Омск

Сообщение Den_Is »

Алексей писал(а):хм. через
notify(cmValue30,0) передалось и поймалось. Только вот ни ресканпанел ни реридрекорд не меняют данные на экране... только мышкой ткнешься - меняется...
1. Чему равен cmValue30?

2. Где и как описать функцию Notify?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

1. распакуйте все архивы в папочке frm и там поиском пройдитесь. Использовать явно я бы не советовал - в следующей версии могет поменяться.
2. Нигде. Эта функция специально разрабатывалась для зарплаты и кадров и кроме как там не используется..
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение 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;
Виталий
Ответить