-
Решил с TWebBrowser перейти на Chromium Embedded, очень уж нужна поддержка CSS3 и независимость от текущей версии IE. Использую данный враппер: http://code.google.com/p/delphichromiumembedded/Вроде всё гладко перевел, но выплыла одна проблема. TChromium не становится активным контролом. В первую очередь это создает у меня проблемы со скроллом. Использую DevExpress TreeList. При клике на браузер, ActiveControl на форме всё равно остается TreeList и скролится вместе с браузером. По табу тоже на него не переходит фокус. Простейший пример иллюстрирующий проблему: форма с TEdit, TMemo и TChromium.
procedure TForm1.ActiveControlChanged(Sender: TObject);
begin
Memo1.Lines.Add('ActiveControlChanged:'+ActiveControl.Name);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Screen.OnActiveControlChange := nil;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.OnActiveControlChange := ActiveControlChanged;
end;
http://i.piccy.info/i5/96/36/1023696/chromiumfocus.png
-
> NeuroTechnic (29.01.2011 12:59:00) [0]
Теперь будет зависимость от текущей версии Хрома.
-
С чего бы это? Да и при чем тут хром? Не обижайтесь конечно, но как обычно ваш комментарий не в тему...
-
В публичных форумах готовься к любым ответом, это управляется не тобой, а отвечающим. От тебя тоже сильно зависит, какой ответ ты получишь, получил такой, как есть, значит вопрос поставлен так, что на большее не стоит расчитывать, довольствуйся тем, что есть. Но у тебя есть право уйти в другой форум.
-
ЗЫ: не надо было жаловаться на зависимость от ИЕ, получил зависимость от Хрома. А он при том, что это название по русски. И если это не Хром, то ты сам виноват, мало ли кто как продукт назовет, не наше дело.
-
> Но у тебя есть право уйти в другой форум.
Вы меня и на других находите (sql.ru по моему было аналогично). :-) К чему все эти едкие комментарии если помочь нечем?
Chromium и Chrome это несколько разные вещи. И Chromium Embedded это не Chromium, а фреймворк основанный на его исходниках, потому никак от текущей версии Chromium (если она вообще есть в системе) не зависит.
Отсюда видно, что с сабжем вы не работали, и получаются комментарии ради комментариев? Вопрос был адресован тем кто работал с данным фреймворком или тем кому интересно хотя бы посмотреть на него.
-
> NeuroTechnic (29.01.2011 20:46:05) [5]
Ну если нахожу значит нужно значит ты сам виноват. Не был бы нужен, то был бы неуловимым Джо. Проблему вижу тебе уже не инстересно обсуждать, а трепятся у нас в Прочем
-
Т.е. ваши посты были по теме проблемы?
Ладно, намек понятен, ухожу.
-
-
> antonn © (29.01.11 21:59) [8]
вполне заслуженная судьба, достаточно одного "а5", чтоб заслужить.
-
> NeuroTechnic (29.01.2011 21:48:07) [7]
Я не автор.
-
А если автор трепаться начал сразу, ни одного сообщения по теме, то судьба такой ветки незавидна.
-
Удалено модератором Примечание: п. 1.
-
Удалено модератором
-
Ого вы тут похоже срач развели :-) > А если автор трепаться начал сразу, ни одного сообщения > по темеВообще то мои сообщения были по теме, но вам же интересна только та их часть, что касалась ваших комментов... В общем проблему решил грабельками. Вообще это не только с TChromium проявляется. Например, если TStringGrid и TWebBrowser оба с прокруткой, то эффект тот же. Решение такое: Кидаем таймер на форму, в нем
if IsChildWindow(Chromium1, GetFocus) then
SetFocusedControl(Chromium1);
IsChildWindow это функция из DevExpress модуля cxContainer
function IsChildWindow(AParent: TWinControl; AChildHandle: HWND): Boolean;
function InternalNativeIsChildWindow(AParent: TWinControl): Boolean;
begin
Result := IsChild(NativeHandle(AParent.Handle), AChildHandle);
end;
function InternalIsChildWindow(AParent: TWinControl): Boolean;
var
I: Integer;
APopupWindow: TcxCustomPopupWindow;
begin
with AParent do
for I := 0 to ControlCount - 1 do
if Controls[I] is TWinControl then
begin
if HasNativeHandle(TWinControl(Controls[I]), AChildHandle) then
begin
Result := True;
Exit;
end else
begin
Result := InternalIsChildWindow(TWinControl(Controls[I]));
if Result then
Exit;
end;
Result := InternalNativeIsChildWindow(TWinControl(Controls[I]));
if Result then
Exit;
end;
if AParent is TcxCustomPopupWindow then
for I := 0 to FVisiblePopupWindowList.Count - 1 do
begin
APopupWindow := TcxCustomPopupWindow(FVisiblePopupWindowList[I]);
if (APopupWindow = AParent) or (GetParentForm(APopupWindow.OwnerControl) <> AParent) then
Continue;
if HasNativeHandle(APopupWindow, AChildHandle) then
begin
Result := True;
Exit;
end else
begin
Result := InternalIsChildWindow(APopupWindow);
if Result then Exit;
end;
end;
for I := 0 to FVisiblePopupWindowList.Count - 1 do
begin
APopupWindow := TcxCustomPopupWindow(FVisiblePopupWindowList[I]);
if APopupWindow.OwnerControl = AParent then
begin
Result := HasNativeHandle(APopupWindow, AChildHandle) or
InternalIsChildWindow(APopupWindow);
if Result then Exit;
end;
end;
Result := False;
end;
begin
Result := False;
if (AParent = nil) or (AChildHandle = 0) or HasNativeHandle(AParent, AChildHandle) then
Exit;
Result := InternalNativeIsChildWindow(AParent);
if not Result then
Result := InternalIsChildWindow(AParent);
end;
Если девками не пользуетесь, то ту часть где TcxCustomPopupWindow удалите.
-
скачал dcef-r306.7z с сайта http://code.google.com/p/delphichrom...downloads/list установил. кидаю на форму компонент компилирую и получаю ошибку. Exception EOSError in module Project1.exe at 0000C71E. System Error. Code: 126. Не найден указанный модуль. Кто сталкивался подскажите в чем может быть проблема? Установка прошла нормально, все установилось.
-
скачал dcef-r306.7z с сайта http://code.google.com/p/delphichrom...downloads/list установил. кидаю на форму компонент компилирую и получаю ошибку. Exception EOSError in module Project1.exe at 0000C71E. System Error. Code: 126. Не найден указанный модуль. Кто сталкивался подскажите в чем может быть проблема? Установка прошла нормально, все установилось.
-
> Exception EOSError
не знаю такого, но может ему dcu не хватает где-то?
-
2mr_switch
кинь рядом с экзешником библиотеки (*.dll), которые в архиве есть, который ты скачал
-
> Exception EOSError in module Project1.exe at 0000C71E. > System Error. Code: 126. > Не найден указанный модуль. >
Просто скомпилируй проект и запусти полученный exe, в папке с exe должны находиться файлы из dcef-r306.7z\dcef\bin\Win32, еще нужно скачать и установить Chrome Frame
|