Создание браузера в delphi
Я не могу понять - все развели какой-то базар вокруг войны Интернет браузеров. Ie, Ns, Opera. Все чего-то там себе выбирают. Меня эта проблема не волнует, я могу сам написать себе браузер - такой, как мне захочется. А тебе слабо? Я думаю, что нет. Через десять минут у тебя тоже будет свой навигатор.
Предварительные установки
Ты снова должен запустить Delphi. Именно он позволяет очень быстро и без особых проблем написать свой собственный браузер. Когда запустишь, то найди закладку "Internet". Здесь должен быть компонент "WebBrowser" (он должен быть последний). Если у тебя версия Delphi меньше, чем пятая, то этого компонента может и не быть. Он может отсутствовать и если ты отказался устанавливать инет-компоненты (по умолчанию они ставятся).
Выбери "Import ActiveX Control" из меню "Component".
В списке выбора этого окна (сверху) найди строку "Microsoft Internet Controls (Version 1.1)". Версия может отличаться, но нам с тобой - акваланг. Теперь нажми кнопку "Install". Перед тобой откроется окно и запрос. На запрос ты должен ответить "Yes".
После того, как Delphi прошуршит мозгами, появится окно, которое сообщит об успешной установке нового компонента. Нажми "OK" и закрой все, что открыл Delphi. Для этого выбери "Close All" из меню "File". Теперь и у тебя есть компонент "WebBrowser", только он расположен на странице "ActiveX" палитры компонентов.
Как ты мог заметить, мы будем использовать "Microsoft Internet Controls", т.е. движок установленного на твоем компе IE. А это значит, что твой браузер подхватит все болезни и глюки своего движка. Единственное, что может успокоить - так это то, что интерфейс не будет таким занудным. Он будет таким, как ты захочешь, потому что сделан твоими руками.
Первые шаги
Сейчас ты уже готов приступить к программированию. Создай новый проект ("File" -> "New Application") и сразу измени заголовок и иконку. Как это делается, я рассказал в статье про мега-медиа-плеер в этом же номере.
Двигаемся дальше. Установи на форму наш компонент "WebBrowser" (он находится на закладке "Internet" или "ActiveX") - у тебя появится белый квадрат с именем WebBrowser1. После этого брось на форму "CoolBar", который находится на закладке "Win32" палитры компонентов. Это панелька, которая должна выровняться по верхнему краю на твоей форме. Теперь выдели WebBrowser1 и перейди в ObjectInspector. Щелкни по свойству "Align" и в выпадающем списке выбери "alClient". "WebBrowser" должен растянуться на все свободное место формы.
Теперь брось на CoolBar1 (мы его недавно установили на форму) панель "ToolBar" из закладки "Win32" и "ComboBox" из закладки "Standart" палитры компонентов. Все это ты должен бросить именно внутрь CoolBar1, иначе ты получишь полный отстой. После этого нужно выделить CoolBar1 и перейти в ObjectInspector. Здесь ты должен изменить строку "AutoSize" на "true" (по умолчанию она "false").
Если что-то не получилось, то читай статью заново. Если и это не поможет, то попробуй накатить пивка, это помогает думать :). Если все в порядке, то выделяй ComboBox1 (выпадающий список) и переходи в ObjectInspector. Здесь ты должен выделить закладку "Events" и произвести сложнейшее действие ДоублеКлике по строке "OnKeyDown". ДоублеКлике нужно производить в правой половине строки. Если ты не помнишь, где находиться "право" :), то щелкай по выпадающему списку (это и есть "право"). Как и раньше, Delphi создаст процедуру. Она будет вызываться каждый раз, когда ты будешь вводить какую-нибудь букву в "ComboBox". Здесь ты должен написать следующее:
Примечание! Набирать на клаве нужно только то, что написано между Begin и End, все остальное уже должно быть создано Delphi. В данном случае ты должен набрать только "if Key= VK_RETURN then WebBrowser1.Navigate(ComboBox1.Text)", причем без кавычек. Я остальные строчки привожу только чтобы тебе было удобно глазеть и сравнивать с тем, что за тебя делает Delphi.
Теперь то же самое, но по понятиям:
Нажми "F9", и твоя прога должна засвистеть. Введи какой-нибудь адрес в строку ComboBox и нажми Enter (это клавиша на кейборде :)). Если ты правильно ввел адрес, то в WebBrowser1 через несколько минут должен появиться указанный Home Page. Когда наиграешься со своим произведением, то возвращайся в Delphi. Мы еще многое должны сегодня успеть сделать.
Улучшаем свой браузер
Установи еще на форму "OpenDialog" из закладки "Dialogs" палитры компонентов. Он нам скоро понадобится.
Теперь дважды кликни по кнопке "Открыть", и Delphi автоматически создаст процедуру, которая будет вызываться при нажатии этой кнопки. В этой процедуре нужно написать следующее:
Как всегда, объясняю по понятиям:
Я думаю, что здесь ничего объяснять не надо. Мы просто заставляем WebBrowser1 идти на предыдущую страницу.
Для кнопки "Стоять" напиши: "Стоять на месте свистком в небо, руки по швам". Шучу :). Напиши лучше это:
Здесь только одна строка, но очень сложная, поэтому я не стану ее объяснять. Скажу только, что в этой строке я посылаю команду через OLE ядру IE. Просто скопируй ее один к одному в свой исходник и поверь мне на слово.
Теперь можешь нажать "F9", и твоя прога должна запуститься. Попробуй поиграть с ней. Неплохие ощущения? Закрывай свой браузер, остались последние штрихи!
Последние штрихи
Твой браузер почти готов. Я только наведу небольшой марафет.
Для начала брось на форму StatusBar из закладки "Win32" и измени у него свойство "SimplePanel" в true (по умолчанию false). Теперь выдели WebBrowser1 и щелкни по закладке "Events" в ОbjecInspector-е. Дважды кликни по строке "OnStatusTextChange" и напиши в созданной процедуре следующее:
Здесь мы присваиваем переменную "Text" (в ней хранится текст подсказки) в StatusBar1. Теперь ты сможешь видеть подсказки в строке состояния.
Давай добавим ещё индикатор загрузки. Для этого брось на форму ProgressBar из закладки "Win32". Измени у него свойство "Align" на "alBottom", чтобы он находился вдоль нижней границы формы. Снова выдели WebBrowser1 и щелкни по закладке "Events" в ОbjecInspector-е. Дважды щелкни по строке "OnProgressChange" и напиши в созданной процедуре:
Здесь мы созданному ProgressBar1 (индикатор загрузки) присваиваем максимальное значение (ProgressMax) и текущее значение (Progress).
Теперь надо украсить наши кнопки, а то они смотрятся как сам IE. Для этого брось на форму ImageList и произведи по нему ДоублеКлик. Перед тобой откроется окно. Сюда нужно добавить картинки размером 16х16. Для этого нажми кнопку "Add", и перед тобой откроется стандартное окно открытия файла. Найди картинку и нажми "Открыть". Повтори эту процедуру 6 раз (6 картинок для 6-и кнопок). После всего этого нажми "ОК".
Теперь выдели ToolBar1 и в ObjectInspector-е измени свойство Images на "ImageList1". На твоих кнопках должны появиться картинки. Если ты добавлял картинки не в том порядке, как они у тебя стоят на форме, то можешь пересортировать их с помощью свойства ImageIndex у кнопки. Например: щелкни по кнопке "Стоять" и измени ImageIndex на 0. На кнопке должна появиться картинка, указанная первой в ImageList1.
Можешь создать еще один ImageList, который подставляется в HotImages. В этом случае картинки из этого ИмаджеЛиста будут подставляться на кнопку, когда ты наводишь на нее маусом.
Все, косметический ремонт окончен. Дави на "F9", и Delphi в последний раз создаст тебе окончательную версию.
Можешь пользоваться полноценным браузером в свое удовольствие. Конечно же, это не все возможности, которые можно выцепить из WebBrowser1. Сюда еще очень многое можно добавить - главное, чтобы хватило воображения и умений. Но это уже специфические детали, и я их описывать не буду, потому что тебе понадобится объяснять все принципы программирования на Delphi. А это - целая история. Пиши, если что, и удачи!
Ты снова должен запустить Delphi. Именно он позволяет очень быстро и без особых проблем написать свой собственный браузер. Когда запустишь, то найди закладку "Internet". Здесь должен быть компонент "WebBrowser" (он должен быть последний). Если у тебя версия Delphi меньше, чем пятая, то этого компонента может и не быть. Он может отсутствовать и если ты отказался устанавливать инет-компоненты (по умолчанию они ставятся).
Выбери "Import ActiveX Control" из меню "Component". Перед тобой должно открыться окно, как на рисунке 1.
Рисунок 1
В списке выбора этого окна (сверху) найди строку "Microsoft Internet Controls (Version 1.1)". Версия может отличаться, но нам с тобой - акваланг. Теперь нажми кнопку "Install". Перед тобой откроется окно, как на рисунке 2. На запрос ты должен ответить "OK".
Рисунок 1
После этого появиться запрос на компиляцию пакета как на рисунке 3. Соглашайся. Delphi прекомпилирует необходимые файлы и установит компонент для работы с браузером.
Рисунок 1
После того, как Delphi прошуршит мозгами, появится окно, которое сообщит об успешной установке нового компонента. Нажми "OK" и закрой все, что открыл Delphi. Для этого выбери "Close All" из меню "File". Теперь и у тебя есть компонент "WebBrowser", только он расположен на странице "ActiveX" палитры компонентов.
Как ты мог заметить, мы будем использовать "Microsoft Internet Controls", т.е. движок установленного на твоем компе IE. А это значит, что твой браузер подхватит все болезни и глюки своего движка. Единственное, что может успокоить - так это то, что интерфейс не будет таким занудным. Он будет таким, как ты захочешь, потому что сделан твоими руками.
Сейчас ты уже готов приступить к программированию. Создай новый проект ("File" -> "New Application") и сразу измени заголовок и иконку.
Двигаемся дальше. Установи на форму наш компонент "WebBrowser" (он находится на закладке "Internet" или "ActiveX") - у тебя появится белый квадрат с именем WebBrowser1. После этого брось на форму "CoolBar", который находится на закладке "Win32" палитры компонентов. Это панелька, которая должна выровняться по верхнему краю на твоей форме. Теперь выдели WebBrowser1 и перейди в Object Inspector. Щелкни по свойству "Align" и в выпадающем списке выбери "alClient". "WebBrowser" должен растянуться на все свободное место формы. В результате ты увидишь нечто похожее на рисунок 4.
Рисунок 1
Теперь брось на CoolBar1 (мы его недавно установили на форму) панель "ToolBar" из закладки "Win32" и "ComboBox" из закладки "Standart" палитры компонентов. Все это ты должен бросить именно внутрь CoolBar1, иначе ты получишь полный отстой. После этого нужно выделить CoolBar1 и перейти в ObjectInspector. Здесь ты должен изменить строку "AutoSize" на "true" (по умолчанию она "false").
Если что-то не получилось, то читай статью заново. Если и это не поможет, то попробуй накатить пивка, это помогает думать :). Если все в порядке, то выделяй ComboBox1 (выпадающий список) и переходи в ObjectInspector. Здесь ты должен выделить закладку "Events" и произвести сложнейшее действие ДоублеКлике по строке "OnKeyDown". ДоублеКлике нужно производить в правой половине строки. Если ты не помнишь, где находиться "право" :), то щелкай по выпадающему списку (это и есть "право"). Как и раньше, Delphi создаст процедуру. Она будет вызываться каждый раз, когда ты будешь вводить какую-нибудь букву в "ComboBox". Здесь ты должен написать следующее:
Примечание! Набирать на клаве нужно только то, что написано между Begin и End, все остальное уже должно быть создано Delphi. В данном случае ты должен набрать только "if Key= VK_RETURN then WebBrowser1.Navigate(ComboBox1.Text)", причем без кавычек. Я остальные строчки привожу только чтобы тебе было удобно глазеть и сравнивать с тем, что за тебя делает Delphi.
Теперь то же самое, но по понятиям:
Нажми "F9", и твоя прога должна засвистеть. Введи какой-нибудь адрес в строку ComboBox и нажми Enter (это клавиша на кейборде :)). Если ты правильно ввел адрес, то в WebBrowser1 через несколько минут должен появиться указанный Home Page. Когда наиграешься со своим произведением, то возвращайся в Delphi. Мы еще многое должны сегодня успеть сделать.
Рисунок 1
Установи еще на форму "OpenDialog" из закладки "Dialogs" палитры компонентов. Он нам скоро понадобится.
Теперь дважды кликни по кнопке "Открыть", и Delphi автоматически создаст процедуру, которая будет вызываться при нажатии этой кнопки. В этой процедуре нужно написать следующее:
Как всегда, объясняю по понятиям:
Я думаю, что здесь ничего объяснять не надо. Мы просто заставляем WebBrowser1 идти на предыдущую страницу.
Для кнопки "Стоять" напиши: "Стоять на месте свистком в небо, руки по швам". Шучу :). Напиши лучше это:
Для пимпы "Обновить":
И, наконец, для пимпы "Печать":
Здесь только одна строка, но очень сложная, поэтому я не стану ее объяснять. Скажу только, что в этой строке я посылаю команду через OLE ядру IE. Просто скопируй ее один к одному в свой исходник и поверь мне на слово.
Теперь можешь нажать "F9", и твоя прога должна запуститься. Попробуй поиграть с ней. Неплохие ощущения? Закрывай свой браузер, остались последние штрихи!
Твой браузер почти готов. Я только наведу небольшой марафет.
Для начала брось на форму StatusBar из закладки "Win32" и измени у него свойство "SimplePanel" в true (по умолчанию false). Теперь выдели WebBrowser1 и щелкни по закладке "Events" в ОbjecInspector-е. Дважды кликни по строке "OnStatusTextChange" и напиши в созданной процедуре следующее:
Здесь мы присваиваем переменную "Text" (в ней хранится текст подсказки) в StatusBar1. Теперь ты сможешь видеть подсказки в строке состояния.
Давай добавим ещё индикатор загрузки. Для этого брось на форму ProgressBar из закладки "Win32". Измени у него свойство "Align" на "alBottom", чтобы он находился вдоль нижней границы формы. Снова выдели WebBrowser1 и щелкни по закладке "Events" в ОbjecInspector-е. Дважды щелкни по строке "OnProgressChange" и напиши в созданной процедуре:
Здесь мы созданному ProgressBar1 (индикатор загрузки) присваиваем максимальное значение (ProgressMax) и текущее значение (Progress).
Теперь надо украсить наши кнопки, а то они смотрятся как сам IE. Для этого брось на форму ImageList и произведи по нему ДоублеКлик. Перед тобой откроется окно, как на рисунке 7. Сюда нужно добавить картинки размером 16х16. Для этого нажми кнопку "Add", и перед тобой откроется стандартное окно открытия файла. Найди картинку и нажми "Открыть". Повтори эту процедуру 6 раз (6 картинок для 6-и кнопок). После всего этого нажми "ОК".
Рисунок 1
Теперь выдели ToolBar1 и в ObjectInspector-е измени свойство Images на "ImageList1". На твоих кнопках должны появиться картинки. Если ты добавлял картинки не в том порядке, как они у тебя стоят на форме, то можешь пересортировать их с помощью свойства ImageIndex у кнопки. Например: щелкни по кнопке "Стоять" и измени ImageIndex на 0. На кнопке должна появиться картинка, указанная первой в ImageList1.
Можешь создать еще один ImageList, который подставляется в HotImages. В этом случае картинки из этого ИмаджеЛиста будут подставляться на кнопку, когда ты наводишь на нее маусом.
Все, косметический ремонт окончен. Дави на "F9", и Delphi в последний раз создаст тебе окончательную версию. На рисунке 8 ты можешь увидеть результат сегодняшней работы.
Рисунок 1
Можешь пользоваться полноценным браузером в свое удовольствие. Конечно же, это не все возможности, которые можно выцепить из WebBrowser1. Сюда еще очень многое можно добавить - главное, чтобы хватило воображения и умений. Но это уже специфические детали, и я их описывать не буду, потому что тебе понадобится объяснять все принципы программирования на Delphi. А это - целая история. Пиши, если что, и удачи!
Он будет таким, как ты захочешь, потому что сделан твоими руками.
Я не могу понять - все развели какой-то базар вокруг войны Интернет браузеров. Ie, Ns, Opera. Все чего-то там себе выбирают. Меня эта проблема не волнует, я могу сам написать себе браузер - такой, как мне захочется. А тебе слабо? Я думаю, что нет. Через десять минут у тебя тоже будет свой навигатор.
- В uses подключаем MSHTML и ActiveX
- Создадим событие OnCreate на форме и запишем в нем следующий код:
- Создадим событие OnClick на SpeedButton6 например, и в коде напишем:
Помещение введенного адреса в выпадающий список, будет позволять нам при нажатии на СomboBox, просматривать историю вводимых вручную адресов, в строку браузера.
Далее для удобства сделаем так, чтобы данный механизм работал не только от SpeedButton6, но и от нажатия нами на клавишу Enter, для этого:
- Создадим событие OnKeyPress y компонента ComboBox1 и запишем следующее:
Теперь просматривать страницы можно и по нажатии клавиши Enter.
Doc : = WebBrowser1 . OleObject . document ; //Ссылаемся на интерфейс документа; if TVarData ( Doc ) . VDispatch = nil then Exit ; //Если документ отсутствует, тогда выходим; //Объект документа - объект родительского окна - объект содержащий Doc : = WebBrowser1 . OleObject . document ; //Ссылаемся на интерфейс документа; if TVarData ( Doc ) . VDispatch = nil then Exit ; //Если документ отсутствует, тогда выходим; //Объект документа - объект родительского окна - объект содержащий- Для перехода на домашнюю страницу в OnClick на SpeedButton5 пишем:
- Для обновления страницы в OnClick на SpeedButton3 пишем:
Итак, мы успешно прописали основные клавиши для работы нашего браузера. Теперь пропишем еще ряд кнопок, придав нашему приложению дополнительную функциональность. Например, обеспечим открытие файлов в нашем браузере расположенных на локальных дисках.
- Для этого в OnClick на SpeedButton7 пишем:
- Для возможности нашего браузера также сохранять странички на компьютер, в OnClick на SpeedButton9 пишем:
- Для получения возможности печати по нажатию на SpeedButton8 в OnClick последнего пропишем:
- Для предварительного просмотра странички перед печатью, в OnClick на SpeedButton10 пишем:
- А для предварительной настройки ее параметров, в OnClick на SpeedButton11 пишем:
- Теперь организуем поиск слов на страничке, и в OnClick на SpeedButton12 пишем:
- Чтобы сохранить исходный код в текстовый файл нужно:
а) В разделе Public записываем следующую процедуру:
procedure SaveHTMLSourceToFile ( const FileName : string ; WB : TWebBrowser ) ;б) Жмем Ctrl+Shift+C;
в) В сгенерированном автоматически шаблоне TForm1.SaveHTMLSourceToFile(const FileName: string; WB: TWebBrowser) прописываем:
PersistStream : = WB . Document as IPersistStreamInit ; FileStream : = TFileStream . Create ( FileName , fmCreate ) ; Stream : = TStreamAdapter . Create ( FileStream , soReference ) as IStream ; MessageBox ( Handle , 'Fail to save HTML source' , 'Error' , 0 ) ;г) Пишем в OnClick на SpeedButton13:
SaveHTMLSourceToFile ( SaveDialog1 . FileName , WebBrowser1 ) ;- Настроим режим уведомления об успешных загрузках документов, для этого в свойстве OnDocumentComplete компонента WebBrowser1, нужно прописать следующее:
- Чтобы ProgressBar1 отображал ход загрузки страниц, в свойстве OnProgressChange компонента WebBrowser1, нужно прописать:
- Если в событии OnStatusTextChange компонента WebBrowser1, прописать:
то URL хода загрузки, будет корректно отображаться в StatusBar;
Поиск по сайту
Okolokompa в Яндекс Дзен
Практика и примеры
Ну а теперь приступим к самому главному методу изучения - на примерах.
И самый первый пример - программа, позволяющая определить, существует ли заданный URL:
Пример 1. Проверка существования указанной URL Далее - скачивание указанной странички в указанный файл.
Пример 2. Скачивание указанной URL в заданный файл Следующий пример - скачивание сразу нескольких URL одновременно. Надо заметить, что многие программисты пренебрегают многозадачностью Windows (неважно, как она реализована, речь сейчас не об этом). В Дельфи очень легко создавать отдельные, подчиненные Вашей программе процессы (а точнее - потоки) с помощью базового класса TThread.
Пример 3. Одновременное скачивание указанных URL в заданный каталог ПРИМЕЧАНИЕ: Чтобы завершить некоторый процесс (Thread), нужно вызвать метод Terminate класса этого процесса. Приостановить процесс можно оператором Suspend, а продолжить выполнение - Resume. Также можно настроить приоритет каждого отдельного процесса через свойство Priority.
Неплохой пример работы с процессами можно найти в подпапке Demos\Threads папки, куда Вы установили Delphi.
Замечания по алгоритмам типовых задач
Если Вы собираетесь создать скачивалку сайтов, то Вам необходимо учитывать следующее (решить следующие проблемы):
Нужно скачивать не только саму страничку в формате HTML, но и все входящие в нее рисунки (gif, jpg, и т.д.);
в некоторых случаях удобно скачивать не одну страничку, а несколько страниц, ссылки на которые находятся на первой из скачиваемых страничек. При этом нужно учитывать, что на страничке могут находиться и ссылки на другие сайты, поэтому необходимо анализировать скачиваемые ссылки (чтобы случайно не скачать весь Интернет). Для решения задачи со скачиванием нескольких страничек нужно использовать рекурсию;
необходимо качественно информировать пользователя о ходе закачки. Т.е. показывать общее и скачанное количество информации;
после скачивания нужно заменить Интернетовские ссылки на локальные, чтобы можно было просматривать странички в режиме offline.
Читайте также: