Форум: "Начинающим";
Текущий архив: 2015.02.22;
Скачать: [xml.tar.bz2];
ВнизФокус TWebBrowser Найти похожие ветки
← →
ВладОшин © (2014-01-09 10:17) [0]Проблема, на самом деле, глобальнее..
(
Группа активных(X) контрлов(кнопки, лабел, и, в т.ч. TWebBrowser ) встраивается в чужое приложение(через dll(ocx)), в предоставленную тем приложением MDI форму.
Все работает нормально, пока не щелкнуть на браузере (как бы фокус на него перевести), и, не убирая с него фокуса, закрыть это чужое окно со своими встроенными на нем контрлами. В этом случае - AV. Адреса AV разные. Если при этом с браузера уйти - ткнуть в любой другой контрол, и закрыть окно - нет ошибок.
Натравил Эврику - говорит, что ошибка возможно ее собственная, что нет, конечно..
в стеке 30 вызовов, и ни одного моего модуля, все стандартные. Наверное ошибка еще раньше где-то..
)
воот..
, но спрошу сначала так:
Кидаем на форму браузер, кнопку, мемо, таймер
//---------
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Button1: TButton;
Memo1: TMemo;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure WebBrowser1Enter(Sender: TObject);
procedure WebBrowser1Exit(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate("http://www.delphimaster.ru");
end;
procedure TForm1.WebBrowser1Enter(Sender: TObject);
begin
Memo1.Lines.Add("WebBrowser1Enter");
end;
procedure TForm1.WebBrowser1Exit(Sender: TObject);
begin
Memo1.Lines.Add("WebBrowser1Exit");
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if ActiveControl <> nil then
Memo1.Lines.Add(ActiveControl.ClassName);
end;
------------------------------------------------------
после нажатия на кнопку, фокус с браузера уходит, и хоть что в нем делай , показывает, что активный контрол сейчас любой другой, но не он.
Даже не его контейнер, даже не..
Короче, фокус остается на кнопке, хоть в это время и набирать текст в браузере.
Куда посмотреть? (Что сделать, что бы это штука подчинялась общей логике "фокусника")
← →
ВладОшин © (2014-01-09 10:20) [1]да, непосредственно AV в TControl.HandleNeeded
← →
ВладОшин © (2014-01-09 10:22) [2]Memo1 содержит
WebBrowser1Enter
TWebBrowser
TWebBrowser
WebBrowser1Exit
TButton
TButton
TButton
TButton
TButton
TButton
...
← →
ВладОшин © (2014-01-09 10:37) [3]загуглить - загуглил
Пишут многое, пробовал пока не все, но что пробовал - не получилось, когда в
> Группа активных(X) контрлов(кнопки, лабел, и, в т.ч. TWebBrowser
> ) встраивается в чужое приложение(через dll(ocx)),
вставлял это (нагугленное) решение.
← →
ВладОшин © (2014-01-09 13:09) [4]если просто сказать
PostMessage(Browser.Handle, CM_UIDEACTIVATE, 0,0);
PostMessage(Browser.Handle, CM_UIACTIVATE, 0,0);
то работает, фокус перемещается с него/ на него
← →
ВладОшин © (2014-01-10 08:41) [5]а в боевом проекте все равно AV, блин
← →
ВладОшин © (2014-01-17 12:48) [6]Решил так: Если закрыть окно, оно по любому не будет иметь фокус :)
собственно, перед закрытием Host-окна:
if Assigned(ActiveOleControl) then
begin
// Log.Add (" ага 1");
if ActiveOleControl.ClassName = "TWebBrowser" then
begin
// Log.Add (" ага 2");
Doc := TWebBrowser(ActiveOleControl).Document as IHTMLDocument2;
if Assigned(Doc) then
begin
HTMLWindow := Doc.parentWindow;
if Assigned(HTMLWindow) then
HTMLWindow.Close;
end;
end;
end;
← →
Smile (2014-01-17 14:22) [7]Интересна я века (монолог)
:)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2015.02.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c