Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Извлечение текста из WebBrowser`а   Найти похожие ветки 

 
leonidus   (2008-08-05 16:19) [0]

Хочу использовать в своей программе результаты работы AJAX-программы на сервере. Для этого посылаю ей запрос:
WB_LoadHTML(EmbeddedWB1, HTMLCode)
где EmbeddedWB1 компонент в котором будет отображен результат работы, а HTMLCode созданный по специальному шаблону HTML-документ.

procedure WB_LoadHTML( WebBrowser: TEmbeddedWB; HTMLCode: string );
var
 sl: TStringList;
 ms: TMemoryStream;
begin
  WebBrowser.Navigate( "about:blank" );
  while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
     Application.ProcessMessages;

  if Assigned( WebBrowser.Document ) then
  begin
     sl := TStringList.Create;
     try
        ms := TMemoryStream.Create;
        try
           sl.Text := HTMLCode;
           sl.SaveToStream( ms );
           ms.Seek( 0, 0 );
           ( WebBrowser.Document as IPersistStreamInit ).Load( TStreamAdapter.Create( ms ) );
        finally
           ms.Free;
        end;
     finally
        sl.Free;
     end;
  end;
end;

В итоге в компоненте EmbeddedWB1 вижу результат работы (это текст), однако теперь мне нужно его из EmbeddedWB1 извлечь и поместить в Memo. По таймеру делаю так:

if EmbeddedWB1.ReadyState = READYSTATE_COMPLETE then
 begin
  Timer1.Enabled:=false;
  Memo1.text:=EmbeddedWB1.DocumentSourceText;
 end;

но несмотря на то что содержимое в EmbeddedWB1 есть, в Memo ничего не отображается. С чем это может быть связано?


 
Anatoly Podgoretsky ©   (2008-08-05 16:34) [1]

> leonidus  (05.08.2008 16:19:00)  [0]

Сюда попадаешь?  Timer1.Enabled:=false;
Какой тип у DocumentSourceText


 
leonidus   (2008-08-05 16:46) [2]

Да попадаю. DocumentSourceText это string.


 
Anatoly Podgoretsky ©   (2008-08-05 16:50) [3]

Раз попадаешь, что показывает отладчик для DocumentSourceText


 
leonidus   (2008-08-05 16:59) [4]

заметил сейчас вот что, первый раз DocumentSourceText="", но стоит запросить данные еще раз и все начинает работать как по нотам...


 
leonidus   (2008-08-05 17:12) [5]

Ну это ладно, теперь возник другой вопрос, текст с помощью DocumentSourceText извлекается типа string, но результат AJAX-приложения выдается в юникоде, в связи с чем вопрос, как мне получить именно юникод?


 
Krolm ©   (2008-08-05 18:57) [6]

Функция преобразования строки в UTF-8:
AnsiToUtf8, модуль System

Обратное:
Функция преобразования UTF-8 в строку (в отличае от стандартной работает на строках, где встречаются не только UTF-8 символы, что часто бывает в сети):
function UTF8ToStrForce(Value: String): String;
var
Digit: String;
i: Word;
HByte: Byte;
Len: Byte;
begin
Result := "";
Len := 0;
if Value = "" then Exit;
for i := 1 to Length(Value) do
begin
  if Len > 0 then
  begin
    Digit := Digit + Value[i];
    Dec(Len);
    if Len = 0 then
      Result := Result + UTF8ToStr(Digit);
  end else
  begin
    HByte := Ord(Value[i]);
    if HByte in [$00..$7f] then       //Standart ASCII chars
      Result := Result + Value[i]
    else begin
      //Get length of UTF-8 char
      if HByte and $FC = $FC then
        Len := 6
      else if HByte and $F8 = $F8 then
        Len := 5
      else if HByte and $F0 = $F0 then
        Len := 4
      else if HByte and $E0 = $E0 then
        Len := 3
      else if HByte and $C0 = $C0 then
        Len := 2
      else begin
        Result := Result + Value[i];
        Continue;
      end;
      Dec(Len);
      Digit := Value[i];
    end;
  end;
end;
end;


 
leonidus   (2008-08-05 23:39) [7]

Krolm я что-то вас не понял, во первых у вас в функции встречается функция UTF8ToStr, я правильно понял что вы подразумевали эту функцию:

function UTF8ToStr(Value: String): String;
var
buffer: Pointer;
BufLen: LongWord;
begin
BufLen := Length(Value) + 4;
GetMem(buffer, BufLen);
FillChar(buffer^, BufLen, 0);
MultiByteToWideChar(CP_UTF8, 0, @Value[1], BufLen - 4, buffer, BufLen);
Result := WideCharToString(buffer);
FreeMem(buffer, BufLen);
end;

?

Далее. Я не совсем понимаю как можно из строки которая по сути 8-ми битная получить 16-ти битную и я так понимаю ваша функция этого и не делает... или я что-то не так понял?



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

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.084 c
2-1271489469
yagluboko
2010-04-17 11:31
2010.08.27
Является ли данное двоичное дерево деревом поиска


15-1268860322
dodo
2010-03-18 00:12
2010.08.27
Посоветуйте модуль или компонент для шифрования данных.


15-1267107491
AlexDan
2010-02-25 17:18
2010.08.27
Подправить ява скрипт


15-1268843922
Aston
2010-03-17 19:38
2010.08.27
Подскажите хорошую книгу по PHP


2-1271246381
Анна
2010-04-14 15:59
2010.08.27
mssql2000 и select из ХП