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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2012, 21:57   #1
Erlotaza
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 37
По умолчанию Как в delphi "условить" нажатие ОДНОВРЕМЕННО на кнопки SHIFT и ALT ?

Здравствуйте, если точнее, я хочу сделать так: чтобы программа не реагировала нинакакие клавиши, кроме "SHIFT+ALT" и "CTRL+SHIFT" (т.е переключение раскладки клав.). Я знаю как задать просто 1 кнопку, напрмер, if key=VK_SHIFT, но не знаю как задать одновременное нажатие клавиш alt+shift и ctrl+shift, ?
Заранее благодарен!
Erlotaza вне форума Ответить с цитированием
Старый 15.05.2012, 22:15   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Заведи на каждую из интересующих клавиш по логической переменной и устанавливай ее при нажатии, а при отпускании сбрасывай.
После отработки нажатия, проверь состояние логических переменных.
s-andriano вне форума Ответить с цитированием
Старый 15.05.2012, 22:49   #3
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

Попробуйте такой вариант

Код:
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ((ssAlt in Shift)or(ssCtrl in Shift))and(ssShift in Shift) then
  begin
    MessageBeep(MB_ICONWARNING);
  end;
end;
Miha85193 вне форума Ответить с цитированием
Старый 16.05.2012, 00:40   #4
Erlotaza
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Miha85193 Посмотреть сообщение
Попробуйте такой вариант

Код:
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ((ssAlt in Shift)or(ssCtrl in Shift))and(ssShift in Shift) then
  begin
    MessageBeep(MB_ICONWARNING);
  end;
end;
неа. ALT+TAB работает)
Я нашел уже код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
procedure BlockInput; external 'user32.dll';

implementation
 procedure Block;
asm
  push 1
  call BlockInput
end;

procedure UnBlock;
asm
  push 0
  call BlockInput
end;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Block;
end;

end.
Но теперь новая проблема: мне нужно чтобы можно было вводить буквы в edit. то есть процедура запретила абсолютно все нажатия кнопок, а мне нужно, чтобы обычные (безобидные символьные) кнопки: A-Z нажимались)
ИЛи по другому: мне нужно забиндитить я себе уже сам.., но не знаю как именно все одновременно "CTRL+ALT+DEL", как их вместе записать?

Последний раз редактировалось Erlotaza; 16.05.2012 в 00:48.
Erlotaza вне форума Ответить с цитированием
Старый 16.05.2012, 09:46   #5
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Причем тут ALT+TAB? Это системная комбинация и ваша программа тут ни при чем. Постройте четкую формулировку проблемы, что конкретно нужно и для каких вводов компонентов.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 16.05.2012, 13:36   #6
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
Смех

Цитата:
неа. ALT+TAB работает)
И что, при нажатии Alt+Tab слышен MessageBeep(MB_ICONWARNING)? :D
Miha85193 вне форума Ответить с цитированием
Старый 16.05.2012, 21:23   #7
RibGeDx
Пользователь
 
Аватар для RibGeDx
 
Регистрация: 10.05.2012
Сообщений: 16
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  if (GetKeyState(VK_SHIFT) < 0) and (GetKeyState(18) < 0) then Form1.Close;
end;
RibGeDx вне форума Ответить с цитированием
Старый 17.05.2012, 01:42   #8
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

буквально недавно на форуме задавал такой же вопрос
в итоге нагуглил сам вот такое решение
Код:

...
public
     procedure h_key(var Message: TMessage); message WM_HOTKEY;
{ Public declarations }
  end;
...
procedure TForm2.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, 0, VK_SHIFT, VK_MENU);//вот тут указываешь клавиши, например для shift + alt
end;
...
procedure TForm2.h_key(var Message: TMessage);
begin
  //сам обработчик собственно
end;
...
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnRegisterHotKey(Handle, 0);
end;
unbanned вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение "Толщины" и "Длины" фигуры одновременно 7vlad37 Microsoft Office Excel 2 13.07.2011 17:53
нажатие кнопки "X" на форме strannik Общие вопросы Delphi 6 09.05.2011 02:42
отследить нажатие "Ctrl-Shift" v4567 Общие вопросы C/C++ 0 10.01.2011 22:33
Как "повесить " передачу данных из формы на событие нажатия кнопки типа "button" ? vedro-compota JavaScript, Ajax 10 14.12.2010 21:05
(SendMessage)нажатие кнопки "Отключить" в Сетевом подключении xena Win Api 2 30.11.2009 12:07