Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OnKeyDown - невозможно проверить, зажата ли Ctrl 
:(
    Опции темы
CyraxZ
Дата 31.3.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Невозможно реализовать элементарную вещь - проверить, зажата ли Ctrl
Код

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)

В хелпе:
Код

typedef Set<Classes__1, ssShift, ssDouble>  TShiftState;

А что это за хернь такая - Classes__1 - ни слова.
Ну ведь можно было булевскую переменную заделать - никаких проблем. Обязательно нужно множество...

PM MAIL   Вверх
nworm
Дата 31.3.2009, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 1
Всего: 8



В местной drkb есть примерчик про табуляцию. Может поможет
Код

type
TForm1 = class(TForm)
private
   procedure CMDialogKey(var msg: TCMDialogKey);
     message CM_DIALOGKEY;
end;
 

var
Form1: TForm1;

 

implementation

{$R *.DFM}


procedure TForm1.CMDialogKey(var msg: TCMDialogKey);
begin
if msg.Charcode <> VK_TAB then
   inherited;
end;

 

procedure TForm1.FormKeyDown(Sender: TObject; var Key:
Word; Shift: TShiftState);
begin
if Key = VK_TAB then
   Form1.Caption := 'Tab Key Down!';
end;


Это сообщение отредактировал(а) nworm - 31.3.2009, 19:45
PM MAIL WWW   Вверх
Anikmar
Дата 31.3.2009, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Код

void __fastcall TF_Main::Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift)

{
    if (Key == VK_F5)
        if (Shift.Contains(ssCtrl))
            Application->MessageBox(L"Ctrl + F5",L"Ctrl+key",0);
        else
            Application->MessageBox(L"F5",L"key",0);
}


PM MAIL ICQ   Вверх
CyraxZ
Дата 1.4.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Цитата

В местной drkb есть примерчик про табуляцию. Может поможет

Нет, мне нужен пример использования именно структуры Shift.

Anikmar, это то, что нужно:
Код

hift.Contains(ssCtrl)

Спасибо.


PM MAIL   Вверх
Usper
Дата 2.4.2009, 08:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Цитата(CyraxZ @  31.3.2009,  18:58 Найти цитируемый пост)
Ну ведь можно было булевскую переменную заделать - никаких проблем. Обязательно нужно множество...


А если надо отловить несколько одновременно нажатых функциональных клавиш (например ctrl+alt+del), что делать? На каждую кнопку свою булеву переменную вводить?


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
mrbrooks
Дата 2.4.2009, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Usper, можно хук повесить.
Однако Task Manager вырубал через реестр (ведь главная цель именно он?  smile )
PM MAIL   Вверх
CyraxZ
Дата 2.4.2009, 12:26 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Цитата

А если надо отловить несколько одновременно нажатых функциональных клавиш (например ctrl+alt+del), что делать? На каждую кнопку свою булеву переменную вводить?

Достаточно 3 булевых переменных. Это не так много.
PM MAIL   Вверх
xvr
Дата 2.4.2009, 14:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(CyraxZ @ 2.4.2009,  12:26)
Цитата

А если надо отловить несколько одновременно нажатых функциональных клавиш (например ctrl+alt+del), что делать? На каждую кнопку свою булеву переменную вводить?

Достаточно 3 булевых переменных. Это не так много.

А если еще и буквы приплюсовать, то немного более сотни булевых переменных понадобится, наверное это тоже не много   smile 
PM MAIL   Вверх
CyraxZ
Дата 3.4.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Цитата

А если еще и буквы приплюсовать, то немного более сотни булевых переменных понадобится, наверное это тоже не много

В 99% случаев используются 3-4 управляющих клавиши. Ну а если метод должен позволять проверять и обычные клавиши в качестве управляющих, то в этом случае к 3-4 булевским переменным достаточно добавить одну универсальную "структуру" (множество или ещё что) для всех клавиш. Нельзя не согласиться, что в этом случае будет достигнута золотая середина, которая, как правило, значительно выигрывает у чисто универсальных реализаций.
PM MAIL   Вверх
xvr
Дата 3.4.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(CyraxZ @ 3.4.2009,  16:10)
В 99% случаев используются 3-4 управляющих клавиши. 

В 99% управляющие клавиши вообще не используются. И тащить в евент пачку булевых переменных явно излишне. 
Цитата

Ну а если метод должен позволять проверять и обычные клавиши в качестве управляющих, то в этом случае к 3-4 булевским переменным достаточно добавить одну универсальную "структуру" (множество или ещё что) для всех клавиш. Нельзя не согласиться, что в этом случае будет достигнута золотая середина, которая, как правило, значительно выигрывает у чисто универсальных реализаций.
Одно множество (каковое как раз и является компактно представленной 'пачкой булевых переменных') как раз и является золотой серединой

PM MAIL   Вверх
Usper
Дата 6.4.2009, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Цитата(mrbrooks @  2.4.2009,  08:31 Найти цитируемый пост)
Однако Task Manager вырубал через реестр (ведь главная цель именно он?   )


Да нет, просто дурацкий пример.  smile 


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0506 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.