Показать полную графическую версию : [решено] Как обратиться к дочернему окну 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) не работают.
Да, к первому открывающемуся так окну через NewWindow, а ко второму?
То есть 1-е NewWindow. а второе как бы NewWindow[1], только как это правильно?
Vlad Drakula
08-08-2006, 11:09
progbeg
между прочим есть специально для таких вопросов раздел "Вебмастеру"
Vlad Drakula
причем здесь раздел "Вебмастеру"?
вопрос то по Делфи....
Возможно глупость скажу.... А если из основного окна программы попоробовать NewWindow.NewWindow?
Нет, это же всё-таки самостоятельное окно. Delphi пишет о неизвестном идентификаторе.
Prisoner
08-08-2006, 11:47
Так решено или нет?
Можно, как вариант, создать глобальный динамический массив окон:
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. Имхо, это в самом деле вопросы прикладного программинга...
Я попробую, но всё-таки хотелось бы прямо обращаться к окну....
Prisoner
08-08-2006, 12:08
А чем не прямо? :) Массив окон, это тоже самое, что и свойство MDIChildren TForm, однако там прямо, а тут - нет :).
property MDIChildren[I: Integer]: TForm;
:) Просто у меня такая ситуация, что у меня только два этих окна и будет. К одному я же могу обращаться, а ко второму через массив.... Не рационально...
Prisoner
08-08-2006, 12:48
Да, понятие рациональности довольно субъективное :). Хорошо, в обработчике onNewWindow2 можно рассматривать условие существования окна1 (newWindow1=nil) и если условие ложное, то означивать второе окно. Конечно обе переменные окон должны быть глобальными и при инициализации программы установлены в nil. Кажется массивы все же красивее :). Хотя тоже тот еще финт ушами. А вообще, с современными скоростями и прочим стоит пожалуй ориентироваться не на скорость и рациональность кода, а на его лаконичность с точки зрения программиста-человека который его также читает и интерпретирует.
Убедили, убедили...! :) Буду пользоваться массивом. Спасибо Prisoner'у!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.