Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Delphi |
![]() ![]() |
Топик располагается на нескольких страницах: 1 2 [все] |
Женя32 Member Откуда: Сообщений: 170 |
Здравствуйте! Подскажите, пожалуйста, как открыть сайт в cef4delphi TChromium? Кинул на форму TChromium1 и ChromiumWindow1, дальше что нужно сделать? |
19 фев 21, 20:57 [22283777] Ответить | Цитировать Сообщить модератору |
Softologic Member Откуда: Питер Сообщений: 244 |
"Наша песня хороша, начинай сначала" ![]() Женя32, стопиццот раз уже рассказывали ведь... и советы давали и ссылки. Так и не сдвинулось ничего в освоении cef4delphi ??? |
19 фев 21, 21:33 [22283800] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
Не получается..... Я логику не пойму... В старой версии кинул компонент TChromium на форму, прописал Chromium1.load('ya.ru'), ВСЕ!!! Страница загружена! А тут...... Что нужно сделать...., не понятно. |
||||
19 фев 21, 21:44 [22283807] Ответить | Цитировать Сообщить модератору |
Softologic Member Откуда: Питер Сообщений: 244 |
Я самолично вам писал - есть примеры, они в папке с библиотекой. Достаточно открыть самый простой пример и попробовать понять. Все. Вместо того чтобы внять моему (и многих других) совету, вы продолжаете плодить одну и ту же тему раз в полгода. С одним и тем же вопросом. |
19 фев 21, 22:35 [22283829] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
Посмотрите, пожалуйста, что я ни так делаю?... https://disk.yandex.ru/d/0KtvK9zOiHQNbg |
||||
20 фев 21, 14:00 [22284066] Ответить | Цитировать Сообщить модератору |
zedxxx Member Откуда: Сообщений: 69 |
Вот что: https://www.briskbard.com/index.php?lang=en&pageid=cef#usage Вам ещё надо dpr правильно написать, ну и не забыть распаковать бинарники и ресурсы фреймворка в папку с вашим exe. Демка с подробными комментариями: https://github.com/salvadordf/CEF4Delphi/tree/master/demos/Delphi_VCL/SimpleBrowser |
||||
20 фев 21, 15:50 [22284128] Ответить | Цитировать Сообщить модератору |
X11 Member Откуда: Kharkiv, Ukraine Сообщений: 15029 |
С компонентой поставляются примеры. Посмотри, как там реализовано. |
20 фев 21, 19:12 [22284213] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
// Если браузер еще не инициализирован, мы используем простой таймер для создания браузера позже. if not(ChromiumWindow1.CreateBrowser) then Timer1.Enabled := True; Я все делаю как в примере SimpleBrowser, но реакции ноль! 1). Помещаю на форму компонент ChromiumWindow1 2). procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean); begin // Если он еще не инициализирован, мы используем простой таймер для создания браузера позже. if not(ChromiumWindow1.CreateBrowser) then Timer1.Enabled := True; end; 3). procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled := False; if not(ChromiumWindow1.CreateBrowser) and not(ChromiumWindow1.Initialized) then Timer1.Enabled := True; end; 4). procedure TForm1.ChromiumWindow1AfterCreated(Sender: TObject); begin ChromiumWindow1.LoadURL('ya.ru'); end; Код полностью: unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, uCEFWinControl, uCEFChromiumWindow, Vcl.ComCtrls; type TForm1 = class(TForm) Panel1: TPanel; PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; Panel2: TPanel; Panel3: TPanel; ChromiumWindow1: TChromiumWindow; Timer1: TTimer; procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormCreate(Sender: TObject); procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean); procedure ChromiumWindow1Close(Sender: TObject); procedure ChromiumWindow1AfterCreated(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure ChromiumWindow1BeforeClose(Sender: TObject); private { Private declarations } protected // Переменные для контроля когда мы можем безопасно уничтожить форму FCanClose : boolean; // Установите значение True в Chromium.OnBeforeClose FClosing : boolean; // Установите значение True в событии CloseQuery. public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses uCEFApplication; procedure TForm1.ChromiumWindow1AfterCreated(Sender: TObject); begin ChromiumWindow1.LoadURL('ya.ru'); end; procedure TForm1.ChromiumWindow1BeforeClose(Sender: TObject); begin FCanClose := True; PostMessage(Handle, WM_CLOSE, 0, 0); end; procedure TForm1.ChromiumWindow1Close(Sender: TObject); begin // Destroy Child Window уничтожит дочернее окно, созданное шеф-поваром в верхней части Z-порядка. if not(ChromiumWindow1.DestroyChildWindow) then begin FCanClose := True; PostMessage(Handle, WM_CLOSE, 0, 0); end; end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := FCanClose; if not(FClosing) then begin FClosing := True; Visible := False; ChromiumWindow1.CloseBrowser(True); end; end; procedure TForm1.FormCreate(Sender: TObject); begin FCanClose := False; FClosing := False; end; procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean); begin // GlobalCEFApp.Global Context Initialized должен быть истинным перед созданием любого браузера // Если он еще не инициализирован, мы используем простой таймер для создания браузера позже. if not(ChromiumWindow1.CreateBrowser) then Timer1.Enabled := True; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled := False; if not(ChromiumWindow1.CreateBrowser) and not(ChromiumWindow1.Initialized) then Timer1.Enabled := True; end; end. Сообщение было отредактировано: 21 фев 21, 13:55 |
||||
21 фев 21, 13:59 [22284395] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52445 |
В каком месте примера ты нашёл вызов LoadURL в событии AfterCreate? В каком месте примера ты нашёл инициализацию в событии ShortCut? В каком месте примера ты нашёл вызовы PostMessage(WM_CLOSE)? Posted via ActualForum NNTP Server 1.5 |
||
21 фев 21, 14:14 [22284399] Ответить | Цитировать Сообщить модератору |
Softologic Member Откуда: Питер Сообщений: 244 |
Сдается мне, реакции ноль (в изначальном примере simplebrowser) еще и потому что бинарники не были распакованы в нужное место и не инициализируются. Женя, читайте внимательно ссылки, которые вам предоставляют. Там все расписано, где и какие библиотеки брать и куда распаковывать.
Сообщение было отредактировано: 21 фев 21, 18:51 |
21 фев 21, 18:56 [22284496] Ответить | Цитировать Сообщить модератору |
Softologic Member Откуда: Питер Сообщений: 244 |
https://www.briskbard.com/index.php?lang=en&pageid=cef#usage К сообщению приложен файл. Размер - 26Kb Сообщение было отредактировано: 21 фев 21, 18:53 |
21 фев 21, 19:00 [22284498] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
Да причем здесь бинарники? Если бы бинарников не было, тогда демо-проекты не запускались бы, и выходила бы ошибка: К сообщению приложен файл. Размер - 17Kb |
||||
22 фев 21, 13:36 [22284726] Ответить | Цитировать Сообщить модератору |
Softologic Member Откуда: Питер Сообщений: 244 |
Так если демо-пример самый простой запускается, в чем проблема тогда? Вставляйте туда ваш "ya.ru" и вперед. |
||||||||
22 фев 21, 15:19 [22284767] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
Да, можно и так... Но, мне хотелось бы понять, как создавать проекты с нуля? |
||||
22 фев 21, 16:03 [22284785] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52445 |
В случае с Дельфи это просто: достаточно размещать правильный код в обработчиках правильных событий. Копи-пасту правильного кода ты уже освоил, теперь изучай когда, в какой последовательности и при каких обстоятельствах вызываются события чтобы научиться выбирать то правильное, в обработчике которого и надо писать код. Posted via ActualForum NNTP Server 1.5 |
||
22 фев 21, 16:06 [22284786] Ответить | Цитировать Сообщить модератору |
Softologic Member Откуда: Питер Сообщений: 244 |
Тут помогут более простые примеры. Их туча в интернете - например есть книги с примерами-исходниками, где пошагово с самых азов объясняется старт. Cef4Delphi - фреймворк не из простых (для новичков), там есть нюансы, которые вам пока рано еще осваивать (на мой взгляд). Начните с самых простых основ, но применительно к конкретным задачам (чтобы мотивация посильнее была:)) Сообщение было отредактировано: 22 фев 21, 16:55 |
||||||||
22 фев 21, 17:01 [22284800] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
Приведу 2 примера, в чем отличие? 1). Код, максимально урезанного SimpleBrowser, ВСЕ РАБОТАЕТ: unit uSimpleBrowser; interface 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, Controls, Forms, Dialogs, StdCtrls, {$ENDIF} uCEFChromiumWindow, uCEFWinControl, Vcl.ExtCtrls; type TForm1 = class(TForm) ChromiumWindow1: TChromiumWindow; AddressPnl: TPanel; AddressEdt: TEdit; GoBtn: TButton; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormCreate(Sender: TObject); procedure ChromiumWindow1AfterCreated(Sender: TObject); procedure ChromiumWindow1Close(Sender: TObject); private protected // Variables to control when can we destroy the form safely // Переменные для контроля когда мы можем безопасно уничтожить форму FCanClose : boolean; // Set to True in TChromium.OnBeforeClose / Установите значение True в Chromium.OnBeforeClose FClosing : boolean; // Set to True in the CloseQuery event / Установите значение True в событии CloseQuery. public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := FCanClose; if not(FClosing) then begin FClosing := True; Visible := False; ChromiumWindow1.CloseBrowser(True); end; end; procedure TForm1.FormCreate(Sender: TObject); begin FCanClose := False; FClosing := False; end; procedure TForm1.FormShow(Sender: TObject); begin // GlobalCEFApp.Global Context Initialized должен быть истинным перед созданием любого браузера // Если он еще не инициализирован, мы используем простой таймер для создания браузера позже. if not(ChromiumWindow1.CreateBrowser) then Timer1.Enabled := True; end; procedure TForm1.ChromiumWindow1Close(Sender: TObject); begin // DestroyChildWindow will destroy the child window created by CEF at the top of the Z order. // Destroy Child Window уничтожит дочернее окно, созданное шеф-поваром в верхней части Z-порядка. if not(ChromiumWindow1.DestroyChildWindow) then begin FCanClose := True; PostMessage(Handle, WM_CLOSE, 0, 0); end; end; procedure TForm1.ChromiumWindow1AfterCreated(Sender: TObject); begin ChromiumWindow1.LoadURL('http://www.google.com'); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled := False; if not(ChromiumWindow1.CreateBrowser) and not(ChromiumWindow1.Initialized) then Timer1.Enabled := True; end; end. Код моего проект, сайт не грузится: unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, uCEFWinControl, uCEFChromiumWindow, Vcl.ExtCtrls; type TForm1 = class(TForm) ChromiumWindow1: TChromiumWindow; Timer1: TTimer; procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure ChromiumWindow1AfterCreated(Sender: TObject); procedure ChromiumWindow1Close(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } protected // Variables to control when can we destroy the form safely // Переменные для контроля когда мы можем безопасно уничтожить форму FCanClose : boolean; // Set to True in TChromium.OnBeforeClose / Установите значение True в Chromium.OnBeforeClose FClosing : boolean; // Set to True in the CloseQuery event / Установите значение True в событии CloseQuery. public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ChromiumWindow1AfterCreated(Sender: TObject); begin ChromiumWindow1.LoadURL('http://www.google.com'); end; procedure TForm1.ChromiumWindow1Close(Sender: TObject); begin // Destroy Child Window уничтожит дочернее окно, созданное шеф-поваром в верхней части Z-порядка. if not(ChromiumWindow1.DestroyChildWindow) then begin FCanClose := True; PostMessage(Handle, WM_CLOSE, 0, 0); end; end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := FCanClose; if not(FClosing) then begin FClosing := True; Visible := False; ChromiumWindow1.CloseBrowser(True); end; end; procedure TForm1.FormCreate(Sender: TObject); begin FCanClose := False; FClosing := False; end; procedure TForm1.FormShow(Sender: TObject); begin // GlobalCEFApp.Global Context Initialized должен быть истинным перед созданием любого браузера // Если он еще не инициализирован, мы используем простой таймер для создания браузера позже. if not(ChromiumWindow1.CreateBrowser) then Timer1.Enabled := True; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled := False; if not(ChromiumWindow1.CreateBrowser) and not(ChromiumWindow1.Initialized) then Timer1.Enabled := True; end; end. |
||||
22 фев 21, 17:10 [22284803] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52445 |
Вангую: обработчики событий недостаточно скопипастить, их ещё надо привязать к соответствующим событиям (свойствам компонент). Posted via ActualForum NNTP Server 1.5 |
||
22 фев 21, 17:17 [22284806] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
Скажите, пожалуйста, кто-нибудь пробовал создавать подобный проект с нуля? Просто интересно, получилось или нет..... |
22 фев 21, 17:20 [22284808] Ответить | Цитировать Сообщить модератору |
DHDD Member Откуда: Сообщений: 47 |
Женя32, Два проекта на CEF4: 1. Chromium 85, создавался с нуля. 2. Chromium 87, переносился с CEF3 (а ранее с CEF1). Проблем нет. |
22 фев 21, 17:26 [22284813] Ответить | Цитировать Сообщить модератору |
zedxxx Member Откуда: Сообщений: 69 |
Женя32, Я уже говорил про dpr файл, что у вас там в проекте, который не работает? |
22 фев 21, 17:30 [22284815] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
Понятное дело, что сами процедуры не копируются, а только то, что находится в теле процедуры, между begin и end; Двойной щелчок по соответствующему событию, потом вставляю тело процедуры. |
||||
22 фев 21, 17:36 [22284818] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
Проект запускается, но сайт не грузится....... |
||||
22 фев 21, 17:40 [22284820] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
А, можете пошагово рассказать, самый минимум, что нужно сделать, чтоб только сайт открыть? |
||||
22 фев 21, 17:48 [22284825] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
Вот здесь все просто, Chromium1.load('google.com'); и все, страница загружена!: |
22 фев 21, 17:58 [22284828] Ответить | Цитировать Сообщить модератору |
zedxxx Member Откуда: Сообщений: 69 |
Женя32, Ещё раз: что у вас написано в dpr файле? Приведите тут его содержимое. |
22 фев 21, 18:00 [22284829] Ответить | Цитировать Сообщить модератору |
DHDD Member Откуда: Сообщений: 47 |
Женя32, К сообщению приложен файл (111.rar - 4Kb) cкачать ![]() |
22 фев 21, 18:10 [22284833] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52445 |
Ну так отлаживайся. Проверь, что у тебя код вообще исполняется, причём в нужном порядке. Posted via ActualForum NNTP Server 1.5 |
||
22 фев 21, 18:47 [22284849] Ответить | Цитировать Сообщить модератору |
ziv-2014 Member Откуда: Сообщений: 589 |
Женя32, научись сначала программировать, а потому уже программируй что-то сложное. Нельзя перескакивать с одного на другое. Есть куча примеров, в которых можно легко разобраться. Но ты ни как не можешь этого сделать. Сообщение было отредактировано: 22 фев 21, 18:54 |
||||||||
22 фев 21, 18:58 [22284851] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
DHDD, Cпасибо большое! По твоему примеру все получилось! |
22 фев 21, 21:23 [22284919] Ответить | Цитировать Сообщить модератору |
Softologic Member Откуда: Питер Сообщений: 244 |
Женя32, коль чудо произошло и "ya.ru" загрузился таки в вашем приложении впервые за несколько лет многочисленных попыток взять эту крепость... все же еще раз настоятельно советую начинать с простых вещей. Программирование штука требующая поступательного движения. Понятно, что у вас сейчас эйфория под названием "вау, офигеть, я сделал свой браузер!", тем не менее, стоит слушать старших товарищей, которые прошли этот путь. И по-хорошему советуют не прыгать через голову. Хорошо усвоить азы - вот что ценно. Сообщение было отредактировано: 22 фев 21, 21:44 |
||||
22 фев 21, 21:48 [22284931] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
Да, с удовольствием бы эти азы осваивал бы, но... Возможно ли научится всему самому? Без вопросов, без наставника, который может подвести к верному ответу? Я все сам осваиваю, ни только delphi, но и веб-программирования, и если не нахожу ответа на просторах интернета, иду на форумы. Других вариантов нет. И на форумах все ни так просто, нужно уметь правильно транслировать свой вопрос, чтоб люди поняли его суть, без вангавания, и смогли верно подсказать.
А что можно считать азами?: Размещения компонентов на форме? Объявления переменных, написание процедур и функций? Или что? |
||||||||
23 фев 21, 11:40 [22285060] Ответить | Цитировать Сообщить модератору |
s62 Member Откуда: Жуковский Сообщений: 1255 |
Женя32, если вы собираетесь продолжать заниматься программированием, то по-моему стоит прочитать какой-нибудь учебник по программированию, по программированию на Delphi, если программируете на Delphi. Таких книг есть не одна. Вот, например, старые довольно книги, написанные в начале 2000ых годов, но хорошие, и многое там актуально и сегодня. https://obuchalka.org/2014030376099/rukovodstvo-razrabotchika-delphi-5-chast-1-teikseira-stiv-ksave-pacheko.html https://www.for-stydents.ru/informatika/delphi/uchebniki/delphi-5-rukovodstvo-razrabotchika-tom-2-razrabotka-komponentov-i-rabota-s-bazami-dannyh.html |
23 фев 21, 11:52 [22285065] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
А вот об этом где прочитать? - Что делать, если после закрытия программы процесс не "убивается" в Диспетчере задать? К сообщению приложен файл. Размер - 53Kb |
23 фев 21, 12:55 [22285087] Ответить | Цитировать Сообщить модератору |
peter64 Member Откуда: Сообщений: 162 |
Женя32, Программа полностью не закрывается, остается процесс в Диспетчере задач Опять 25 ... |
23 фев 21, 13:10 [22285097] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52445 |
У всех это получается, но ты, наверное, особенный. В этом случае просто прими свой гандикап и сдайся. Займись чем попроще. PS: Программирование - не сортировка мусора какая-нибудь. Здесь не работает обучение по принципу "обезьянка увидела - обезьянка делает". Сообщение было отредактировано: 23 фев 21, 13:56 |
||
23 фев 21, 13:56 [22285123] Ответить | Цитировать Сообщить модератору |
Женя32 Member Откуда: Сообщений: 170 |
Почему никто не сказал, что нужно еще включать CEF4Delphi ? Правой кнопкой по проекту, Vieve Source, и привести его к такому виду: program Project1; uses Vcl.Forms, WinApi.Windows, uCEFApplication, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} {$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} begin GlobalCEFApp := TCefApplication.Create; if GlobalCEFApp.StartMainProcess then begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end; GlobalCEFApp.Free; end. |
24 фев 21, 21:19 [22286037] Ответить | Цитировать Сообщить модератору |
Softologic Member Откуда: Питер Сообщений: 244 |
Что значит почему никто не сказал? А в примерах посмотреть самостоятельно??? Раз 10 (как минимум) ведь вам уже сказали ранее поизучать примеры! Там все закомментировано важное. К сообщению приложен файл. Размер - 52Kb Сообщение было отредактировано: 24 фев 21, 21:19 |
||||
24 фев 21, 21:26 [22286039] Ответить | Цитировать Сообщить модератору |
zedxxx Member Откуда: Сообщений: 69 |
Чувак, перечитай тему с начала и посчитай, сколько раз я тебе про dpr говорил. Или чукча только писатель? |
||||
24 фев 21, 23:51 [22286080] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: 1 2 [все] |
Все форумы / Delphi | ![]() |