C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Програмный Ctrl+F
Jess
  Отправлено: 17.07.2004, 05:56


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Приветствую всех....Народ подскажите как в CppWebBrowser програмно вызвать диалог поиска, тоесть при нажатии кнопки фокусился CppWebBrowser и вылетало окошко поиска (Ctrl+F) для дальнейшего поика на странице........

За ранее благодарствую...

Отредактировано Jess — 17/07/2004, 07:02
exp
Отправлено: 17.07.2004, 21:35


Мастер участка

Группа: Участник
Сообщений: 304



На форме CppWebBrowser (Internet), ActionList (Standart), FindDialog (Dialogs).
1) В ActionList создаешь новое событие, в его свойствах в инспекторе объектов находишь св-во Shortcut, которое меняешь на Ctrl+F
2) Во вкладке Events этого события находишь обработчик OnExecute и...
3) ...Пишешь там такой код
CODE

if(FindDialog1->Execute())
{
 // TO DO: Place extra code here
}
CppWebBrowser1->Focused();

Jess
  Отправлено: 18.07.2004, 09:14


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Для вызывающего FindDialog'a нужно писать поиск, а мне нужно просто симулировать нажатие комбинаций Ctrl+F (потому,что поиск там уже имеется). Я нарыл вот два кода но первый вообще не работает, а во втором можно симулировать вызов только одной клавиши (например Ctrl или F1 или просто F), в чем проблемма подскажите где собака порылась................За ранее благодарю..............

CODE


int lParam = (0 | 'f'<<16);
CppWebBrowser1->SetFocus();
SendNotifyMessage(Memo1->Handle, WM_KEYDOWN, 'f', lParam);



CODE


keybd_event(VK_LWIN, 0, 0 ,0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);




AVC
Отправлено: 19.07.2004, 09:00


Ветеран

Группа: Модератор
Сообщений: 1583



Попробуйте как то так
CODE

/* Эмуляция нажатия клавиш в рамках одной триады
// VK_SHIFT(Shiht) VK_CONTROL(Ctrl) VK_MENU(Alt)
// VK_CAPITAL VK_NUMLOCK VK_SCROLL
unsigned char kbstate [256];
GetKeyboardState(kbstate);
kbstate[VK_SHIFT] = 0x80; SetKeyboardState(kbstate);
PostMessage(Application->Handle, WM_KEYDOWN, VK_F1, 0);

kbstate[VK_SCROLL] = 0x01; SetKeyboardState(kbstate);
*/
Jess
  Отправлено: 19.07.2004, 21:26


Дежурный стрелочник

Группа: Участник
Сообщений: 70



При чем здесь клавиша шифта или альта???мне нужен CTRL и F что-бы вызывался поиск в CppWebBrowser'e....Чо-то Я не пойму код который ты привел.......
AVC
Отправлено: 20.07.2004, 07:57


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

При чем здесь клавиша шифта или альта???мне нужен CTRL


При том, что CTRL так же как Shift и Alt является сдвиговой клавишей. Эсли вы обратили внимание, то приведенный код закомментирован. Т.е. является просто заготовкой из которой можно слепить то что сейчас нужно. Я подозреваю, но не уверен(а проверять вам), что сэмулировав нажатие cnrl+F при фокусе на WebBrowsere можно заставить его выполнить диалог поиска.
Guest
  Отправлено: 20.07.2004, 09:33


Не зарегистрирован







Да про коментарии Я понял...про код если можно поподробней...Зачем присваивать 16-и ричные значения, на Ctrl помоему есть VK_CONTROL, и вообще хочется понять как работает функция PostMessage и из какой библиотеки её брать....
За ранее признателен.......
AVC
Отправлено: 20.07.2004, 09:53


Ветеран

Группа: Модератор
Сообщений: 1583



PostMessage — поставить сообщение в очередь сообщений. Из API user32.lib/winuser.h. Наберите её название в окне редактора кода и нажмите F1.
Специально подключать ни чего не нужно.

Если вы пошлете VK_CONTROL то вы пошлете ТОЛЬКО VK_CONTROL. Для имитации нажатия нескольких клавиш нужно заполнить буфер клавиатуры (Help там же). Таким образом нажатие Ctrl имитируем в буфере, в очередь ставим F для вызывания обработчика события и надеемся, что сработает. Каждый поток имеет свой собственный KeyboardState — поэтому так работает только в рамках одного потока.
Guest
  Отправлено: 21.07.2004, 10:18


Не зарегистрирован







Ладно поэкспериментируем.....Благодарствую..........

Вернуться в Вопросы программирования в C++Builder