как заморозить группу кнопок на VB6, чтобы не бикало....

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ТАДКОМ
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 04.09.2003 (Чт) 8:25
Откуда: Молдова, г.Бендеры

как заморозить группу кнопок на VB6, чтобы не бикало....

Сообщение ТАДКОМ » 04.09.2003 (Чт) 11:15

Написал прогу под ХР на VB6, для охраны своего дома, но при сработке более 3-4 клавиш (датчиков) клава пищит и не воспринимает отработку другой клавиши (датчика). Помогите советом.....
Александр

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.09.2003 (Чт) 11:29

Не поможем.
В руководствам ко всяким играм часто пишут: если у вас клава пищит от одновременных нажатий, то это такая клава, а прога тут не причём.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ТАДКОМ
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 04.09.2003 (Чт) 8:25
Откуда: Молдова, г.Бендеры

Re: как заморозить группу кнопок на VB6, чтобы не бикало....

Сообщение ТАДКОМ » 05.09.2003 (Пт) 7:59

[Нашёл статью Дмитрия Катерова - "Программирование клавиатуры", где популярно всё описано, и вроде всё понятно, то есть ставится заплата на прерывание 9 в BIOSе и приводится программа.... ноооо на Pascalе в котором я Я идиот! Убейте меня, кто-нибудь!... дуб..... Может кто поможет как это .. записать на VB6...
текст его проги:

var SvInt09 : procedure;
SvExitProc : pointer;
IsBIOSActive: boolean;
KeyPressed : array[0..255] of boolean;
CurKey : byte;

procedure ProcessKeyb;
const PrevKey: byte=0;
var key,IsGray: byte;
begin
key:=Port[$60];
if PrevKey=224 then IsGray:=$80 else IsGray:=0;
if key<>224 then { если не признак черной
клавиши" }
begin

if key>127 then { клавиша отпущена }
KeyPressed[key-128+IsGray]:=false
else { клавиша нажата }
KeyPressed[key+IsGray]:=true;
end;
if key<128 then CurKey:=key;
PrevKey:=key;
end;

procedure NewInt09; interrupt;
begin
ProcessKeyb;
if IsBIOSActive then { не блокировать BIOS }
begin Inline($9C); SvInt09 end;
else Port[$20]:=$20; { если нужно блокировать }
end;

procedure CloseKeyboard; forward;
procedure OpenKeyboard(LockBIOS: boolean)
begin
FillChar(KeyPressed,256,0); CurKey:=0;
GetIntVec(9,@SvInt09);
SetIntVec(9,@NewInt09);
IsBIOSActive:=not LockBIOS;
SvExitProc:=ExitProc;
ExitProc:=@CloseKeyboard;
end;

procedure CloseKeyboard;
begin
if @SvInt09=nil then Exit; { клавиатура не открыта }
SetIntVec(9,@SvInt09);
@SvInt09:=nil;
ExitProc:=SvExitProc;
end;

Теперь в любом (!) месте программы можно анализировать массив KeyPressed, не задумываясь о том, каким образом он обновляется. Например:

if KeyPressed[72] and KeyPressed[77] then ...
{ если одновременно нажаты вверх и вправо, то ... }


Заранее буду очень благодарен...
Александр


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 18

    TopList