Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Активность главного окна 
V
    Опции темы
Maycal
Дата 12.1.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброе время суток. Скажите пожалуйста, как сделать так, чтобы метод выполнялся только в том случае, если форма активна? 
--------------------
Да помоги кодеру, а значит - ближнему своему!
PM MAIL WWW ICQ Skype MSN   Вверх
Lazin
Дата 12.1.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Наверное определив активна-ли форма или нет..
TForm::Active

Добавлено через 38 секунд
Код

if (myForm->Active)
{
  my_method();
}

PM MAIL Skype GTalk   Вверх
Maycal
Дата 12.1.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо. Это я собственно к чему спросил: есть метод, который перехватывает нажатие кнопок control+v. Метод описан в ApplicationEvents1Message:
Код

void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{
RHKret = RegisterHotKey(Edit1->Handle, 0x12F, MOD_CONTROL, VK_V);
if (Msg.message == WM_HOTKEY)
{
if (Msg.wParam == 0x12F)
{
ShowMessage ("Кнопка перехвачена");
}
}
}

но дело в том, что сочитание этих клавиш, кроме как в моей программе - нигде не работает.
То есть невозможно что-либо скопировать используя сочитание ctrl + v.
Я думал что выйду из этого положения следующим образом: если форма активна, то нажатие кнопок регестрируется, если не активна - метод игнорируется. Но так не получается. 
Единственное что, просто сообщение ShowMessage ("Кнопка перехвачена"); не появляется, а кнопки по прежнему не хотят работать в других приложениях. Что можно сделать?  

Это сообщение отредактировал(а) Maycal - 12.1.2008, 15:06
--------------------
Да помоги кодеру, а значит - ближнему своему!
PM MAIL WWW ICQ Skype MSN   Вверх
Maycal
Дата 12.1.2008, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как сделать локальный перехват нажатия клавишь? 
--------------------
Да помоги кодеру, а значит - ближнему своему!
PM MAIL WWW ICQ Skype MSN   Вверх
artsb
Дата 12.1.2008, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Что подразумевается под "локальный"?



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Maycal
Дата 12.1.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Чтобы клавиши перехватывались только в моей программе, а не вовсей винде
--------------------
Да помоги кодеру, а значит - ближнему своему!
PM MAIL WWW ICQ Skype MSN   Вверх
artsb
Дата 12.1.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Они и так будут перехватываться только в твоей программе.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Maycal
Дата 13.1.2008, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



нет, в том то и дело, что сочитание клавишь ctrl+V не работают в винде. Не в форуме, не в чате, не в ворде, неработает из-за этой функции. Появляется сообщение ShowMessage ("Кнопка перехвачена");
А должно быть только в программе, тоесть не влиляло на работу винды
--------------------
Да помоги кодеру, а значит - ближнему своему!
PM MAIL WWW ICQ Skype MSN   Вверх
artsb
Дата 13.1.2008, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Обрабатывайте всё здесь:
Код

void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{

}

и проблем быть не должно.

ЗЫ не забудте только поставить KeyPreview в true.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Maycal
Дата 13.1.2008, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ябы с удовольствием, но не знаю кода кнопочки control...

Добавлено через 1 минуту и 37 секунд
смотрел в таблицах, сказано что код кнопки 17, но он не работает

Добавлено через 1 минуту и 58 секунд
KeyPreview в true
--------------------
Да помоги кодеру, а значит - ближнему своему!
PM MAIL WWW ICQ Skype MSN   Вверх
artsb
Дата 13.1.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Тогда так:
Код

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Shift.Contains(ssCtrl))
{
        if(Key==86)  ShowMessage("Ctrl+V");
}
}

Кстати, сработало без KeyPreview=true.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Maycal
Дата 13.1.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо большое! У меня такая проблема: когда нажимаешь сочитание клавишь (Ctrl+ X) то в Edit1 появляются непонятные символы. Как этого избежать?

--------------------
Да помоги кодеру, а значит - ближнему своему!
PM MAIL WWW ICQ Skype MSN   Вверх
artsb
Дата 13.1.2008, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А что вы делаете этим сочетанием клавиш? Работаете с буфером? Как? Покажите код.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Maycal
Дата 13.1.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

int g = 0;
if(Clipboard()->HasFormat(CF_TEXT))
{
Odni3 = true;
int BufferSize = Clipboard()->AsText.Length() + 1;
char *Buffer = new char[BufferSize];
ZeroMemory(Buffer, BufferSize);
Clipboard()->GetTextBuf(Buffer, BufferSize);
int i, z;
for(i = 0; i < BufferSize - 1; i++)
for(z = 0; z < BufferSize; z++)
if(IsCharAlpha(Buffer[i]) || Buffer[i] == '!' || Buffer[i] == '+' || Buffer[i] == '*' || Buffer[i] == '/' || Buffer[i] == '.' || Buffer[i] == ','
|| Buffer[i] == '@' || Buffer[i] == '"' || Buffer[i] == '#' || Buffer[i] == '¹' || Buffer[i] == '$'
|| Buffer[i] == ';' || Buffer[i] == '%' || Buffer[i] == '^' || Buffer[i] == ':' || Buffer[i] == '?'
|| Buffer[i] == '&' || Buffer[i] == '*' || Buffer[i] == '(' || Buffer[i] == ')' || Buffer[i] == '='
|| Buffer[i] == '`' || Buffer[i] == '~' || Buffer[i] == '|' || Buffer[i] == '<' || Buffer[i] == '>')
{
g++;
if (g < 2)
{
Odni = true;
}
if (Odni == true)
{
Application->MessageBoxA("Â ïîëå ìîæíî êîïèðîâàòü òîëüêî öèôðû", "Îøèáêà", 0+48);
Odni = false;
Odni2 = true;
}
}
if (Odni2 == false)
{
int x = 20 - z;
int y = x * -1;
if (i <= 19)
{
Edit1->Text = Clipboard()->AsText;
}
else
{
Edit1->Text = Clipboard()->AsText.Delete(Edit1->Text.Length(), y);
}
}
}
if (Odni2 = true)
{
Odni2 = false;
}
if (Odni3 != true)
{
Application->MessageBoxA("Â ïîëå ìîæíî êîïèðîâàòü òîëüêî öèôðû", "Îøèáêà", 0+48);
}
Odni3 = false;
}

P.S здесь еще разные системы предотвращения вставки алфавитного символа, вставки данных кроме текста, ограничение по длине числа и т.д
--------------------
Да помоги кодеру, а значит - ближнему своему!
PM MAIL WWW ICQ Skype MSN   Вверх
artsb
Дата 13.1.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Всё что вы вставляете закорючки или только некоторые символы? Как вы копируете в буфер?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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