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

Вниз

Извлечение текста из 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.06 c
15-1274355508
Tirael
2010-05-20 15:38
2010.08.27
что это может быть?


2-1265642089
webpauk
2010-02-08 18:14
2010.08.27
Проблема с CheckBox


2-1265893182
Б
2010-02-11 15:59
2010.08.27
Какие аудио форматы поддерживает MCI?


2-1267108150
Alex___
2010-02-25 17:29
2010.08.27
Как работать с бестиповой переменной?, func(VAR BUF;...)


2-1270329778
Б
2010-04-04 01:22
2010.08.27
String -> WideChar





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