DataLife Engine > C++ > Пишем браузер

Пишем браузер


28 сентября 2007. Разместил: podpole
Продолжаю тему клонирования программ darkamster'a на Delphi в С++Builder. В этой статье я покажу, как с помощью стандартных компонентов, можно создать свой браузер. Браузер будет на движке 'всеми-любимого' InternetExplorer. Наш зверь сможет ходить по URL, смотреть Html странички, ходить вперед и назад, конечно, перезагружать странички и останавливать загрузку.
Начнем новый проект. Советую сразу определиться с дизайном программы, не стоит далеко отходить от принятых стандартов, т.е кнопки навигации вверху, чуть ниже поле для ввода адреса URL, под ними будет располагаться просмотровщик страниц (компонент CppWebBrowser).

Пишем браузерЯ вместо button использовал компонент panel (это моя задумка - во время наведения курсора панелька будет подсвечена, как это реализовать я напишу в самом конце). Под навигацией у меня располагается Edit для ввода адреса, под ним компонент CppWebBrowser, так же нам понадобиться компонент OpenDialod - для просмотра страничек с жесткого диска. Итак, впервую очередь мы распишем событие, совершаемое при нажатии enter в edit (с учетом того, что пользователь указал адрес сайта, событие называется - OnKeyPress). Вот код:

if (Key == VK_RETURN){ // нажат ЕНТЕР
wchar_t URL[100];
Edit1->Text.WideChar(URL,100); //Edit1 принял адрес сайта
CppWebBrowser1->Navigate(URL,0,NULL,NULL,NULL); //Адрес направлен на cppwebbrowser, пошла загрузка
}

Далее напишем код для кнопки открыть:

OpenDialog1->Execute(); //Открываем окно выбора файлов
wchar_t URL[100];
Edit1->Text=(OpenDialog1->FileName); //Присваемаем Edit название выбраного файла
Edit1->Text.WideChar(URL,100);
CppWebBrowser1->Navigate(URL,0,NULL,NULL,NULL);

Кнопка назад:

CppWebBrowser1->GoBack();

Кнопка вперед:

CppWebBrowser1->GoForward();

Кнопка стоп:

CppWebBrowser1->Stop();

Кнопка Обновить:

CppWebBrowser1->Refresh();

Все готово =) Браузер будет спокойно бороздить просторы инета, под вашим чутким контролем. Теперь я распишу то, как менять цвет панелек при наведении. Итак, для начала обговорим, что стандартным цветом наших panel будет - clBtnFace. Теперь ставим на OnMouseMove, следующий код:

Panel1->Color=clSkyBlue; //я выбрал цвет - небесно синий

В результате чего, при наведии панель поменяет цвет, теперь заставим вернуть ее преждний цвет (если пользователь убрал мышь). Сперва, мы должны выбрать событие OnMouseMove для Form1 и теперь пишем код:

Panel1->Color=clBtnFace; //результат панель приняла стандартный цвет