Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1389248246
ВладОшин
2014-01-09 10:17
2015.02.22
Фокус TWebBrowser


15-1405676424
картман
2014-07-18 13:40
2015.02.22
всего 35 лет...


2-1389977443
Jimmy
2014-01-17 20:50
2015.02.22
Мерцание TImage при Gif-анимации


15-1405624412
Дмитрий СС
2014-07-17 23:13
2015.02.22
Воспользоваться занятым портом.


15-1405542603
Юрий
2014-07-17 00:30
2015.02.22
С днем рождения ! 17 июля 2014 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский