Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.09.11;
Скачать: [xml.tar.bz2];

Вниз

Tembededwb   Найти похожие ветки 

 
ALaKO   (2003-07-07 10:48) [0]

Клавиша "Enter" в Tembededwb работает но, после динамического создания нового экземпляра Tembededwb в новом экземпляре enter не работает. Хотелось бы узнать - как побороть эту ошибку и заставить Tembededwb воспрингимать enter.
a:=edit1.Text;
newpage:=TtabSheet.create(self);
newpage.pagecontrol:=pagecontrol1;
newpage.caption:=inttostr(pagecontrol1.pagecount);
newpage.Show;
newweb:=TEmbeddedWB.Create(self);
TOleControl(newweb).Parent := newpage;
newweb.Align:=alclient;
newweb.Silent:=true;
newweb.OnProgressChange:=web1.OnProgressChange ;
newweb.Onnewwindow2:=web1.Onnewwindow2;
newweb.OnStatusTextChange:=web1.OnStatusTextChange;
newweb.Ondownloadcomplete:=web1.Ondownloadcomplete;
newweb.Ondocumentcomplete:=web1.Ondocumentcomplete;
newweb.Onvisible:=web1.Onvisible;
newweb.Navigate(a);


 
Ihor Osov'yak   (2003-07-07 12:51) [1]

Насколько я помню, там использовался финт с перехватом соотв. сообщения на уровне формы с последующей передачей контролу напрямую.. Посмотри по исходникам Tembededwb - может и какая идея появится.. Там наверное не учтено, что на форме может быть несколько Tembededwb и сообщение футболится не тому контролу.. Но это гипотеза, так сказать подсказка пути поиска, а не готовое решение.

.. Мне сейчас некогда за этим в деталях смотреть + мне это не актуально..


 
ALaKO   (2003-07-07 13:03) [2]

Ihor Osov"yak
Нет, несколько Tembededwb созданные на уровне разработки работают, но тем не менее спасибо.


 
Ihor Osov'yak   (2003-07-07 14:19) [3]

2 ALaKO © (07.07.03 13:03)

Значит, ты какое-то проперти не выставил.. Если ты компонент ставишь в дизайн-тайме, то его проперти устанавливаются в значения по умолчанию. Если ты его создаешь динамически, то этого не происходит (проперти будут иметь аналоги "нулевых" значений, что может быть отлично от значений по умалчиванию). Посему после создания установи ВСЕ паблишед свойства в те значения, что видишь в инспекторе после бросания компонента на форму (кроме тех, что ты сознательно изменяешь - их ставь в то что тебе нужно) ..

Должно заработать.. Потом ради интереса - можешь постепенно закоментровать присваивания этих паблишед с целью обнаружения виновника.. Но это можно все же сделать (поиск виновника) методом изучения исходного кода TEmbededWB (имхо)


 
ALaKO   (2003-07-07 15:16) [4]

Назначил все что только можно :) - не работает, в исходнике есть такие строки:
constructor TEmbeddedWb.Create(Owner: TComponent);
var
Buf: array[1..10] of Char;
begin
FfpExceptions := True;
inherited;
{$IFDEF VER120}
enablemessagehandler;
{$ENDIF}
GetDDEVariables;
DDEHWnd := AllocateHWnd(DDEWndProc);
FPrintOptions := TPrintOptions.Create;
FPrintOptions.Margins := TMargins.Create;
FPrintOptions.FHTMLHeader := TStringlist.Create;
FPrintOptions.FHTMLHeader.Add("<HTML></HTML>");
FillChar(Buf, SizeOf(Buf), 0);
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IMEASURE, @Buf[1], SizeOf(Buf));
if Buf[1] = "1" then RunTimeMeasure := mUS else
RunTimeMeasure := mMetric;
DownloadOptions := [DLCTL_DLIMAGES, DLCTL_BGSOUNDS, DLCTL_VIDEOS];
UserInterfaceOptions := [];
FEnableDDE := False;
end;

так что по видимому он и сам назначает нужное. Но факт - не работает.


 
ALaKO   (2003-07-07 15:31) [5]

newweb.AddressBar:=true;
newweb.Cursor:=crdefault;
newweb.DragCursor:=crdrag;
newweb.DragMode:=dmmanual;
newweb.EnableDDE:=true;
newweb.fpExceptions:=false;
newweb.FullScreen:=false;
newweb.MenuBar:=true;
newweb.Offline:=false;
newweb.ParentShowHint:=true;
newweb.RegisterAsBrowser:=false;
newweb.RegisterAsDropTarget:=true;
newweb.ReplaceCaption:=false;
newweb.ShowHint:=true;
newweb.silent:=false;
newweb.statusbar:=true;
newweb.TabOrder:=0;
newweb.TabStop:=true;
newweb.Tag:=0;
newweb.TheaterMode:=false;
newweb.ToolBar:=-1;
newweb.UserAgent:="";
newweb.UserInterfaceOptions:=[];
newweb.Visible:=true;

пример так сказать...


 
ALaKO   (2003-07-07 18:06) [6]

Работают все сочетания клавиш, кроме enter.


 
Ihor Osov'yak   (2003-07-07 20:33) [7]

Обрати внимание на IEMessageHandler,EnableMessagehandler етс в TEmbeddedWb

и на то, что эти вещи взяты в директивы условной компиляции для пятого делфи.. Возможно нужно рассширить область этих действий для шестой и тд версий..


 
ALaKO   (2003-07-08 14:04) [8]

Ihor Osov"yak
Ноль эмоций, я уже четверть embedded переписал, без толку


 
Ihor Osov'yak   (2003-07-08 16:45) [9]

Ну, тогда делай жесткую отладку..

Или spy++ посмотри на каком окошке соответствующее виндозное сообщение теряется (если получится посмотреть), или сделай сабклакссинг для всех вышестоящих окошек с забрасыванием факта прохождения сообщений, имеющих отношение к Enter в лог-файл.. таким образом ты определишь, где это сообщение кушается..

Или подожди недельку, nikkie возвратится с отпуска, я подозреваю - он эту проблему решал..




 
ALaKO   (2003-07-08 18:35) [10]

wb2.loaded;
все :))


 
SergP   (2003-07-10 23:43) [11]

2 ALaKO

Мне вообще понравилось создавать компоненты в run-time.
Попробовал сделать нечто подобное. Но вот одно пока не могу понять: если в рантайме уже создано несколько TEmbeddedWB, то как ты их отличаешь друг от друга? Имеется ввиду вот что: Например в одном из них возникло какое-нить событие, вызывается обработчик этого события, так вот как из процедуры-обработчика этого события обращаться к конкретному TEmbeddedWB (не только к тому который сгенерировал это событие), чтобы установить/прочитать его проперти и пр.



 
ALaKO   (2003-07-11 09:22) [12]

SergP ©
Без проблем, назначаешь при переходе от закладки к закладке первый элемент управления как Tembedded. В переменную скажем browser, если нужнол напишу подробнее потом.


 
SergP   (2003-07-11 13:39) [13]

2 ALaKO © (11.07.03 09:22)

Напиши. Посмотрю как ты делаешь, а то так в двух словах не совсем понятно.

И еще:

Я вот пробовал делать так:

newweb:array[1..10] of TWebbrowser;

...


newweb[i]:=twebbrowser.create(self);

думал что таким способом будет легче обращаться к конкретному экземпляру браузера, но все равно не знаю как в процедуре обработки событий определить какой из экземпляров сгенерировал событие.


 
Ihor Osov'yak   (2003-07-11 18:32) [14]

SergP © (11.07.03 13:39)


pDisp as IUnknown сравнивай с newweb[i].DefaultInterface as IUnknown - это для случая, если страница не имеет фреймов. Если имеет - нужно поднятся к IWebBrowser верхнего уровня..

Сделай pDisp as IWebBrowser2 и посмотри методы - там есть ссылка или на ( который снова укажет на IWebBrowser2) SergP © (11.07.03 13:39)


pDisp as IUnknown сравнивай с newweb[i].DefaultInterface as IUnknown - это для случая, если страница не имеет фреймов. Если имеет - нужно поднятся к IWebBrowser верхнего уровня..

Сделай pDisp as IWebBrowser2 и посмотри методы - там есть ссылка или на
IWebBrowser2 или IHtmlWindow (который снова укажет на IWebBrowser2) верхнего уровня - точно не помню, ибо пишу по памяти.. Можна также сравнивать хендлы. Но IWebBrowser2.HWND в некоторых версиях IE - баг,
вылетает по ошибке.. Обходится так -
function get_OleHWND(iUnk:IUnknown;var wnd:HWND):boolean;
var
iow:IOleWindow;
begin
wnd := 0;
result:=system.false;
if not assigned(iUnk) then Exit;
iUnk.QueryInterface(IOleWindow, iow);
if not assigned(iow) then Exit;
iow.GetWindow(wnd);
result:=system.true;
end;


Если решишь идти через хендлы - изучи структуру окошек при помощи spy++. И еще. Кажется до IE5.0 (или 5.5) каждый фрейм имел свое окошко. Позше - окошко (виндозное) - одно на все фреймы.. Вернее там не одно окошко - а три - посмотри спаем ..




Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.09.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.009 c
1-33610
Qwerr
2003-09-01 12:48
2003.09.11
Проблема с текстовым полем (String)


1-33602
pasha_golub
2003-09-01 15:20
2003.09.11
Вывод текста на грид


3-33514
Jedi
2003-08-19 14:13
2003.09.11
Отобразить запись в DBGrid-e в две строки


1-33646
mfender
2003-08-30 17:25
2003.09.11
Разобрать строку по костям.


7-33833
Antonyan
2003-06-27 12:32
2003.09.11
Exe файл





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский