Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2008, 20:27   #11
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Люди, вот что я ещё выяснил: Если идёт поток проверки нажатости scroll lock, например в tTimer:

Код:
...
var
scrollLockIsPress: boolean;
...
procedure tForm1.timerOnTimer(sender: tObject);
begin
   scrollLockIsPress := (getKeySate(VK_SCROLL) and 1) <> 0
end;
...
procedure onHotKeyPress(var message: tWMHotKey);
begin
   if scrollLockIsPress then
      showMessage('Горит')
   else
      showMessage('Не горит'); 
end;
...
Помойму данный код срабатывает только однажды....
Altera вне форума Ответить с цитированием
Старый 07.11.2008, 20:59   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот так работает:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if GetKeyState(VK_SCROLL)=1 then caption:='Горит' else caption:='Неа';
end;
в Таймер поставь задержку меньше.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.11.2008, 21:53   #13
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Стрелка

А чем мой код не устраивает? Работает как надобно. Вместо CheckBox можно другое использовать, хоть лейблы.
Alter вне форума Ответить с цитированием
Старый 08.11.2008, 06:49   #14
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Ладно, спасибо ребята!
А как изменить программно значение кнопки?
Altera вне форума Ответить с цитированием
Старый 08.11.2008, 16:35   #15
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Стрелка Установка состояний клавишь, двумя способами

PHP код:
unit Unit_2;

interface

uses
  Windows
MessagesSysUtilsVariantsClassesGraphicsControlsForms,
  
DialogsStdCtrls;

type
  TForm1 
= class(TForm)
    
CheckBox1TCheckBox;
    
CheckBox2TCheckBox;
    
CheckBox3TCheckBox;
    
procedure CheckBox1Click(SenderTObject);
    
procedure CheckBox2Click(SenderTObject);
    
procedure CheckBox3Click(SenderTObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

type
   TKeyType 
= (ktCapsLockktNumLockktScrollLock);

var
  
Form1TForm1;
  
procedure SetStat(KeyCode :TKeyTypebOn :Boolean);

implementation

{$R *.dfm}

procedure SetStat(KeyCode :TKeyTypebOn :Boolean);
var
   
KBState:TKeyboardState;
   
CodeByte;
begin
 
case KeyCode of
  ktScrollLock
Code := VK_SCROLL;
  
ktCapsLockCode := VK_CAPITAL;
  
ktNumLockCode := VK_NUMLOCK;
 
end;
   
GetKeyboardState(KBState);
 if (
Win32Platform VER_PLATFORM_WIN32_NTthen
 begin
  
if Boolean(KBState[Code])<>bOn then
  begin
   keybd_event
(Code,
               
MapVirtualKey(Code0),
               
KEYEVENTF_EXTENDEDKEY,
               
0);

   
keybd_event(Code,
               
MapVirtualKey(Code0),
               
KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,
               
0);
  
end;
 
end
  
else
 
begin
  KBState
[Code] := Ord(bOn);
  
SetKeyboardState(KBState);
 
end;
end;

procedure TForm1.CheckBox1Click(SenderTObject);
begin // Caps Lock
  // 1- ый способ
 
SetStat(ktCapsLockCheckBox1.Checked);
  
// 2- ой способ
 
keybd_event(VK_CAPITALOrd(CheckBox1.Checked), 00);
 
keybd_event(VK_CAPITALOrd(CheckBox1.Checked), KEYEVENTF_KEYUP0);
end;

procedure TForm1.CheckBox2Click(SenderTObject);
begin // Num Lock
  // 1- ый способ
 
SetStat(ktNumLockCheckBox2.Checked);
  
// 2- ой способ
 
keybd_event(VK_NUMLOCKOrd(CheckBox2.Checked), 00);
 
keybd_event(VK_NUMLOCKOrd(CheckBox2.Checked), KEYEVENTF_KEYUP0);
end;

procedure TForm1.CheckBox3Click(SenderTObject);
begin // Scroll Lock
  // 1- ый способ
 
SetStat(ktScrollLockCheckBox3.Checked);
   
// 2- ой способ
 
keybd_event(VK_SCROLLOrd(CheckBox3.Checked), 00);
 
keybd_event(VK_SCROLLOrd(CheckBox3.Checked), KEYEVENTF_KEYUP0);
end;

end

Последний раз редактировалось Alter; 08.11.2008 в 16:37. Причина: тэг Code неадекватен с этим кодом
Alter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не получается изменить NUM,CAps,scroll Lock Reds Общие вопросы Delphi 1 29.09.2008 15:31
Scroll в DBGrid и StringGrid Roof Компоненты Delphi 2 27.07.2008 17:46
Заставить мигать Scroll Lock snegok74 Общие вопросы Delphi 12 06.06.2008 14:02
Накой кнопка Scroll Lock??? Altera Компьютерное железо 4 05.06.2008 00:42
scroll в webbrouser MaslCS Компоненты Delphi 4 23.01.2008 22:58