Страница 1 из 1

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

Добавлено: 29 ноя 2006, 17:21
Sytin
Как отловить события нажатия клавиш F7 и F8 ???

Добавлено: 29 ноя 2006, 18:27
m0p3e
cmInsert
cmDelete

Добавлено: 29 ноя 2006, 18:58
Sytin
спасибо

Добавлено: 29 ноя 2006, 19:18
Sytin
Еще один вопрос.
Я вызываю интерфейс, редактирую поле, и нажимаю esc.
Как сделать, чтобы отредактированное поле проапдейтилось перед закрытием интерфейса???

Добавлено: 29 ноя 2006, 19:57
aleks1232321
cmUpdateRecord : {......}

Например
cmUpdateRecord :
{
Update current KatSopr;
}

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

Я думаю помогла бы какая-нибудь команда перехода на другое поле.

Добавлено: 01 дек 2006, 11:17
aleks1232321
Если я правильно понял проблему, то может быть использовать события

cmPositionChanged :
{

}

или

cmCheckField :
{

}

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

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

Вобщем, приведи код для того, что ты подразумеваешь под "заполняю поля".

Добавлено: 05 дек 2006, 18:48
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.

Добавлено: 06 дек 2006, 11:33
coolibin
уфф... интересный подход

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

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

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

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

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