Форум: "Сети";
Текущий архив: 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.075 c