Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать горячие клавиши, если окно не активно, используя THotKey 
V
    Опции темы
Stavsandro
Дата 9.8.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(586 @ 9.8.2008,  16:57)
Не лучше. Это пустая трата глобальных ресурсов. Читай MSDN:
Цитата(MSDN)
id
[in] Specifies the identifier of the hot key. No other hot key in the calling thread should have the same identifier. An application must specify a value in the range 0x0000 through 0xBFFF. A shared dynamic-link library (DLL) must specify a value in the range 0xC000 through 0xFFFF (the range returned by the GlobalAddAtom function). To avoid conflicts with hot-key identifiers defined by other shared DLLs, a DLL should use the GlobalAddAtom function to obtain the hot-key identifier. 

В приложении идентификаторы от 0 до 0xBFFF не должны ни с чем конфликтовать, а их уникальность должен обеспечивать программист. С этим проблем не должно быть.

Спасибо за документацию.. Буду учитывать smile
PM MAIL WWW ICQ   Вверх
Great Cornholio
Дата 9.8.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



что-то ниосилил. я это... smile 
PM   Вверх
586
Дата 10.8.2008, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
Ещё вопрос: Как можно #define хоть сколько hotkey? количество задаётся в программе.

Задай нормально вопрос. Ничего не понятно.

Цитата(Great Cornholio @  9.8.2008,  23:29 Найти цитируемый пост)
 smile   

Пример чего?

Код
void __fastcall TForm1::wm_hotkey(TWMHotKey &hk)
{
    if(hk.HotKey == /*от 0 до 0xBFFF*/1) MessageBox(Handle, "CTRL+E pressed", "", 0);
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Button2->Tag = !Button2->Tag;
    if(Button2->Tag) {
        RegisterHotKey(Handle, /*от 0 до 0xBFFF*/1, MOD_CONTROL, 'E');
        Caption = "ON";
    } else {
        UnregisterHotKey(Handle, MY_HOTKEY_ID);
        Caption = "OFF";
    }
}

Что здесь непонятного?
PM   Вверх
Great Cornholio
Дата 12.8.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Что-то у меня ощущение лишнего кода в программе:
Цитата(586)

.cpp

Код

#define MY_HOTKEY_ID    1

void __fastcall TForm1::wm_hotkey(TWMHotKey &hk)
{
    if(hk.HotKey == 1) MessageBox(Handle, "CTRL+E pressed", "", 0);
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Button2->Tag = !Button2->Tag;
    if(Button2->Tag) {
        RegisterHotKey(Handle, MY_HOTKEY_ID, MOD_CONTROL, 'E');
        Caption = "ON";
    } else {
        UnregisterHotKey(Handle, MY_HOTKEY_ID);
        Caption = "OFF";
    }
}




Ну... Я сделал так:

cpp
Код

#define TRAYDOWN    1
#define PASTE1    2
#define PASTE2    3
#define PASTE3    4
#define PASTE4    5
#define PASTE5    6

//blablalba
void __fastcall TForm2::OKClick(TObject *Sender)
{
//в трей- обратно
        ShortCutToKey(HotKey0->HotKey, key, st);
        if(st.Contains(ssShift)) mod |= MOD_SHIFT;
        if(st.Contains(ssCtrl)) mod |= MOD_CONTROL;
        if(st.Contains(ssAlt)) mod |= MOD_ALT;
        RegisterHotKey(Handle, TRAYDOWN, mod, key);
//вставка1
        mod = 0;
        ShortCutToKey(HotKey1->HotKey, key, st);
        if(st.Contains(ssShift)) mod |= MOD_SHIFT;
        if(st.Contains(ssCtrl)) mod |= MOD_CONTROL;
        if(st.Contains(ssAlt)) mod |= MOD_ALT;
        RegisterHotKey(Handle, PASTE1, mod, key);
//вставка2
        mod = 0;
        ShortCutToKey(HotKey2->HotKey, key, st);
        if(st.Contains(ssShift)) mod |= MOD_SHIFT;
        if(st.Contains(ssCtrl)) mod |= MOD_CONTROL;
        if(st.Contains(ssAlt)) mod |= MOD_ALT;
        RegisterHotKey(Handle, PASTE2, mod, key);
//вставка3
        mod = 0;
        ShortCutToKey(HotKey3->HotKey, key, st);
        if(st.Contains(ssShift)) mod |= MOD_SHIFT;
        if(st.Contains(ssCtrl)) mod |= MOD_CONTROL;
        if(st.Contains(ssAlt)) mod |= MOD_ALT;
        RegisterHotKey(Handle, PASTE3, mod, key);
//вставка4
        mod = 0;
        ShortCutToKey(HotKey4->HotKey, key, st);
        if(st.Contains(ssShift)) mod |= MOD_SHIFT;
        if(st.Contains(ssCtrl)) mod |= MOD_CONTROL;
        if(st.Contains(ssAlt)) mod |= MOD_ALT;
        RegisterHotKey(Handle, PASTE4, mod, key);
//вставка5
        mod = 0;
        ShortCutToKey(HotKey5->HotKey, key, st);
        if(st.Contains(ssShift)) mod |= MOD_SHIFT;
        if(st.Contains(ssCtrl)) mod |= MOD_CONTROL;
        if(st.Contains(ssAlt)) mod |= MOD_ALT;
        RegisterHotKey(Handle, PASTE5, mod, key);
}
//ещё blablabla
void __fastcall TForm2::wm_hotkey(TWMHotKey &hk)
{
//трей- обратно
    if(hk.HotKey == 1)
    Form1->N6Click(Form1->N6);
//вставка1
    if(hk.HotKey == 2)
    {
    Edit1->SelectAll();
    Edit1->CopyToClipboard();
    Edit1->SelStart = -1;
    keybd_event(VK_CONTROL, 0,0,0);
    keybd_event('V', 0,0,0);
    keybd_event('V', 0,KEYEVENTF_KEYUP,0);
    keybd_event(VK_CONTROL, 0,KEYEVENTF_KEYUP,0);
    }
//вставка2
    if(hk.HotKey == 3)
    {
    Edit2->SelectAll();
    Edit2->CopyToClipboard();
    Edit2->SelStart = -1;
    keybd_event(VK_CONTROL, 0,0,0);
    keybd_event('V', 0,0,0);
    keybd_event('V', 0,KEYEVENTF_KEYUP,0);
    keybd_event(VK_CONTROL, 0,KEYEVENTF_KEYUP,0);
    }
//вставка3
    if(hk.HotKey == 4)
    {
    Edit3->SelectAll();
    Edit3->CopyToClipboard();
    Edit3->SelStart = -1;
    keybd_event(VK_CONTROL, 0,0,0);
    keybd_event('V', 0,0,0);
    keybd_event('V', 0,KEYEVENTF_KEYUP,0);
    keybd_event(VK_CONTROL, 0,KEYEVENTF_KEYUP,0);
    }
//вставка4
    if(hk.HotKey == 5)
    {
    Edit4->SelectAll();
    Edit4->CopyToClipboard();
    Edit4->SelStart = -1;
    keybd_event(VK_CONTROL, 0,0,0);
    keybd_event('V', 0,0,0);
    keybd_event('V', 0,KEYEVENTF_KEYUP,0);
    keybd_event(VK_CONTROL, 0,KEYEVENTF_KEYUP,0);
    }
//вставка5
    if(hk.HotKey == 6)
    {
    Edit5->SelectAll();
    Edit5->CopyToClipboard();
    Edit5->SelStart = -1;
    keybd_event(VK_CONTROL, 0,0,0);
    keybd_event('V', 0,0,0);
    keybd_event('V', 0,KEYEVENTF_KEYUP,0);
    keybd_event(VK_CONTROL, 0,KEYEVENTF_KEYUP,0);
    }

}
 


.h
Код

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

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <FileCtrl.hpp>
#include <Buttons.hpp>
#include <ComCtrls.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published:    // IDE-managed Components
        TSpeedButton *OK;
        TSpeedButton *cancel;
        TFileListBox *skins;
        TMemo *skin;
        TMemo *pref;
        TPageControl *PageControl1;
        TTabSheet *TabSheet1;
        TTabSheet *TabSheet2;
        TTabSheet *TabSheet3;
        TLabel *Label1;
        TLabel *Label2;
        TListBox *skinlist;
        THotKey *HotKey0;
        THotKey *HotKey1;
        THotKey *HotKey2;
        THotKey *HotKey3;
        THotKey *HotKey4;
        THotKey *HotKey5;
        TEdit *Edit1;
        TEdit *Edit2;
        TEdit *Edit3;
        TEdit *Edit4;
        TEdit *Edit5;
        TLabel *Label4;
        TLabel *Label3;
        TCheckBox *CheckBox1;
        TCheckBox *CheckBox2;
        TLabel *Label5;
        TLabel *Label6;
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall OKClick(TObject *Sender);
        void __fastcall skinlistClick(TObject *Sender);
        void __fastcall cancelClick(TObject *Sender);
        void __fastcall CheckBox1Click(TObject *Sender);
        void __fastcall CheckBox2Click(TObject *Sender);
private:    // User declarations
    void __fastcall wm_hotkey(TWMHotKey&);
public:        // User declarations
                bool ontop;
        __fastcall TForm2(TComponent* Owner);
        BEGIN_MESSAGE_MAP
                MESSAGE_HANDLER(WM_HOTKEY, TWMHotKey, wm_hotkey);
        END_MESSAGE_MAP(TForm);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif




Здесь всего 6 гор. клавиш. Мне надобно столько, сколько захочет пользователь.
Вообще это запоминальщик паролей, причём пока что ламерский. Даже кодировки паролей нет. Но функция быстрой вставки - довольно удобная вещь и меня уже один попросил сделать 7 полей вместо пяти. Так что решил достучаться и узнать, как сделать их столько, сколько нужно юзеру

В случае чего программа в рабочем действии здесь

Это сообщение отредактировал(а) Great Cornholio - 12.8.2008, 22:41
PM   Вверх
586
Дата 13.8.2008, 05:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Набросал небольшой пример. Смысл в том, чтобы хранить информацию о хоткее в массиве, а идентификатор хоткея символизирует индекс в массиве. В качестве массива в примере был ListBox.
Хоткеи можно хранить в двух видах - в числовом - HotKey1->HotKey, и текстовом - ShortCutToText(HotKey1->HotKey).

Это сообщение отредактировал(а) 586 - 15.8.2008, 23:49
PM   Вверх
Great Cornholio
Дата 15.8.2008, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



WinSkinC6.bpi
flash.bpi
что-то не нет у меня этих файлов

Это сообщение отредактировал(а) Great Cornholio - 15.8.2008, 23:10
PM   Вверх
586
Дата 15.8.2008, 23:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Great Cornholio @  16.8.2008,  00:09 Найти цитируемый пост)
WinSkinC6.bpi
flash.bpi
что-то не нет у меня этих файлов

Я эти вещи в проекте не использовал. Проект должен собираться без этих файлов. Видимо эти файлы по дефолту в билдере прописались.

Присоединённый файл ( Кол-во скачиваний: 16 )
Присоединённый файл  hotkey_test_1_1.rar 13,29 Kb
PM   Вверх
Great Cornholio
Дата 17.8.2008, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

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

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

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

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


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

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


 




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


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

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