Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
7 / 6 / 3
Регистрация: 16.08.2015
Сообщений: 181

Нужна помощь с Chrome delphi RAD Studio 11

25.07.2023, 09:53. Показов 2041. Ответов 2

Студворк — интернет-сервис помощи студентам
Доброе время суток
Я видел обсуждение на эту тему в этой ветке форума, сильно не пинайте
Не могу разобраться с компонентом Chrome примеры, которые идут с архивом работают, но открывая код в примере понимаю, что совсем не чего не понимаю
Прошу вас уважаемые пользователи форума помочь с примером как написать браузер
На форму кинул компоненты
CEFWindowParent1
Chromium1
Timer1
Button1

Вот код который я написал но страница не открывается

на картинке в проэкт я перенес файлы из примера


Delphi
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Vcl.ExtCtrls, Vcl.StdCtrls, uCEFWinControl, uCEFWindowParent, uCEFChromiumCore,
  uCEFChromium, uCEFInterfaces, uCEFApplication, uCEFTypes, uCEFConstants,
  uCEFSentinel, uCEFFileDialogInfo;
 
const
  MINIBROWSER_SHOWDEVTOOLS = WM_APP + $101;
  MINIBROWSER_HIDEDEVTOOLS = WM_APP + $102;
  MINIBROWSER_COPYHTML = WM_APP + $103;
  MINIBROWSER_SHOWRESPONSE = WM_APP + $104;
  MINIBROWSER_COPYFRAMEIDS = WM_APP + $105;
  MINIBROWSER_COPYFRAMENAMES = WM_APP + $106;
  MINIBROWSER_SAVEPREFERENCES = WM_APP + $107;
  MINIBROWSER_COPYALLTEXT = WM_APP + $108;
  MINIBROWSER_TAKESNAPSHOT = WM_APP + $109;
  MINIBROWSER_SHOWNAVIGATION = WM_APP + $10A;
  MINIBROWSER_COOKIESFLUSHED = WM_APP + $10B;
  MINIBROWSER_PDFPRINT_END = WM_APP + $10C;
  MINIBROWSER_PREFS_AVLBL = WM_APP + $10D;
  MINIBROWSER_DTDATA_AVLBL = WM_APP + $10E;
  MINIBROWSER_SHOWFILEDLG = WM_APP + $10F;
  MINIBROWSER_SELECTCERT = WM_APP + $110;
  MINIBROWSER_MEDIAACCESSRQST = WM_APP + $111;
  MINIBROWSER_HOMEPAGE = 'https://www.google.com';
  MINIBROWSER_CONTEXTMENU_SHOWDEVTOOLS = MENU_ID_USER_FIRST + 1;
  MINIBROWSER_CONTEXTMENU_HIDEDEVTOOLS = MENU_ID_USER_FIRST + 2;
  MINIBROWSER_CONTEXTMENU_COPYHTML = MENU_ID_USER_FIRST + 3;
  MINIBROWSER_CONTEXTMENU_JSWRITEDOC = MENU_ID_USER_FIRST + 4;
  MINIBROWSER_CONTEXTMENU_JSPRINTDOC = MENU_ID_USER_FIRST + 5;
  MINIBROWSER_CONTEXTMENU_SHOWRESPONSE = MENU_ID_USER_FIRST + 6;
  MINIBROWSER_CONTEXTMENU_COPYFRAMEIDS = MENU_ID_USER_FIRST + 7;
  MINIBROWSER_CONTEXTMENU_COPYFRAMENAMES = MENU_ID_USER_FIRST + 8;
  MINIBROWSER_CONTEXTMENU_SAVEPREFERENCES = MENU_ID_USER_FIRST + 9;
  MINIBROWSER_CONTEXTMENU_COPYALLTEXT = MENU_ID_USER_FIRST + 10;
  MINIBROWSER_CONTEXTMENU_TAKESNAPSHOT = MENU_ID_USER_FIRST + 11;
  MINIBROWSER_CONTEXTMENU_GETNAVIGATION = MENU_ID_USER_FIRST + 12;
  MINIBROWSER_CONTEXTMENU_MUTEAUDIO = MENU_ID_USER_FIRST + 13;
  MINIBROWSER_CONTEXTMENU_UNMUTEAUDIO = MENU_ID_USER_FIRST + 14;
  DEVTOOLS_SCREENSHOT_MSGID = 1;
  DEVTOOLS_MHTML_MSGID = 2;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    Chromium1: TChromium;
    CEFWindowParent1: TCEFWindowParent;
    procedure Timer1Timer(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FPendingMsgID: integer;
    FDevToolsMsgValue: ustring;
    FShutdownReason: string;
    FHasShutdownReason: boolean;
    FSelectCertCallback: ICefSelectClientCertificateCallback;
    FCertificates: TCefX509CertificateArray;
    FAllowDownloads: boolean;
 
    FMediaAccessCallback: ICefMediaAccessCallback;
    FRequestingOrigin: string;
    FRequestedPermissions: cardinal;
 
    FResponse: TStringList;
    FRequest: TStringList;
    FNavigation: TStringList;
 
    FFileDialogInfo: TCEFFileDialogInfo;
 
    // Variables to control when can we destroy the form safely
    FCanClose: boolean;  // Set to True in TChromium.OnBeforeClose
    FClosing: boolean;  // Set to True in the CloseQuery event.
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
uses
  uPreferences, uCefStringMultimap, uCEFMiscFunctions, uSimpleTextViewer,
  uCEFClient, uFindFrm, uCEFDictionaryValue, uDirectorySelector, uSelectCertForm;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Chromium1.LoadURL('https://ya.ru');
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  FCanClose := False;
  FClosing := False;
  FResponse := TStringList.Create;
  FRequest := TStringList.Create;
  FNavigation := TStringList.Create;
  FSelectCertCallback := nil;
  FMediaAccessCallback := nil;
  FCertificates := nil;
  FPendingMsgID := 0;
  FAllowDownloads := True;
 
  // Windows may show this text message while shutting down the operating system
  FShutdownReason := 'MiniBrowser closing...';
 // FHasShutdownReason := ShutdownBlockReasonCreate(Application.Handle, @FShutdownReason[1]);
 
  FFileDialogInfo := TCEFFileDialogInfo.Create;
 
  // The MultiBrowserMode store all the browser references in TChromium.
  // The first browser reference is the browser in the main form.
  // When MiniBrowser allows CEF to create child popup browsers it will also
  // store their reference inside TChromium and you can use all the TChromium's
  // methods and properties to manipulate those browsers.
  // To do that call TChromium.SelectBrowser with the browser ID that will be
  // used when you call any method or property in TChromium.
  Chromium1.MultiBrowserMode := True;
  Chromium1.DefaultURL := MINIBROWSER_HOMEPAGE;
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
 
 
  // WebRTC's IP leaking can lowered/avoided by setting these preferences
  // To test this go to https://www.browserleaks.com/webrtc
  Chromium1.WebRTCIPHandlingPolicy := hpDisableNonProxiedUDP;
  Chromium1.WebRTCMultipleRoutes := STATE_DISABLED;
  Chromium1.WebRTCNonproxiedUDP := STATE_DISABLED;
 
  // GlobalCEFApp.GlobalContextInitialized has to be TRUE before creating any browser
  // If it's not initialized yet, we use a simple timer to create the browser later.
  if not (Chromium1.CreateBrowser(CEFWindowParent1, '')) then
    Timer1.Enabled := True;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  if not (Chromium1.CreateBrowser(CEFWindowParent1, '')) and not (Chromium1.Initialized) then
  begin
    Timer1.Enabled := True;
 
  end;
 
end;
 
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.07.2023, 09:53
Ответы с готовыми решениями:

Релиз RAD Studio/Delphi XE5 (Delphi For Android) UPD (Перепост c habrahabr)
Только что, компания Embarcadero Technologies объявила о выходе официального релиза новой версии RAD Studio — XE5 Главным новшеством...

Перевод проекта с Delphi 7 на Delphi RAD Studio 10.1 Berlin
Приветствую. Пришлось вспомнить студенческие годы и заняться уже готовым проектом, который был сделан в Delphi 7. Проект компилируется в...

RAD Studio (delphi)
Подскажите пожалуйста есть ли RAD Studio 2010 (Delphi) что бы с активацией не было проблем киньте ссылку пожалуйста очень нужно можно RAD...

2
7 / 6 / 3
Регистрация: 16.08.2015
Сообщений: 181
07.08.2023, 10:13  [ТС]
Доброе время всем участникам форума

Пишу заметку что бы не забыть, если есть какие-то поправки в коде прошу написать.
С сайта скачал данный компонент
https://github.com/salvadordf/CEF4Delphi

на форме
Edit1, Button1, Timer1, Chromium1, CEFWindowParent1
Timer1 настройка Timer1.Interval := 200; Timer1.Enabled := False;


В проект необходимо положить файлы компонента




Нужно вписать в проектный файл *.dpr

Delphi
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
uses
{$IFDEF DELPHI16_UP}
  Vcl.Forms,
  WinApi.Windows,
  {$ELSE}
  Forms,
  Windows,
  {$ENDIF }
  uCEFApplication,
  Unit1 in 'Unit1.pas' {Form1};
 
{$R *.res}
 
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
 
begin
 
  GlobalCEFApp := TCefApplication.Create;
 
  // In case you want to use custom directories for the CEF3 binaries, cache and user data.
 
{
  GlobalCEFApp.FrameworkDirPath     := 'cef';
  GlobalCEFApp.ResourcesDirPath     := 'cef';
  GlobalCEFApp.LocalesDirPath       := 'cef\locales';
  GlobalCEFApp.cache                := 'cef\cache';
  GlobalCEFApp.UserDataPath         := 'cef\User Data';
}
  if GlobalCEFApp.StartMainProcess then
  begin
    Application.Initialize;
    Application.MainFormOnTaskbar := True;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
 
  GlobalCEFApp.Free;
  GlobalCEFApp := nil;
 
end.
В коде в разделе

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
uses
{$IFDEF DELPHI16_UP}
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Vcl.StdCtrls, Vcl.ExtCtrls,
 
  {$ELSE}
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,
 
  {$ENDIF}
  uCEFChromium, uCEFWindowParent, uCEFInterfaces, uCEFConstants, uCEFTypes,
  uCEFWinControl, uCEFSentinel, uCEFChromiumCore, uCEFApplication;
FormCreate

Delphi
1
2
3
4
5
6
procedure TForm1.FormCreate(Sender: TObject);
begin
  FCanClose := False;
  FClosing := False;
  Chromium1.DefaultURL := Edit1.Text;
end;
FormCloseQuery

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := FCanClose;
 
  if not (FClosing) then
  begin
    FClosing := True;
    Visible := False;
    Chromium1.CloseBrowser(True);
  end;
end;
FormShow

Delphi
1
2
3
4
5
procedure TForm1.FormShow(Sender: TObject);
begin
  if not (Chromium1.CreateBrowser(CEFWindowParent1)) then
    Timer1.Enabled := True;
end;
Timer1Timer

Delphi
1
2
3
4
5
6
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  if not (Chromium1.CreateBrowser(CEFWindowParent1)) and not (Chromium1.Initialized) then
    Timer1.Enabled := True;
end;
Button1Click

Delphi
1
2
3
4
procedure TForm1.Button1Click(Sender: TObject);
begin
 Chromium1.LoadURL(Edit1.Text);
end;
компонент Chromium1

Chromium1AfterCreated

Delphi
1
2
3
4
procedure TForm1.Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
begin
  PostMessage(Handle, CEF_AFTERCREATED, 0, 0);
end;

Chromium1BeforeClose

Delphi
1
2
3
4
5
procedure TForm1.Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser);
begin
FCanClose := True;
  PostMessage(Handle, WM_CLOSE, 0, 0);
end;

Chromium1BeforePopup

Delphi
1
2
3
4
procedure TForm1.Chromium1BeforePopup(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings; var extra_info: ICefDictionaryValue; var noJavascriptAccess, Result: Boolean);
begin
  Result := (targetDisposition in [WOD_NEW_FOREGROUND_TAB, WOD_NEW_BACKGROUND_TAB, WOD_NEW_POPUP, WOD_NEW_WINDOW]);
end;
Chromium1Close

Delphi
1
2
3
4
5
procedure TForm1.Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction: TCefCloseBrowserAction);
begin
  PostMessage(Handle, CEF_DESTROY, 0, 0);
  aAction := cbaDelay;
end;
В разделе private { Private declarations } нужно создать 2 переменный и 6 процедуры

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private
    { Private declarations }
 
        // Variables to control when can we destroy the form safely
    FCanClose: boolean;  // Set to True in TChromium.OnBeforeClose
    FClosing: boolean;  // Set to True in the CloseQuery event.
 
    // You have to handle this two messages to call NotifyMoveOrResizeStarted or some page elements will be misaligned.
    procedure WMMove(var aMessage: TWMMove); message WM_MOVE;
    procedure WMMoving(var aMessage: TMessage); message WM_MOVING;
 
    // You also have to handle these two messages to set GlobalCEFApp.OsmodalLoop
    procedure WMEnterMenuLoop(var aMessage: TMessage); message WM_ENTERMENULOOP;
    procedure WMExitMenuLoop(var aMessage: TMessage); message WM_EXITMENULOOP;
 
    procedure BrowserCreatedMsg(var aMessage: TMessage); message CEF_AFTERCREATED;
    procedure BrowserDestroyMsg(var aMessage: TMessage); message CEF_DESTROY;
Delphi
1
2
3
4
5
6
7
procedure TForm1.WMMove(var aMessage: TWMMove);
begin
  inherited;
 
  if (Chromium1 <> nil) then
    Chromium1.NotifyMoveOrResizeStarted;
end;
Delphi
1
2
3
4
5
6
7
procedure TForm1.WMMoving(var aMessage: TMessage);
begin
  inherited;
 
  if (Chromium1 <> nil) then
    Chromium1.NotifyMoveOrResizeStarted;
end;
Delphi
1
2
3
4
5
procedure TForm1.WMEnterMenuLoop(var aMessage: TMessage);
begin
  if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then
    GlobalCEFApp.OsmodalLoop := True;
end;
Delphi
1
2
3
4
5
6
7
procedure TForm1.WMExitMenuLoop(var aMessage: TMessage);
begin
  inherited;
 
  if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then
    GlobalCEFApp.OsmodalLoop := False;
end;
Delphi
1
2
3
4
5
procedure TForm1.BrowserCreatedMsg(var aMessage: TMessage);
begin
 //Caption := 'Simple Browser 2';
 // AddressPnl.Enabled := True;
end;
Delphi
1
2
3
4
procedure TForm1.BrowserDestroyMsg(var aMessage: TMessage);
begin
  CEFWindowParent1.Free;
end;
0
7 / 6 / 3
Регистрация: 16.08.2015
Сообщений: 181
07.08.2023, 11:44  [ТС]
если нужно вывести HTML код страницы

В компоненте Chromium1

создаем процедуру
procedure htmltomemo(const str: ustring);

Delphi
1
2
3
4
5
6
procedure TForm1.htmltomemo(const str: ustring);
begin
 Form1.Memo1.Lines.Clear; 
  Form1.Memo1.Lines.Add(str);
  Application.ProcessMessages;
end;
Chromium1LoadEnd

Delphi
1
2
3
4
5
6
7
8
procedure TForm1.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer);
begin
 
  if (frame <> nil) and frame.IsMain then
    frame.GetSourceProc(htmltomemo); //вывод html кода в memo1
 
      //получение html кода
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.08.2023, 11:44
Помогаю со студенческими работами здесь

Delphi и RAD Studio XE4
На официальном сайте Delphi написано:&quot;Buy Delphi or RAD Studio XE4&quot;, не могли бы вы объяснить что такое RAD Studio XE4?

Виснет RAD Studio 10.3 Delphi
скачал попробовать RAD Studio 10.3.3 Delphi, на старый комп со встроенной видюхой, Win 7 embedded 32 bit виснет bds.exe при попытке...

Rad studio delphi 2010
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type ...

XE RAD STUDIO Delphi и андроид
Требуется сделать автокликер на делфи под андроид. Пишу на делфи. Автокликер-тоесть программная инициализация мыши, управлению...

WriteProcessMemory в Delphi 7 и в RAD Studio 10.4.1
Здравствуйте. Возникла странная проблема. Есть рабочий код изначально написанный в D7 Код из D7 var DllName : PChar; ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru