![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Аццкий рефрешь в TWebBrowser [D7, WinXP]
TwinGL © (2006-04-08 13:57:00)День добрый.
Вообщем я занялся редким извратом - написанием клиента к чату натипа кроватки.
(Клиент на HTML нихрена не функционален т.к. афффтар поленился, но работа сервера меня впечатлила простотой и продуманностью одновременно)
Вообщем через сокеты отправляю, принимаю запросы и т.д.
Вывод сообщений я произвожу с помощью TWebBrowser дабы не потерять поддержку HTML тегов.
Беда в том, что я не могу дописать в конец страницы как это происходит в нормальном браузере.
Обычно это происходит так:
Сам браузер получает ответ от сервера мол "читай отсюда", и сервер выдаёт ему по мере поступления информации, а браузер соответственно по немногу подгружает страничку и в результате это нормально смотрится. Мессаги дописываются в конец, и страничка помалу прокручивается.
Я же не могу сделать подобный финт ушами.
Я пишу обновления в переменную и каждый загружаю её содержимое заново в TWEBBrowser в следствии чего получается "аццкий рефреш". Т.е. у меня страница перерисовывается, потом еще и с самого верха перематывается в конец к последней мессаге (а когда мессаг сотня, то вообще начинает укачивать). Вообщем смотрится это всё ужастно.
Как это побороть ума не приложу =/.
easy (2006-04-09 22:12:00) [1]
procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('about:blank');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
WebBrowser1.OleObject.document.body.insertAdjacentHTML('BeforeEnd','<h3>Text</h3>');
end;
TwinGL (2006-04-09 11:57:00) [2]В uses добавить MSHTML
TwinGL (2006-04-09 11:50:00) [3](Модератор, начинающие с TWebBrowser не замудряются)
Решение проблемы:
Следующая процедура дополнит код TWebBrowser
procedure AppendText(WebBrowser:TWebBrowser; str:string);
var
Range: IHTMLTxtRange;
begin
Range := ((WebBrowser.Document as IHTMLDocument2).body as
IHTMLBodyElement).createTextRange;
Range.collapse(False);
Range.pasteHTML(str);
end;
Опять же перед использованием необходимо хоть что-нибудь загрузить в компонент.
WebBrowser1.Navigate('about:check');
Ketmar (2006-04-09 01:41:00) [4]кстати, там же есть ссылочка на клиент, построеный с IE.
Ketmar (2006-04-09 01:39:00) [5]DOm Document object. I-какой-то-там. интерфейс можно получить у того самого TWebBrowser. более детально не помню -- не юзаю IE. я для клиента чата свой движок отображения делал. могу дать ссылку (клиент для чата мастаков, но ста-а-арый %-)
http://elite-mythology.sourceforge.net/TAKChat/
есть сырцы. считай, что клиент -- public domain.
TwinGL (2006-04-08 23:35:00) [6]Ну и как же предлагаецца добавлять как jscript? =/
Там никак кроме как через Navigate страничку не загрузишь. Подгрузить нет способа. Ну или я просто его не знаю. Если ты знаешь - то не молчи!
Ketmar (2006-04-08 23:19:00) [7]добавлять так же, как это делает jscript. т.е. в объект документа. или сделать отображение "внизу самые старшие". %-)