Как в delphi открыть ссылку в браузере

Обновлено: 05.07.2024

Искал аналоги Simple MAPI в форуме - не нашел, аналоги то есть вызова веб браузера по умолчанию в виндовс с заданной страницей. Про почту вообще везде есть, т.е. создание и отправка письма, а про браузер(((. помогите( - намекните).

Зато я нашел ExecuteTarget (если кому интересно):

Launches the default Web browser to display the Web page specified by URL.

procedure ExecuteTarget(Target: TObject); override;

virtual void __fastcall ExecuteTarget(TObject *Target);

ExecuteTarget is called automatically when the action fires in response to a user action (for example, when the user selects a menu item or presses a tool button that is linked to this action).

Target is the currently active object when the action fires.

Зато я нашел ExecuteTarget (если кому интересно):

Launches the default Web browser to display the Web page specified by URL.

procedure ExecuteTarget(Target: TObject); override;

virtual void __fastcall ExecuteTarget(TObject *Target);

ExecuteTarget is called automatically when the action fires in response to a user action (for example, when the user selects a menu item or presses a tool button that is linked to this action).

Target is the currently active object when the action fires.

ExecuteTarget ignores the Target parameter and launches the default Web browser, passing in the URL specified by the URL property so that the browser displays the associated Web page.

Вот такая штука в конечном итоге работает. Т.е. через кустом файл, нужном для открытия файлов и папко вообще то. Стандартное специализированное TAction :: Internet я не смог запустить - не открывает урл, хоть в хелпе об этом и сказано.

Зато теперь еще и папки умею открывать:)) - наоткрываю блиН:)

Вот такая штука в конечном итоге работает. Т.е. через кустом файл, нужном для открытия файлов и папко вообще то. Стандартное специализированное TAction :: Internet я не смог запустить - не открывает урл, хоть в хелпе об этом и сказано.

Зато теперь еще и папки умею открывать:)) - наоткрываю блиН:)

Собственно, я так и сделал в итоге.
Надеюсь в будущем этого тоже будет достаточно.

Сам я всегда пользуюсь вариантом 1. В коде, доставшемся по наследству, нашел вариант 2. По каким причинам мой предшественник мог использовать такой путь? Спросить его самого возможности нет, спрашиваю у вас



ViktorXP, большое спасибо за ссылку. Только это совсем не то.

Добавлено 02.04.07, 09:59
Оба варианта, описанных выше, работают. Меня интересует, почему однажды стало недостаточно варианта 1?

Domino Видимо не знал, что ShellExecute и так запустит в браузере по умоланию. Может и так. Хотя мне кажется, что он скорее всего тоже залез бы в реестр, нашел там ссылку на нужный экзешник и запустил его, передав URL параметром.
Вариант 2 - совсем уж извращенный, найти в MSDN ничего похожего не вышло. Яркий пример важности комментариев. Либо сделал как знал, либо что-то исправил, а я теперь сиди мучайся.



Domino Видимо не знал, что ShellExecute и так запустит в браузере по умоланию.
ти прав на все 100%
я вабше сомневаюсь что он бил програмистом
Вариант 2 - совсем уж извращенный, найти в MSDN ничего похожего не вышло. Яркий пример важности комментариев. Либо сделал как знал, либо что-то исправил, а я теперь сиди мучайся.

ето точно
он использовал команду которую я использую в бат файлах
одним словом глупость полная

RUNDLL32.EXE
Windows имеет в своем составе утилиту командной строки Rundll32.exe, которая позволяет запускать некоторые команды-функции, заложенные в DLL-файлах.

Вообще-то данная утилита была разработана для внутреннего пользования программистами Microsoft. Но богатые возможности этой программы дало повод на всеобщее использование пользователями.

Область применения данной утилиты довольно широк. Вы можете вводить приведенные ниже команды в окне Запуск программы (Пуск-Выполнить), также создать ярлыки с заданнами параметрами запуска, использовать в коде на программируемом вами языке (C++, Delphi, Visual Basic и т.д.)

На основе вот этих статей: Launching URLs from Your App, INFO: Calling Shell Functions and Interfaces from a Multithreaded Apartment я сделал вывод, что сделан выбор в пользу варианта 2 для исправления дефекта работы команды ShellExecute в многопоточном приложении.

Суть: в многопоточном приложении безопаснее открывать не URL/файл, а запускать конкретное приложение, передавая URL/файл параметром.

Если бы вариант 2 (кстати, рекомендованный и подчистую переписанный из MSDN) еще и не глючил.

Чтобы открыть страничку в браузере, добавьте ShellAPI в uses и используйте код: Так же можно открыть страницу с компьютера:

Вот и всё, Удачи!

Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.

Как открыть ссылку на той же вкладке браузера? Я пробовал этот код:

Но он продолжает открывать ссылку в новой таблице.

windows url browser delphi

2 ответа

7 Решение Rob Kennedy [2012-06-18 20:38:00]

То, что браузер делает с новой командной строкой, является собственным выбором. Функция API не имеет никакого контроля. Иногда браузер позволяет пользователю настроить его.

Возможной точкой входа является OLE Automation. Используя этот метод, вы можете подключиться к любому существующему экземпляру MSIE, чтобы вы могли принести текущее окно просмотра к новому URL-адресу.

Здравствуйте, в этой статье я хотел бы рассказать как можно получить ссылку с браузера, который Вы укажите, или можно сделать, который у Вас открыт в текущий момент, в Интернете полно таких исходников, но они довольно сильно громоздкие, а мы еще и получим заголовок страницы, то есть название окна браузера (название страницы, которая в данный момент открыта во вкладке или в окне). Мы будем использовать очень хороший компонента, нет мы даже не будем его качать откуда-то, а просто воспользуемся стандартным компонентов и все, у нас готова наша почти программа для получения этих url из браузера, одно отделяет нас — это 3 строчки кода =). Данный компонент называется

Который находится на вкладке

Мы просто устанавливаем данный компонент на форму нашу и все, конечно можно создать его и программно, но пока что не будем насчет этого заморачиваться.

Теперь давайте на OnClick кнопки напишем код, который будет получать url с браузера и его заголовок.

С помощью SetLink мы устанавливаем браузер, с которого мы будем получать информацию, а также какую информацию, а затем в переменную Temp мы записываем это и через запятую в переменной у нас будет в двойных кавычках url и заголовок браузера. Теперь мы можем пропарсить это все и получить например только url

Репутация: нет
Всего: 38

P.S.: пол ночи над этим бился - победить не смог. Теперь надеюсь на Вас.

user posted image

Репутация: 12
Всего: 57

В общем случае, скорее всего, никак.
Ты же не ожидаешь, работая в осле, что рано или поздно запустится опера
Однако ты можешь ловить on beforenavigate и другие события, брать из них урл и делать ему shellexecute

Репутация: нет
Всего: 38

Цитата

Однако ты можешь ловить on beforenavigate и другие события, брать из них урл и делать ему shellexecute

Была такая идея. Еще можно привязать определение браузера по умолчанию, но мне кажеться - это обходной путь какой-то =(

user posted image

Репутация: 3
Всего: 128


с пом. ShellExecute страничка будет открыта в браузере по умолчанию.

Репутация: нет
Всего: 38

Цитата

с пом. ShellExecute страничка будет открыта в браузере по умолчанию.

Не факт. В реестре что угодно может быть прописано. У меня у знакомого, если в адресной строке ввести название программы (calc, например), то эта программа и запуститься. А насчет того, что на open можно прописать запуск любой программы - думаю говорить и не стоит.

user posted image

Репутация: 3
Всего: 128


ну это уже проблема юзера.
посмотреть, где в реестре прописан браузер по умолчанию и вызывать его.
а если в OnBeforeNavigate2 прописать

то у меня на компе открывается браузер по умолчанию (лиса).

Репутация: нет
Всего: 38

Цитата

ну это уже проблема юзера.
посмотреть, где в реестре прописан браузер по умолчанию и вызывать его.

Не знаю как насчет юзера, но мне бы не хотелось, чтобы юзер в моей программе кликнул на ссылку, а запустился калькулятор =) Поэтому все же надежнее найти браузер и передать ему адрес.

Цитата

то у меня на компе открывается браузер по умолчанию (лиса).

user posted image

  • В uses подключаем MSHTML и ActiveX
  • Создадим событие OnCreate на форме и запишем в нем следующий код:
  • Создадим событие OnClick на SpeedButton6 например, и в коде напишем:
WebBrowser1 . Navigate ( ComboBox1 . Text ) ; // Передаем в поиск, введенный адрес из ComboBox1; a := ComboBox1 . text ; // Записываем параллельно этот адрес в переменную; ComboBox1 . Items . Add ( a ) ; // Загружаем введенное в список ComboBox1;

Помещение введенного адреса в выпадающий список, будет позволять нам при нажатии на С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 пишем:
WebBrowser1 . ExecWB ( OLECMDID_SAVEAS , OLECMDEXECOPT_DODEFAULT ) ;
  • Для получения возможности печати по нажатию на SpeedButton8 в OnClick последнего пропишем:
WebBrowser1 . ExecWB ( OLECMDID_PRINT , OLECMDEXECOPT_DODEFAULT , PostData , Headers ) ;
  • Для предварительного просмотра странички перед печатью, в OnClick на SpeedButton10 пишем:
WebBrowser1 . ExecWB ( OLECMDID_PRINTPREVIEW , OLECMDEXECOPT_DODEFAULT ) ;
  • А для предварительной настройки ее параметров, в OnClick на SpeedButton11 пишем:
WebBrowser1 . ExecWB ( OLECMDID_PAGESETUP , OLECMDEXECOPT_DODEFAULT ) ;
  • Теперь организуем поиск слов на страничке, и в OnClick на SpeedButton12 пишем:
WebBrowser1 . ExecWB ( OLECMDID_FIND , OLECMDEXECOPT_DODEFAULT ) ;
  • Чтобы сохранить исходный код в текстовый файл нужно:

а) В разделе 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 в Яндекс Дзен

Читайте также: