Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нажатие клавишь вне программы, Подскажите примерный код 
:(
    Опции темы
ReFleX
  Дата 15.11.2004, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Надо сделать небольшую шпору smile скоро сессия, подскажите код smile smile

Спасибо! smile
PM WWW   Вверх
Mal Hack
Дата 15.11.2004, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата
Я хочу сделать, чтобы при нажатии определённой клавиши программа скрывалась,

Тут сорри, правильного ответа дать не смогу..
Один из вариантов - следующий:
OnIdle у формы. Событие выполняется в момент простоя (не работы) приложения.
Т.е. для отлавливания CapsLock или NumLock можно спокойно использовать.
PM ICQ   Вверх
azesmcar
Дата 15.11.2004, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Через АПИ Функции
Принцип простой, нужна глобальная функция
Пишешь DLL-ку
Там функцию для переxвата нажатой клавиши.
Из своей проги вызываешь SetWindowsHookEx
idHook => WH_KEYBOARD
lpfn => Адрес твоей функции в DLL
dwThreadId => если дашь 0 то клавиши будут отлавливаться для всеx потоков, если дашь конкретный поток то для него.
А дальше через MSDN, если не получиться пиши, пришлю работающий пример...

CALLBACK функция в DLL должна иметь следующий прототип
Код

LRESULT CALLBACK KeyboardProc(          int code,
   WPARAM wParam,
   LPARAM lParam
);



Это сообщение отредактировал(а) azesmcar - 15.11.2004, 17:19
PM   Вверх
JackYF
Дата 16.11.2004, 04:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Люди, вы чего, зачем так сложно?
В программе пишешь примерно такой код:

Код

bool m=GetAsyncKeyState(<код кнопки>);
if (m) //делаем полезные действия;


<Код кнопки> от 0 до 255.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ReFleX
Дата 16.11.2004, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



JackYF
А если кнопка будет нажата вне программы будет работать? smile
PM WWW   Вверх
ReFleX
Дата 16.11.2004, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код
bool m=GetAsyncKeyState(&H78);
if (m){
 Form1->Hide();
}

Выдаёт ошибку в первой строчке: [C++ Error] Unit1.cpp(20): E2451 Undefined symbol 'H78'

Я не тот код кнопки написал?
PM WWW   Вверх
ReFleX
Дата 22.11.2004, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

bool btnHide = GetAsyncKeyState(0x70);
if (btnHide){
Form1->Hide();
}


http://cppbuilder.hotbox.ru/kod.html

Для следующих
PM WWW   Вверх
JackYF
Дата 24.11.2004, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Оно должно работать вне программы! У меня работало

Код кнопки не тот, или что? smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ReFleX
Дата 24.11.2004, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всё спасибо, я разобрался smile
Всё пашет!
PM WWW   Вверх
ano360
Дата 1.2.2007, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 22.5.2006
Где: Москва

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



ReFleX-А где ты этот код вписал?
В каком событии?
разобрался сам-помоги товарисчу


--------------------
Жизнь есть.
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 1.2.2007, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(Mal Hack @  15.11.2004,  12:03 Найти цитируемый пост)
OnIdle у формы. Событие выполняется в момент простоя (не работы) приложения.

или отдельный поток юзать


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
ano360
Дата 1.2.2007, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 22.5.2006
Где: Москва

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



borland с++ builder 6 -  нет у формы события.

Добавлено @ 21:57 
мож OnHide?


--------------------
Жизнь есть.
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 1.2.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



небольшая неточность у Mal Hack, но никто не отменял кнопку F1!!!!!
Код

void __fastcall TForm1::MyIdleHandler(TObject *Sender, bool &Done)
{
 // твой код который выше
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{

  Application->OnIdle = MyIdleHandler;
}




--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
ano360
Дата 2.2.2007, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 22.5.2006
Где: Москва

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



я использовал ApplicationEvents

да, всё это здорого, но OnIdle срабатывает у меня только после того, как я навиду курсон на форму
т.е. код выполняется только после этого.
Наприменр, если я введу

void __fastcall TForm1::ApplicationEvents1Idle(TObject *Sender, bool &Done)
{
bool but = GetAsyncKeyState(VK_CONTROL);
if (but){
        Button1->Caption="ctrl";
}

и нажму ctrl, название поменяется только тогда, когда я наведу курсор на форму

Можно сделать, чтоб менялась мгновенно?


--------------------
Жизнь есть.
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 2.2.2007, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  bool but = GetAsyncKeyState(VK_CONTROL);
if (but){
        Button1->Caption="ctrl";
        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Button1->Caption="none";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ApplicationEvents1Idle(TObject *Sender, bool &Done)
{
Timer1->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ApplicationEvents1Activate(TObject *Sender)
{
Timer1->Enabled=False;
}
//---------------------------------------------------------------------------




--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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