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 |
|
Не зарегистрирован
|
Ладно поэкспериментируем.....Благодарствую.......... |
|