Посылается ли окну какое-нибудь событие типа cmIdle???

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

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

Ответить
Sytin
Постоянный обитатель
Сообщения: 159
Зарегистрирован: 28 сен 2005, 19:48
Откуда: mos
Контактная информация:

Посылается ли окну какое-нибудь событие типа cmIdle???

Сообщение Sytin »

Посылается ли в интерфейс какое-нибудь событие, когда пользователь ничего не делает???

Или какое нибудь событие типа cmInit, только когда окно уже проинициализированно?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

дык сделайте обработку cmIdle и попробуйте :). Это оно и есть. где то в cfg вроде был параметр, через сколько оно срабатывает. А если вам надо галку закрыть, так это еще в 8_00 сделано.
Sytin
Постоянный обитатель
Сообщения: 159
Зарегистрирован: 28 сен 2005, 19:48
Откуда: mos
Контактная информация:

Сообщение Sytin »

Проблема следущая. Я вызываю интерфейс, програмно фокусируюсь на поле выбора и посылаю событие cmPick, открывается интерфейс выбора ЦО, соответствующий этому полю. Выбираю нужный ЦО, затем програмно посылаю событие cmClose. Проблема в том, что при открытии интерфейса не успевают проинициализироваться поля и соответственно при выходе в базе апдейтятся пустыми значениями.
Вот хочется какое нибудь событие типа cmInit, только чтобы оно срабатывало после того как проинициализируются все поля. Ну и конечно же нежелательно трогать cfg...
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

код в студию :).
или лог.
Как вы догадываетесь, что поля не проинициализировались?
и что rereadrecord не помогает? или rescanpanel?. Фейс вами вызываемй это ваш? Если да, то вам никто не мешает сделать вызов фейса выбора в cmIdle, ну или тайемр стартануть на событие. Если же стандартный, то интересно как вы програмно сие вызываете. Была такая функция Notify еще, но это к Screw :).
Sytin
Постоянный обитатель
Сообщения: 159
Зарегистрирован: 28 сен 2005, 19:48
Откуда: mos
Контактная информация:

Сообщение Sytin »

Ну выложить код это будет многовато))
Кароче я домисал исходник интерфейса Dogovor.
Мне необходимо в окне редактирования договора добавить поле выбора ЦО, однако после выбора ЦО должна сработать функция замены ЦО во всем документе, как при выборе ЦО в интерфейсе AttrDog (который вызывается по нажатию кнопки "Контрагент1"). Копировать соответствующий кусок кода из AttrDog в Dogovor накладно, так как там повторяются какие-то переменные, да и вообще код в дальнейшем необходимо править под патчи, а соответственно искать различия в отпатчеванных исходниках и исправленных мной станет более проблемотично.

Как сделал я. Интерфейс AttrDog вызывается с 2-мя параметрами. 1-й параметр это 0,если вызван по кнопке "Контрагент1" и 1,если вызван по кнопке "Контрагент2". Я в AttrDog при инициализации предусматрел обработку первого параметра со значением 2, это означает что интерфейс вызван с добавленной мной строки выбора ЦО. При выборе ЦО открывается AttrDog, курсор фокусируется на строке выбора ЦО и посылается команда cmPick, соответственно запускается интерфейс выбора ЦО. После того как мы выбрали ЦО мы закрываем интерфейс выбора ЦО и в обработчике cmPick в конце посылается команда cmClose, как раз в это время срабатывает функция, которая предлагает изменить ЦО в ПКП и т.д.

И все работает отлично. Только при вызове AttrDog не успевают проинициализироваться поля, а сразу курсор прыгает на поле выбора ЦО, и при последующем закрытии интерфейса поля еще не проинициализированны, и все поля задействованные в интерфейсе AttrDog обнуляются функцией, которая апдейтит изменения.

Куски кода:

Interface AttrDog 'Просмотр реквизитов контрагента' ('', hcDogRekvizitKontr, sci13Esc) EscClose;
.......................
cmPick:
{
......................
if (MyAddition) {
PutCommand(cmClose);
}
}
...........................
cmInit:{
MyAddition:=FALSE;
if (pNumber=2){
pNumber:=0;
MyAddition:=TRUE;
SelectFormat(scAttrDogPeople);
SelectField (#KATPODROTV.NAME);
PutCommand(cmPick);
}
}
...........................
end.

И вызывается это в интерфейсе Dogovor

Interface Dogovor ...............
............
cmPick:{
if (CurField=#FPCOD.Name){
UpDateInsertDogovor;
if ( OldSubject1 <> AttrDog.Subject1 )
if ( update current AttrDog <> tsOk )
{}

RunInterface('AttrDog', word(2), Dogovor.nRec);
RereadRecord(#Dogovor);
}
.......
}
...............
end.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

в cmInit не хватает первой строкой
Inherited::HandleEvent(cmInit)
этого должно хватить.
да и в cmPick нужно наверное тоже, но чуть хитрее.
либо добавте cmIdle и уже в нем выберите значение и закройте фейс.
Ответить