Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TWebBrowser с загруженным mtx, проблеммы разрушения 
:(
    Опции темы
Rennigth
Дата 16.2.2006, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: нет
Всего: 76



Здравствуйте, возникла проблемма, может кто-что посоветует.
Вообщем есть контрол подобие PowerPoint который умеет отображать разные MMedia форматы файлов. Работает уже долго сбоев не наблюдалось, но тут возник. При загрузке в TWebBrowser mtx объекта(это такая 3d-модель) он прекрастно отображается, но после его уничтожения и при загрузке к примеру в TAltShockwaveFlash флешовины просходит бесконечный AV. Вылетает на обращении к TForm.ActiveOleControl в делфевых модулях. Боролся всеми мне доступными способами, но ситуация не вообщем не меняется, при избавлении от этой ошибки лезут другие и т.д. Вообщем система становиться нерабочей. Вот у меня вопрос, может как-нибудь я все-таки както не правильно создаю - разрушаю TWebBrowser? или кто-то сталкивался с подобным .. Вообщем я в сметении...
создание:
Код

  FWebBrowser := TEXWebBrowser.Create(Self);
  Self.InsertControl(FWebBrowser);
  FWebBrowser.Align := alClient;

  FWebBrowser.OnDocumentComplete := WebBrowserDocumentComplete;
  FWebBrowser.OnNavigateComplete2 := WebBrowserNavigateComplete2;


разрушение:
Код

  Self.RemoveControl(FWebBrowser);
  FreeAndNil(FWebBrowser);


где перрвоначально вылетает AV, при клике на лубой OleControl:
Код

function TCustomForm.SetFocusedControl(Control: TWinControl): Boolean;
var
  FocusHandle: HWnd;
  TempControl: TWinControl;
begin
  Result := False;
  Inc(FocusCount);
  if FDesigner = nil then
    if Control <> Self then
      FActiveControl := Control else
      FActiveControl := nil;
  Screen.FActiveControl := Control;
  Screen.FActiveCustomForm := Self;
  Screen.FCustomForms.Remove(Self);
  Screen.FCustomForms.Insert(0, Self);
  if Self is TForm then
  begin
    Screen.FActiveForm := TForm(Self);
    Screen.FForms.Remove(Self);
    Screen.FForms.Insert(0, Self);
  end
  else Screen.FActiveForm := nil;
  if not (csFocusing in Control.ControlState) then
  begin
    Control.ControlState := Control.ControlState + [csFocusing];
    try
      if Screen.FFocusedForm <> Self then
      begin
        if Screen.FFocusedForm <> nil then
        begin
          FocusHandle := Screen.FFocusedForm.Handle;
          Screen.FFocusedForm := nil;
          if not SendFocusMessage(FocusHandle, CM_DEACTIVATE) then Exit;
        end;
        Screen.FFocusedForm := Self;
        if not SendFocusMessage(Handle, CM_ACTIVATE) then Exit;
      end;
      if FFocusedControl = nil then FFocusedControl := Self;
      if FFocusedControl <> Control then
      begin
        while (FFocusedControl <> nil) and not
          FFocusedControl.ContainsControl(Control) do
        begin
          FocusHandle := FFocusedControl.Handle;
          FFocusedControl := FFocusedControl.Parent;
          if not SendFocusMessage(FocusHandle, CM_EXIT) then Exit;
        end;
        while FFocusedControl <> Control do
        begin
          TempControl := Control;
          while TempControl.Parent <> FFocusedControl do
            TempControl := TempControl.Parent;
          FFocusedControl := TempControl;
          if not SendFocusMessage(TempControl.Handle, CM_ENTER) then Exit;
        end;
        TempControl := Control.Parent;
        while TempControl <> nil do
        begin
          if TempControl is TScrollingWinControl then
            TScrollingWinControl(TempControl).AutoScrollInView(Control);
          TempControl := TempControl.Parent;
        end;
        Perform(CM_FOCUSCHANGED, 0, Longint(Control));
        if (FActiveOleControl <> nil) and (FActiveOleControl <> Control) then
          FActiveOleControl.Perform(CM_UIDEACTIVATE, 0, 0);  //AV <------
      end;
    finally
      Control.ControlState := Control.ControlState - [csFocusing];
    end;
    Screen.UpdateLastActive;
    Result := True;
  end;
end;


Логично что его кто-то рушит, но кто, и зачем непонятно. Устпновка его в nil в destroy-е WebBrowser-а ведет к дальнейшим ошибкам с FocusedControl и тд...

Это сообщение отредактировал(а) Rennigth - 16.2.2006, 17:10


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
December
Дата 16.2.2006, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



Цитата(Rennigth @ 16.2.2006, 16:42 Найти цитируемый пост)
TEXWebBrowser

Это твой класс? Пробовал тот же фокус с простым TWebBrowser?
Может, ты в процессе работы где-нить меняешь парент (или парент парента) контрола, например, с помощью InsertControl?


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Rennigth
Дата 17.2.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: нет
Всего: 76



Цитата(December @ 16.2.2006, 18:55 Найти цитируемый пост)
Это твой класс?

да, когда пытался побороть создал, сейчас пустой(просто наследник).


Цитата(December @ 16.2.2006, 18:55 Найти цитируемый пост)
Может, ты в процессе работы где-нить меняешь парент (или парент парента) контрола, например, с помощью InsertControl?

Нет, негде не меняется.
Добавлено @ 11:25
я вот думаю попробовать сделать свою реализацию использования IWebBrowser2, без использования TOleControl. Это реально?, IWebBrowser2 можно как-нибудь разместить на каком-нибудь WinControl-е? Просто хочу что-бы не делфя занималась созданием/ разрушением... Или может подскажешь альтернативы реализации...


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Rennigth
Дата 17.2.2006, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: нет
Всего: 76



Попробовал работать только интерфейсом, немного не получаеться... как нужно не подскажите?
Код

function CreateWBObject: IWebBrowser2;
var
  lRes: IUnknown;
begin
  CoCreateInstance(CLASS_WebBrowser, nil,
    CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IDispatch, lRes);
  if Assigned(lRes) then
    lRes.QueryInterface(IID_IWebBrowser2, Result);
end;

procedure ReleaseWBObject(const AWebBrowser: IWebBrowser2);
begin

end;


{$R *.dfm}

{ TForm1 }

constructor TForm1.Create(AOwner: TComponent);
begin
  inherited;
  FWebBrowser := CreateWBObject;
end;

destructor TForm1.Destroy;
begin
  ReleaseWBObject(FWebBrowser);
  inherited;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  lUrl: OleVariant;
  X, Y: Integer;
begin
  X := 0;
  Y := 0;
  if Assigned(FWebBrowser) then
  begin
    lUrl := 'www.ya.ru';
    FWebBrowser.Visible := True;
    FWebBrowser.ClientToWindow(X, Y);
    FWebBrowser.Width := Width;
    FWebBrowser.Height := Height;
    FWebBrowser.Navigate(lUrl, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
  end;
end;


лезут разрушительные сбои... и как вообще парента задать?

Это сообщение отредактировал(а) Rennigth - 17.2.2006, 14:14


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0754 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.