Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Как обратиться к дочернему окну webbrowser'а? (http://forum.oszone.net/showthread.php?t=69536)

progbeg 08-08-2006 03:05 469363

Как обратиться к дочернему окну webbrowser'а?
 
У меня такой вопрос:
На форме находится компонент Webbrowser. В него загружается страница. Потом, в ходе обработки открывается ещё одна форма таким образом:

Flags:=1;
Webbrowser1.Navigate2(_URl,Flags,TargetFrameName,Postdata,Headers);

А в соответствующем событии OnNewWindow2 стоит следующее:

NewWindow := TForm1.Create(self);
NewWindow.Show;
ppDisp := NewWindow.Webbrowser1.DefaultDispatch;

Как мне обратиться ко второму открывающемуся окну?
Form1.MdiChildren(i) и Form1.Webbrowser1.MdiChildren(i) не работают.

XCodeR 08-08-2006 10:46 469430

а через NewWindow?

progbeg 08-08-2006 10:58 469437

Да, к первому открывающемуся так окну через NewWindow, а ко второму?
То есть 1-е NewWindow. а второе как бы NewWindow[1], только как это правильно?

Vlad Drakula 08-08-2006 11:09 469445

progbeg
между прочим есть специально для таких вопросов раздел "Вебмастеру"

XCodeR 08-08-2006 11:26 469452

Vlad Drakula
причем здесь раздел "Вебмастеру"?
вопрос то по Делфи....


Возможно глупость скажу.... А если из основного окна программы попоробовать NewWindow.NewWindow?

progbeg 08-08-2006 11:31 469455

Нет, это же всё-таки самостоятельное окно. Delphi пишет о неизвестном идентификаторе.

Prisoner 08-08-2006 11:47 469460

Так решено или нет?
Можно, как вариант, создать глобальный динамический массив окон:
Код:

  arrWins: array of TForm1;
тогда обработчик onNewWindow2 примет примерно следующий вид:
Код:

  SetLength(arrWins, Length(arrWins)+1);
  arrWins[Length(arrWins)-1] := TForm1.Create(self);
  arrWins[Length(arrWins)-1].Show;

Конструкция
Код:

ppDisp := NewWindow.Webbrowser1.DefaultDispatch;
примет примерно следующий вид
Код:

ppDisp := arrWins[someWinIndex].Webbrowser1.DefaultDispatch;
P.S. Имхо, это в самом деле вопросы прикладного программинга...

progbeg 08-08-2006 12:01 469468

Я попробую, но всё-таки хотелось бы прямо обращаться к окну....

Prisoner 08-08-2006 12:08 469473

А чем не прямо? :) Массив окон, это тоже самое, что и свойство MDIChildren TForm, однако там прямо, а тут - нет :).
Цитата:

property MDIChildren[I: Integer]: TForm;

progbeg 08-08-2006 12:13 469477

:) Просто у меня такая ситуация, что у меня только два этих окна и будет. К одному я же могу обращаться, а ко второму через массив.... Не рационально...

Prisoner 08-08-2006 12:48 469490

Да, понятие рациональности довольно субъективное :). Хорошо, в обработчике onNewWindow2 можно рассматривать условие существования окна1 (newWindow1=nil) и если условие ложное, то означивать второе окно. Конечно обе переменные окон должны быть глобальными и при инициализации программы установлены в nil. Кажется массивы все же красивее :). Хотя тоже тот еще финт ушами. А вообще, с современными скоростями и прочим стоит пожалуй ориентироваться не на скорость и рациональность кода, а на его лаконичность с точки зрения программиста-человека который его также читает и интерпретирует.

progbeg 08-08-2006 13:09 469500

Убедили, убедили...! :) Буду пользоваться массивом. Спасибо Prisoner'у!


Время: 07:29.

Время: 07:29.
© OSzone.net 2001-