Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2009, 11:12   #1
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
Вопрос Как получить из webbrawser'а исходник HTML в memo

Всем доброго времени суток.

Вот такая проблема, я хочу получить исходник HTML в memo из webbrawser'а, и с этим проблем никаких. Для этого можно вот таким кодом воспользоваться:

Код:
uses
   ActiveX;

 function WB_GetHTMLCode(WebBrowser: TWebBrowser; ACode: TStrings): Boolean;
 var
   ps: IPersistStreamInit;
   ss: TStringStream;
   sa: IStream;
   s: string;
 begin
   ps := WebBrowser.Document as IPersistStreamInit;
   s := '';
   ss := TStringStream.Create(s);
   try
     sa := TStreamAdapter.Create(ss, soReference) as IStream;
     Result := Succeeded(ps.Save(sa, True));
     if Result then ACode.Add(ss.Datastring);
   finally
     ss.Free;
   end;
 end;

 procedure TForm1.Button2Click(Sender: TObject);
 begin
   WB_GetHTMLCode(Webbrowser1, Memo1.Lines);
 end;
Или, например,таким:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  memo1.Lines.Text:= IdHttp1.Get('http://www.yandex.ru/');
end;
Но и в том и в другом случае, у меня получается корявый исходник, примерно вот такого вида:

procedure TForm1.Button1Click(Sender: TObject);
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><meta http-equiv="X-UA-Compatible"content="IE=EmulateIE7"> <title>Яндекс</title><link rel="shortcut icon"href="http://img.yandex.net/i/favicon.ico"><link rel=alternate type="application/rss+xml"title="Новости Яндекса"href="http://company.yandex.ru/news/news.rss"><link rel=alternate type="application/rss+xml"title="Блог Яндекса"href="http://

Видите, да, что вместо русских слов закарючки, так вот как мне получить нормальный исходник?
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 25.11.2009, 11:23   #2
Gambler
Игрок
Форумчанин
 
Аватар для Gambler
 
Регистрация: 29.10.2006
Сообщений: 367
По умолчанию

ты получаешь русский текст в Юникоде. А печатаешь в ASCII. Тебе надо переводить кодировки и все будет красиво.
Жизнь всегда игра. Но смерть - не всегда поражение.

#define true (Math.random()>0.5) //Удачной отладки

Последний раз редактировалось Gambler; 25.11.2009 в 12:03.
Gambler вне форума Ответить с цитированием
Старый 25.11.2009, 11:25   #3
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Gambler, я что-то подобное и думал, что у меня проблема с кодировкой, потому что у меня в браузере нет русской кодировки Кирилицы. А как мне перекодировать можно?
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 25.11.2009, 12:04   #4
Gambler
Игрок
Форумчанин
 
Аватар для Gambler
 
Регистрация: 29.10.2006
Сообщений: 367
По умолчанию

Код:
Function UnToAscii(S: string): string;
var i,k: integer;
begin
i:=1;
for k:=1 to length(S) do
begin
  if ord(S[i])>128 then
    begin
      S[k]:=chr((ord(S[i])+48)*64+Ord(S[i+1])+48);
      i:=i+2;
    end else
    begin
      s[k]:=chr((ord(S[i])+48)*64);
      i:=i+1;
    end;
end;
result:=s;
end;
На скорую руку накидал функцию и если честно даже не проверял. Так что разбирайся сам.
Жизнь всегда игра. Но смерть - не всегда поражение.

#define true (Math.random()>0.5) //Удачной отладки
Gambler вне форума Ответить с цитированием
Старый 25.11.2009, 18:12   #5
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Gambler, твоя функция вот чё выдает вместо исходника: @Ђ

Помогите пожалуйста, как переделать функцию чтоб нормально работала?
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 25.11.2009, 18:37   #6
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Проблема была решена добавление вот такой вот интересной строчки:

Код:
memCode.Lines.Text:=UTF8ToANSI(memCode.Lines.Text);
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как имея один exe файл получить исходник программы? Skoroxod Общие вопросы Delphi 4 20.02.2009 10:41
Как получить html из Webbrowser Teen4jump Работа с сетью в Delphi 3 05.11.2008 00:33
Как имея хендл на Memo получить выделенный в нем текст? hoza_syl Помощь студентам 2 23.05.2008 17:06
Как получить со страничы HTML код? Kukkk Работа с сетью в Delphi 6 23.10.2007 23:13