События нажатия клавиш F7 и F8

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

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

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

События нажатия клавиш F7 и F8

Сообщение Sytin »

Как отловить события нажатия клавиш F7 и F8 ???
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

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

Сообщение Sytin »

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

Сообщение Sytin »

Еще один вопрос.
Я вызываю интерфейс, редактирую поле, и нажимаю esc.
Как сделать, чтобы отредактированное поле проапдейтилось перед закрытием интерфейса???
aleks1232321
Постоянный гость
Сообщения: 86
Зарегистрирован: 28 апр 2005, 12:15
Откуда: Москва

Сообщение aleks1232321 »

cmUpdateRecord : {......}

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

Сообщение Sytin »

У меня немного другая проблема.
Я ввожу в поле данные и больше никаких действий не совершаю.
Нажимаю esc, и заполняю поля в таблице из полей в интерфейсе.
Но галактика считает, что в поле в котором были произведены последние изменения осталось прежним.

Я думаю помогла бы какая-нибудь команда перехода на другое поле.
aleks1232321
Постоянный гость
Сообщения: 86
Зарегистрирован: 28 апр 2005, 12:15
Откуда: Москва

Сообщение aleks1232321 »

Если я правильно понял проблему, то может быть использовать события

cmPositionChanged :
{

}

или

cmCheckField :
{

}
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

Sytin писал(а):Я ввожу в поле данные и больше никаких действий не совершаю.
Нажимаю esc, и заполняю поля в таблице из полей в интерфейсе.
Что ты подразумеваешь под "заполняю поля в таблице"? Вопросы нужно более развернутые делать, если хочешь быстро ответ получить.

Если ты вместо того чтобы поменять данные в буфере отсылаешь обновление в базу, то понятно, почему поле "осталось прежним"...

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

Сообщение Sytin »

Есть интерфейс с полем ввода. Если в это поле ввести данные, а затем нажать Enter, то поле обновится. Далее значение из этого поля можно использовать в программе. А если ввести данный и нажать esc, то поле не обновляется, и при дальнейший попытке извлечь данные из этого поля, извлекаются старые данные.


Interface RedaktRasp777 'ђҐ¤ ЄвЁа®ў ­ЁҐ а бЇ®а殮­Ёп' AlwaysReturn;
Show at(1,1,82,26);
create view
var
NrecRasp:comp;
RNRasp:string;
RDRasp:date;
RDFrom,RDTo:date;

TypeSelMC:word;
KatMCSpis:string;
GroupMCSpis:string;
VnKlassSpis:string;
as select *
from KatRasp
where ((NrecRasp==KatRasp.nrec));
parameters
NrecRasp;

screen EditRasp;
show at (1,1,80,24);
fields
RNRasp:NoProtect;
RDRasp:NoProtect;
RDFrom:NoProtect;
RDTo:NoProtect;

TypeSelMC:NoProtect;
KatMCSpis:PickButton,Protect;
GroupMCSpis:PickButton,Protect;
VnKlassSpis:PickButton,Protect;

buttons
cmButLookMC;

<<
Ќ®¬Ґа ‚лЇЁб ­®
.@@@@@@@@ .@@@@@@@@@

„Ґ©бвўгҐв б .@@@@@@@@@ Ї® .@@@@@@@@@

`‚лЎ®а Њ–`
(.) €§ Є в «®Ј ` .@@@@@@@@@@@@
(.) ѓагЇЇл Њ–` .@@@@@@@@@@@@
(.) ‚­Ґи­. Є«.` .@@@@@@@@@@@@

<.‘ЇЁб®Є Њ–.>

>>
end;

HandleEvent
cmInit:{
RNRasp:=KatRasp.NRasp;
RDRasp:=KatRasp.DRasp;
RDFrom:=KatRasp.DFrom;
RDTo:=KatRasp.DTo;

TypeSelMC:=0;
SetFieldState(#KatMCSpis,sfVisible);
ClearFieldState(#GroupMCSpis,sfVisible);
ClearFieldState(#VnKlassSpis,sfVisible);

}
cmCheckField:{
if (CurField=#TypeSelMC){
case TypeSelMC of
0:{
SetFieldState(#KatMCSpis,sfVisible);
ClearFieldState(#GroupMCSpis,sfVisible);
ClearFieldState(#VnKlassSpis,sfVisible);
}
1:{
ClearFieldState(#KatMCSpis,sfVisible);
SetFieldState(#GroupMCSpis,sfVisible);
ClearFieldState(#VnKlassSpis,sfVisible);
}
2:{
ClearFieldState(#KatMCSpis,sfVisible);
ClearFieldState(#GroupMCSpis,sfVisible);
SetFieldState(#VnKlassSpis,sfVisible);
}
end;
}
}
cmPick:{
if (CurField=#KatMCSpis){
delete SPRASPMC where((NrecRasp==SPRASPMC.cRasp));
RunInterface(SelKatMC777,NrecRasp);
}
if (CurField=#GroupMCSpis){
delete SPRASPMC where((NrecRasp==SPRASPMC.cRasp));
RunInterface(SelGroupMC777,NrecRasp);
}
}
cmCancel:{
PutCommand(cmPositionChanged);
PutCommand(cmUpdateRecord);
CloseInterface(cmDefault);
stop;
}
cmClose:{
PutCommand(cmCancel);
}
cmButLookMC:{
RunInterface(LookMC,KatRasp.nrec);
}
cmUpdateRecord:{
KatRasp.NRasp:=RNRasp;
KatRasp.DRasp:=RDRasp;
KatRasp.DFrom:=RDFrom;
KatRasp.DTo:=RDTo;
update current KatRasp;
}
end;
end.
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

уфф... интересный подход

Что-то не пойму, зачем двойной буфер используется?

RNRasp:=KatRasp.NRasp;
...
KatRasp.DRasp:=RDRasp;
update current KatRasp;

Для этого был резон какой-то?
Sytin писал(а): Я вызываю интерфейс, редактирую поле, и нажимаю esc.
Как сделать, чтобы отредактированное поле проапдейтилось перед закрытием интерфейса???
Это произойдет автоматически без всяких дополнительных извратов, например в cmCancel )))
По-моему, ты все усложняешь. Убери свои переменные, убери cmCancel и cmClose и получишь, то, что ты изначально и хотел.
Sytin
Постоянный обитатель
Сообщения: 159
Зарегистрирован: 28 сен 2005, 19:48
Откуда: mos
Контактная информация:

Сообщение Sytin »

На самом деле я cmCancle и cmClose понавтыкал уже чисто эксперементируя от безысходности. Если их убрать тоже нефига не выйдет.

Сама переменная, отвечающая полю не апдейтится, пока на этом поле не нажать ентер или не перейти на другое поле.
Ответить