Сразу оговорюсь, что компонент WebBrowser построен на основе IE, то есть отображаться сайты в нём будут так, как в Internet Explorer. Однако офрмление программы можно сделать по своему вкусу и в своём стиле.
Этот компонент находится на влкдаке "интерфейс" сразу после мультиэлемента "группа элементов". У браузера в основном стандартные для всех визуальных компонентов свойства, но есть два собственных - это URL, который определяет начальный адрес, загружаемый при старте программы, и Silent, который разрешает или запрещает отображение ошибок JavaScript.
Из параметра URL желательно всё убрать, оставив его пустым, иначе вы не сможете загрузить страницу по адресу из потока, а только через точку данных.
Здесь объясню, почему так происходит. Вы уже знаете, как можно передать информацию компоненту: через параметры, через точки данных и через методы (в потоке). Приоритет у них такой: сначала информация берётся из точки данных. Если на ней ничего нет, то проверяется соответствующий параметр. Если и он пуст, то только в этом случае данные берутся из потока. Всегда это помните.
Сделаем сначала интерфейс нашего браузера. Для этого прежде всего нужно расположить компоненты относительно друг друга. Ведь панель инструментов должна занимать небольшое пространство сверху или снизу, а вся остальная часть программы - отображать страницу.
Динамическое изменение размеров панели и самого компонента WebBrowser достигается благодаря установленнуму параметру Align. У панели оно равно caTop, то есть панель будет всега занимать положение сверху, во всю ширину окна программы. А её высоту задаёте вы в редакторе формы.
Для браузера этот параметр равен caClient. Это означает, что он займёт всю оставшуюся часть окна. Отсюда следует, что если поставить на главную форму ещё какие-то компоненты, то они будут обязательно пересекаться с этими двумя.
Но на главную форму нам ничего больше ставить не нужно. Мы будем работать с панелью.
Не забудьте войти в этот мультиэлемент (двойной щелчок). Здесь, по идее, должны располагаться кнопки навигации и адресная строка, что мы сейчас и реализуем.
Здесь для вас новый элемент - кнопка с картинкой. Он позволяет отображать на кнопке картинку, но по умолчанию вокруг кнопки рисуется рамка. Чтобы этого избежать, у кнопок изменён параметр Frame. Ну а рисунки находятся в параметре Bitmap.
Всплывающие подсказки находятся в параметре Hint.
Адресная строка - это обычное поле ввода (конечно, вы можете поставить и выпадающий список) с выравнивание по низу (caBottom). Надо только иметь в виду, что выравнивание происходит относительно панели, а не относительно главной формы, потому что поле находится внутри панели.
Попробуйте загружать страницы. Чего-то не хватает? Ах да, конечно, статусной строки. Но и это не проблема.
В HiAsm есть и строка состояния. Она находится прямо перед дочерней формой на панели компонентов. Работать с ней несложно - в её параметре Panels нужно только указать количество ячеек, которые будут в строке, причём после названия можно ставить знак "=" и писать ширину ячейки.
В каждой ячейке может отображаться разный текст. В параметре Strings можно задать стандартные тексты и выводить их методом doIndexText, а можно и подавать произвольный текст в потоке методу doText. Мы используем именно второй способ, потому что текст заранее нам неизвестен.
А чтобы указать, в какую ячейку выводить текст, нужно подать её индекс (ячейки нумеруются с нуля!) на точку данных строки состояния Panel. Но ставить поле ввода тут ни к чему - вы ведь не хотите позволить пользователю изменить этот индекс.
Нам подойдёт невизуальный компонент Memory, в котором можно хранить данные трёх типов (строка, целое число или дробное число).
Компонент находится на вкладке "Инструменты". В его параметре Default нужно выбрать тип данных (integer - целое число) и ввести значение (первая ячейка имеет индекс 0, помните это!).
Ну а как более гибко работать с этим невизуальным компонентом, я расскажу в следующий раз.
Видеоурок на примере браузера показывает, как строить интерфейс.
ОтветитьУдалитьПо Вашему примеру зашел на Гугл - тот предложил мне установить панель Гугла. Установил. Но оказалось, что установлена она не на новосозданный браузер, а на базовый Internet Explorer.
В связи с этим вопрос: каков статус созданной в HiAsm программы браузер в Windows? Что она может, а чего нет?
Компонент WebBrowser - это только то окошко, где отображаются веб-страницы, а панель встраивается в программу. Конечно, Гугл ничего не знает о созданном вами браузере и не может "заточить" под него панель (да ему и не надо). А вот программа InternetExplorer ему известна.
ОтветитьУдалитьК слову: Гугл (как и Яндекс) может много чего предлагать установить, но только вам решать, надо это или нет.
Привет, помоги пожалуйста
УдалитьУ меня компонент webBrowser не работает
Я не могу его поставить
Не знаю что делать помоги пж
тоже так
УдалитьМне кажется, что компонент "memory" в данной схеме лишний.
ОтветитьУдалитьСтолкнулся с проблемой открытия ссылок в новом окне, естественно их открывает IE. На форуме HiAsm не нашел рецепта решения этой проблемы, попал лишь на "Можно, если перехватить событие BeforeNavigate, отменить его, а затем открыть своё окно с запрашиваемым URL", но как это осуществить? Подскажите способ открывать внешние ссылки в своем интернет-браузере или в своем дочернем окне.
ОтветитьУдалитьЧтобы узнать адрес под курсором мыши, надо проверить данные, выдаваемые событием onStatus. Если первые символы равны "http", то это адрес, и его можно запоминать для дальнейшей работы. Остаётся лишь узнать, когда производится клик на ссылке. А остановить загрузку по ссылкам можно с помощью точек данных Navigate и NewWindow (находятся на вкладке "Точки").
ОтветитьУдалитьА не могли бы Вы дать схемку, которая реализует этот метод - для меня это пока не очень понятно, но необходимо.
ОтветитьУдалитьСпасибо!
Вот полуфабрикат. Можно запретить загрузку ссылок и ловить ссылки в строке состояния. Но как узнать, что произведено нажатие в браузере - к сожалению, не знаю, потому что стандартные onMouseDown и др. не работают. Попробуйте спросить на форуме hiasm.com.
ОтветитьУдалитьа можно привязать google к поле ввода чтобы то что писал искалось через google.com
ОтветитьУдалитьПодскажите, как реализовать загрузку главной страницы при запуске браузера, через точку do navigate?
ОтветитьУдалитьПоставил между браузером и MeinForm - Case ex. Прописал в нём ссылку, подключил к on Create и к Do Navigate....На поле ввода выдаёт, а в браузер при запуске не получается.
ОтветитьУдалитьВ смысле проверил на поле ввода работает, а подключил к браузеру, не хочет.
ОтветитьУдалитьРазобрался, извините за флуд, MeinForm(on creat) подключаем к Case ex потом нижней точкой к Do Navigate.
ОтветитьУдалитьТочка данных "doForward" на браузере, не работает, все остальные нормально. Версия 4.04 184...Проверял на простейшей схемке, не хочет.
ОтветитьУдалитьДа, действительно, там есть ошибка в коде компонента. Лучше всего обратиться на форум hiasm.com, чтобы оповестить об ошибке (возможно, там уже есть исправленный компонент).
ОтветитьУдалитьЕсли там никто не ответит, то просто исправьте код Webbrowser. Делается это так. Выделите компонент и нажмите Ctrl+F. Найдите там участок кода:
procedure THIWebBrowser._work_doBack;
begin
if Count > 1 then
begin
PKOLWebBrowser(Control).GoBack;
dec(Count,2);
end;
end;
procedure THIWebBrowser._work_doForward;
begin
if Count < max then
begin
PKOLWebBrowser(Control).GoForward;
//inc(Count);
dec(max);
//debug(int2str(count));
end;
end;
и замените его на:
procedure THIWebBrowser._work_doBack;
begin
PKOLWebBrowser(Control).GoBack;
end;
procedure THIWebBrowser._work_doForward;
begin
PKOLWebBrowser(Control).GoForward;
end;
Однако следует иметь в виду, что если в истории браузера не будет предыдущей/последующей страницы, то при попытке перейти назад/вперёд программа вылетает с ошибкой. Поэтому надо контролировать доступность (Enable) кнопок для этих методов в вашем коде.
С форумом пока не подружился (там слишком заумные люди сидят)...исправил, заработало, Спасибо..А вот как Enabled контролировать, не пойму...Где-то должны быть временные файлы, где хранятся ссылки пока форма открыта, а как сделать, что бы, если нет инф-ии (URL) кнопка не работала...или тут как-то можно связать с запоминанием ссылок, если ты по ней переходил то "да", если "нет", то кнопка заблокированна?
ОтветитьУдалитьНаверное, придётся самостоятельно запоминать все переходы по ссылкам. Лучше всего это делать через мониторинг адреса страницы (нижняя точка CurrentURL). Если он изменился - значит, переход сделан. Но тут нужно учеться, что при переходе назад предыдущая страница не должна снова добавляться в список, т.к. она там уже есть (если вы сами запоминаете страницы переходов в списке строк). Можно использовать и счётчик для учёта переходов.
ОтветитьУдалитьА у меня нет компонента Silent =( и еще много чего, не та версия программы? HiAsm Studio 4.0 build 173
ОтветитьУдалитьПростите за тупость ,в настройках посмотрел вашу версию..
ОтветитьУдалитьSilent - это параметр компонента WebBrowser, а не компонент.
ОтветитьУдалитьесли вы показали как сделать браузер -))) может покажете , как делать СЕО софт ? было бы классно , а вообще в принципе возможно ли в hiasm создание сео софта типа полу/авто комментирования блогов на DLE или WordPress с распознаванием капчи при помощи антигей итд итп -))) ну в общем такие классные штуки в HiAsm реализовать возможно !?
ОтветитьУдалитьЗадержка с ответом вышла (комп сломался), но теперь отвечу. Заполнение полей форм на веб-страницах возможно, но с помощью компонента InlineCode, то есть нужно хоть немного знать delphi, а также html-разметку. Вот пример. Разобраться в нём несложно: на блоге есть статьи про IC. Следует лишь сказать, что в процедуре CreateForm (которая в IC) первым делом получаем браузер-объект, а вторым делом - загружаем в него страницу.
ОтветитьУдалитьПроцедура Zap заполняет поля. author, email, url, comment - это всё id тегов input на странице блога, которые и нужно заполнить. Выполнение процедуры заполняет эти поля.
Ну если хочется автоматизировать и отправку, то строка
PKOLWebBrowser(WB).OleObject.Document.getElementById('submit').click;
как раз делает это, только нужно убрать слэши пред ней.
Однако всё будет работать только для стандартным форм комментариев в блогах. Если владелец блога установил что-то нестандартное, то у полей вполне могут быть другие id, и тогда придётся приспосабливаться к каждому конкретному случаю.
Что касается капчи, то разные блоги используют разные капчи, и как её распознавать - тут моих знаний явно не хватает.
Поэтому написание такого софта - дело, конечно, полезное, но сложное. Впрочем, если будете делать, можете задавать вопросы в комментариях здесь.
А возможно сделать в браузере кнопку, которая запускала бы exe файл например по пути %Program Files%1\2.exe , или просто с ярлыка на рабочем столе?
ОтветитьУдалитьКонечно, можно. Для этого есть компонент WinExec на вкладке "Система". Он запускает программы и открывает файлы.
ОтветитьУдалитьспасибо большое за ответ , я в HiAsm - новичок, но буду стараться развить свои навыки , не только в HiAsm , но и в программировании в целом т,к есть необходимость создания своих собственных СЕО инструментов , и если у меня возникнут вопросы по hiasm , я сразу же к вам обращусь -)))
ОтветитьУдалить"Конечно, можно. Для этого есть компонент WinExec на вкладке "Система". Он запускает программы и открывает файлы."
ОтветитьУдалитьСпасибо, всё оказалось просто, Только вот, если я захочу с другого комп-ра запуститься, где система и ехе файл стоит на др. диске, т.е путь тот же, но диск с др. буквой. Можно как то получить путь?
Для этого, разумеется, нужно знать букву диска. Если нужно узнать, где установлена система, то можно воспользоваться компонентом Dir на вкладке "Файлы". Нижние точки компонента содержат путь к разным системным папкам, из них можно и диск узнать. Отделить букву диска можно компонентом StrPart со вкладки "Строки". У него надо установить разделитель "\" (без кавычек).
ОтветитьУдалитьОтлично, далее через формат строк к WinExec и всё работает. Спасибо!
ОтветитьУдалитькак установить компилятор Delphi в HiAsm версии 4.04
ОтветитьУдалитьСначала надо установить сам HiAsm. Хотя вроде бы в последних версиях компилятор идёт в комплекте с самим HiAsm. Но компилятор можно скачать отдельно (hiasm.narod.ru/Compiler.exe).
ОтветитьУдалитьHttp://Не найдено!!!
УдалитьВот здесь можно найти "http://vk.com/hiasm"
Вот файл:
ОтветитьУдалить--------------------------------------------------------------------------
| "http://www.fayloobmennik.net/3759914" |
--------------------------------------------------------------------------
Я так и не понял как сделать так чтобы в браузер ссылка на новое окно было заменено на открытие ссылки в этом же окне...
Т.е. Пользователь нажимает на любую ссылку и она открывается в этом же браузере(окне)...
Помогите пожалуйста!
"Пытался использовать некоторые варианты - не получилось."
http://www.fayloobmennik.net/3767793
ОтветитьУдалитьОгромное спасибо!!!
УдалитьДобрый день. Как выводить код html в тексте или в редакторе?
ОтветитьУдалитьНижняя точка Page.
УдалитьМне нужно достать исходный код сразу в редактор. Как провести данную операцию? точки не выдают исходный код.
ОтветитьУдалитьСпасибо.
Вот два варианта загрузки кода страницы. Один через браузер, другой - в фоне.
УдалитьAdd(Button,7784470,175,189)
{
Left=5
Top=10
link(onClick,3686687:doData,[])
}
Add(WebBrowser,5965895,231,133)
{
Left=5
Top=40
}
Add(DoData,3686687,238,189)
{
link(onEventData,9537061:doWork2,[])
link(Data,5965895:Page,[])
}
Add(Memo,8635596,378,168)
{
Left=5
Top=165
Width=200
Height=95
}
Add(Button,13905010,175,294)
{
Left=215
Top=10
link(onClick,11496708:doDownload,[])
}
Add(HTTP_Get,11496708,231,294)
{
link(onDownload,1647489:doConvert,[])
}
Add(Convertor,1647489,280,301)
{
Mode=11
link(onResult,9537061:doWork3,[(347,307)])
}
Add(HubEx,9537061,343,189)
{
link(onEvent,8635596:doText,[])
}
Не могу разобраться с поиском текста searchinfile,ввожу слово,символ,цифру,не выводит ничего в редактор текста.Как найти нужный текст из потока,либо из файла? Заранее спасибо!
ОтветитьУдалитьВыделите компонент и нажмите F1 - в справке есть отличный пример.
УдалитьСкажите пожалуйста, как установить фокус на конкретный элемент в браузере? для получения информации с нужной области на странице.
ОтветитьУдалитьСпасибо.
Для этого нужно знать компонент InlineCode и работать с DOM-структурой. Вот один из вариантов:
Удалитьhttp://rusfolder.com/43801984
Посмотрите код - разберитесь. Что непонятно - спрашивайте.
А почему при загрузке https://www.darkorbit.ru выдает ошибку сценария Script error?, как ее убрать?
ОтветитьУдалитьВ свойствах элемента "Браузер" в пункте "Silent" поставить "True"
УдалитьПодскажите пожалуйста как с помощью этого элемента авторизоваться на сайте? Authorization: Basic root:root
ОтветитьУдалитьВесь вечер мучаюсь. Спасибо.