Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
24 / 24 / 7
Регистрация: 23.03.2013
Сообщений: 140

Отслеживание переходов в браузере (стороннем или компоненте)

28.05.2014, 20:53. Показов 2074. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть задача: необходимо отобразить определенную страницу (в самой программе или открыть сторонний браузер). Далее необходимо уловить переход пользователя по определенной ссылке и выполнить определенные действия.
Как такое реализовать в Lazarus'e?

Заранее благодарю за помощь!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2014, 20:53
Ответы с готовыми решениями:

Отслеживание текущей открытой Активити в запущенном стороннем приложении
Мне необходимо отследить какая Активити запущена в стороннем приложении в текущий момент для целей мониторинга состояния этого приложения. ...

Изменить текст в стороннем браузере
здравствуйте. такой вопрос можно ли приложение получить доступ к странице в браузере, например опере, чтобы написать текста и проставить...

Программно нажать кнопку на открытой в стороннем браузере веб-странице (cpp Builder 6)
Здравствуйте! Помогите разобраться с одной прикладной задачкой! Суть в следующем: допустим на форме приложения есть кнопка типа TButton ,...

8
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33131 / 21426 / 8220
Регистрация: 22.10.2011
Сообщений: 36,751
Записей в блоге: 9
28.05.2014, 23:25
Стандартного компонента типа TWebBrowser-а для Лазаруса не существует. А со взаимодействием со сторонними браузерами могут быть очень серьезные проблемы. Хотя бы укажи для какой ОС это все делается, или тебе нужна кроссплатформенная программа?
0
 Аватар для fireday
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
30.05.2014, 17:16
Можно попробовать подцепить IE - ieframe.dll (только под windows)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33131 / 21426 / 8220
Регистрация: 22.10.2011
Сообщений: 36,751
Записей в блоге: 9
30.05.2014, 17:53
И потом ТС скажет, что это надо было под Linux... Так что я лучше дождусь его ответа...
0
24 / 24 / 7
Регистрация: 23.03.2013
Сообщений: 140
01.06.2014, 12:16  [ТС]
UI,
только для Windows (XP, 7, 8)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33131 / 21426 / 8220
Регистрация: 22.10.2011
Сообщений: 36,751
Записей в блоге: 9
01.06.2014, 16:59
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Цитата Сообщение от Kotlerman Посмотреть сообщение
только для Windows (XP, 7, 8)
В таком случае для решения этой задачи нужен LazActiveX. Последовательность действий такая:
1. Заходим в меню Пакет -> Установить /удалить пакеты, выбираем в пакетах, доступных для установки LazActiveX 0.1, жмем кнопку "Установить выбранное", и следом - "Сохранить и перезапустить IDE", Лазарус пересоберется, и перезагрузится.
2. В меню Сервис после установки LazActiveX добавился пункт "Импортировать библиотеку типов". Импортируешь C:\WINDOWS\system32\shdocvw.dll, будет создан TLB-файл, просто добавляешь его в Uses...
3. Кладешь на форму кнопку, Edit, Memo и TActiveXContainer с закладки ActiveX. И, скажем, вот так:
Pascal Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, activexcontainer, Forms, Controls, Graphics,
  Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    ActiveXContainer1: TActiveXContainer;
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { private declarations }
    procedure MyBeforeNavigate2(Sender: TObject; pDisp:IDispatch;
      var URL:OleVariant; var Flags:OleVariant; var TargetFrameName:OleVariant;
      var PostData:OleVariant; var Headers:OleVariant; var Cancel:WordBool);
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
uses SHDocVw_1_1_TLB;
 
var
  WB : TEvsWebBrowser;
 
{$R *.lfm}
 
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
  url, zero : OleVariant;
begin
  url := UTF8Decode(Edit1.Text);
  zero := Null;
  WB.ComServer.Navigate2(url, zero, zero, zero, zero);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  WB := TEvsWebBrowser.Create(Self);
  ActiveXContainer1.ComServer := WB.ComServer;
  ActiveXContainer1.Active := True;
  WB.OnBeforeNavigate2 := @MyBeforeNavigate2;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  WB.Free;
end;
 
procedure TForm1.MyBeforeNavigate2(Sender: TObject; pDisp: IDispatch;
  var URL: OleVariant; var Flags: OleVariant; var TargetFrameName: OleVariant;
  var PostData: OleVariant; var Headers: OleVariant; var Cancel: WordBool);
begin
  Memo1.Lines.Add(UTF8Encode(URL));
end;
 
end.
В результате имеешь на форме WebBrowser с реакцией на попытку перейти по новому адресу:

Отслеживание переходов в браузере (стороннем или компоненте)


А что уж там в обработчике OnBeforeNavigate2 делать - это только от твоей фантазии зависит
1
24 / 24 / 7
Регистрация: 23.03.2013
Сообщений: 140
03.06.2014, 17:01  [ТС]
UI,
когда пробую с http://google.ru/, все работает, но вот если пробую http://adf.ly/dtBfP (что мне как раз и нужно), получаю ошибки
Code Скопировано
1
RunError(217)
Code Скопировано
1
Проект project1 вызвал класс исключения 'EControlC' с сообщением: Control-C hit.
Code Скопировано
1
Control-C hit
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33131 / 21426 / 8220
Регистрация: 22.10.2011
Сообщений: 36,751
Записей в блоге: 9
03.06.2014, 19:16
Не воспроизводится. Да, выбрасывает окно ошибки скрипта, но после нажатия на "Yes" (в смысле, продолжать выполнение скриптов на странице) продолжает работать как положено... Насколько я помню, окно ошибки скриптов тоже как-то убиралось. Что-то связанное с Silent...
0
24 / 24 / 7
Регистрация: 23.03.2013
Сообщений: 140
11.06.2014, 13:32  [ТС]
Так и не разобрался, как довести до ума работу скриптов при использовании этого способа. В результате использовал GeckoPort.

Инструкции по установке и применению:
http://lazplanet.blogspot.com/... o-pt1.html
http://lazplanet.blogspot.com/... o-pt2.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.06.2014, 13:32
Помогаю со студенческими работами здесь

Определить количество переходов из 1 в 0 или из 0 в 1
С устройства ввода последовательно поступают 1 и 0. Определить количество переходов из 1 в 0 или из 0 в 1. Количество вводимых 10. Хранить...

Посоветуйте пожалуйста! Как мне в компоненте ComboBox2 Организовать смену шрифтов в компоненте Memo1?
Всем заранее спасибо!!!!!!! void __fastcall TForm1::ComboBox2Change(TObject *Sender) { }

Как разместить кнопку на компоненте Tedit или Tcombobox?
как разместить кнопку на компоненте Tedit или Tcombobox

Как убрать рамку в компоненте WebBrowser или изменить ее цвет?
Доброго времени суток Интересует как убрать рамку в компоненте WebBrowser или изменить ее цвет в других компонентах есть свойство...

Создание куба и его вращение в компоненте Image или Shape
Кто нить может подсказать как связать грани куба так чтобы его можно было вращать по вертикали и горизонтали? Я создал 8 точек с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Как использовать Behavior Graph в Unity при создании игрового AI
GameUnited 14.04.2025
Искусственный интеллект в играх прошел долгий путь эволюции. От простейших алгоритмов, движущих призраками в Pac-Man, до сложных систем, управляющих поведением персонажей в современных AAA-проектах. . . .
Создание и стилизация списков в SwiftUI
mobDevWorks 14.04.2025
Списки — фундаментальный элемент мобильных интерфейсов. От списка контактов до ленты новостей, от настроек до каталога товаров — трудно представить приложение, которое не использовало бы этот. . .
Паттерн SAGA и распределённые транзакции в микросервисной архитектуре
stackOverflow 14.04.2025
Переход от монолитной архитектуры к микросервисам принес множество преимуществ: гибкость разработки, независимость развертывания и масштабирования отдельных компонентов. Однако этот переход создал и. . .
Кастомные аллокаторы в C++ и оптимизация управления памятью
bytestream 14.04.2025
Работа с памятью в С++ всегда была и остаётся одной из самых увлекательных и сложных задач для программиста. Любой опытный C++ разработчик подтвердит: стандартные механизмы аллокации памяти – штука. . .
Организация сетей в Kubernetes и эффективное развертывание
Mr. Docker 14.04.2025
Сетевая инфраструктура Kubernetes представляет собой сложную, но хорошо спроектированную систему, которая позволяет контейнерам взаимодействовать между собой и с внешним миром. За кажущейся простотой. . .
Многопоточность в Rust: Fearless concurrency и практические примеры
golander 14.04.2025
Многопоточное программирование связано с рядом известных проблем. Наиболее распространенные из них — гонки данных (data races), взаимные блокировки (deadlocks) и условия гонки (race conditions). Эти. . .
Списки и кортежи в Python: различия, особенности, применение
py-thonny 13.04.2025
Python славится своей гибкостью при работе с данными. В арсенале языка есть две основные последовательные структуры данных, которые программисты используют ежедневно — списки и кортежи. Эти структуры. . .
Middleware в ASP.NET Core
UnmanagedCoder 13.04.2025
В ASP. NET Core термин "middleware" занимает особое место. Что же это такое? Middleware представляет собой программные компоненты, которые формируют конвейер обработки HTTP-запросов в приложении. . . .
Таблицы лута в Unity с MinMaxCurve и AnimationCurve
GameUnited 12.04.2025
Создание сбалансированного лута в играх — задача не из простых. Разработчики постоянно ищут способы настройки систем выпадения предметов, которые будут одновременно справедливыми для игроков и. . .
std::expected в C++: Управление ошибками
bytestream 12.04.2025
Обработка ошибок всегда была важной и одновременно сложной задачей в программировании на C++. На протяжении долгого времени разработчики использовали различные подходы: возвращаемые коды ошибок,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер