На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Подскажите, хороший, компонент для просмотра HTML, DHTML
    Сейчас я работаю над приложением, где необходим справочник, в котором будут показываться HTML-документы, подскажите, пожалуйста, хороший, бесплатный компонент для просмотра HTML-документов.
    Сообщение отредактировано: DelphiLexx -
      TWebBrowser - бесплатен по самое нехочу :)
        Цитата Rouse_ @
        TWebBrowser - бесплатен по самое нехочу

        Не устраивает тем, что не умеет читать данные из потока (Stream). У меня Html-документы будут храниться в базе данных, затем с помощью Sql-запроса помещается в DataSet, после чего мне нужно, чтобы эти данные отобразились в виде Html-документа.
          Цитата DelphiLexx @
          Не устраивает тем, что не умеет читать данные из потока (Stream).

          Это ты просто не умеешь в него писать из потока :)
          Ищи примеры в FAQ.
            ThtmlLite. У него есть LoadFromStream.
              Цитата Rouse_ @
              Это ты просто не умеешь в него писать из потока
              Ищи примеры в FAQ.

              Нашел
              ExpandedWrap disabled
                uses
                ActiveX;
                 
                procedure WB_LoadHTML(WebBrowser: TWebBrowser; 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;
                 
                procedure TForm1.Button1Click(Sender: TObject);
                begin
                 
                WB_LoadHTML(WebBrowser1,'SwissDelphiCenter');
                end;

              Но есть одна проблема, у меня в ms - будет храниться Html-код, после исполнения кода указанного выше, TWebBrowser - отображает не саму страницу (толькл информационный текст), а Html-код, т.е. тэги, информационный текст и прочую фигню. Как быть?
                ExpandedWrap disabled
                  var
                    Document: IHtmlDocument2;
                    V: Variant;
                   
                  ...
                   
                    WebBrowser2.Navigate('about:blank');
                    while WebBrowser2.Document = nil do
                      Application.ProcessMessages;
                    Document := WebBrowser2.Document as IHtmlDocument2;
                    V := VarArrayCreate([0, 0], varVariant);
                    V[0] := HTMLCode;
                    Document.Writeln(PSafeArray(TVarData(v).VArray));
                  end;
                  Делай тупо
                  ExpandedWrap disabled
                    var
                      V: OleVariant;
                      HtmlDoc: IHTMLDocument2;
                    begin
                      WB.Navigate('about:blank');
                      OleCheck(WB.Document.QueryInterface(IHTMLDocument2, HtmlDoc));
                      V := VarArrayCreate([0, 0], varVariant);
                      V[0] := ppText.Content; //строка
                      HtmlDoc.write(PSafeArray(TVarData(V).VArray));
                      HtmlDoc.close;


                  Добавлено
                  :lool:
                  Розыч, close в конце не помешает ;)
                    Цитата Romkin @
                    Розыч, close в конце не помешает

                    Я когда даю демки, обычно на такое не смотрю - должен же вопрошающий сам над чем нибудь поразмыслить :)
                      Цитата Romkin @
                      Делай тупо
                      var
                      V: OleVariant;
                      HtmlDoc: IHTMLDocument2;
                      begin
                      WB.Navigate('about:blank');
                      OleCheck(WB.Document.QueryInterface(IHTMLDocument2, HtmlDoc));
                      V := VarArrayCreate([0, 0], varVariant);
                      V[0] := ppText.Content; //строка
                      HtmlDoc.write(PSafeArray(TVarData(V).VArray));
                      HtmlDoc.close;

                      Так мне же нужно через поток
                        :wall:
                        Цитата DelphiLexx @
                        У меня Html-документы будут храниться в базе данных, затем с помощью Sql-запроса помещается в DataSet, после чего мне нужно, чтобы эти данные отобразились в виде Html-документа.

                        Вопрос на засыпку: Есть ли у TField метод AsString?!
                          Используй TStringStream - будет тебе поток, легко трансформируемый в строку :)
                            Цитата Romkin @
                            Вопрос на засыпку: Есть ли у TField метод AsString?!

                            Есть.

                            Добавлено
                            А как узнать, пустой ли докумет или нет?
                              А если есть, ничего не мешает писать V[0] := MyField.asString; ;)
                              Цитата DelphiLexx @
                              А как узнать, пустой ли докумет или нет?

                              В где?
                                Цитата Romkin @
                                В где?

                                В TWebBrowser'e.
                                1. Мне это нужно, для следующих целей, если документ пустой, т.е. если загружен html - который не содержит информационного текста, тогда я блокирую кнопку очистить (она очищает содержимое документа TWebBrowser'a). Кстати, умеет ли TWebBrowser очищать документ, если ли у него такой метод?
                                2. Как сохранить исходник TWebBrowser.Document'a в TStringStream, я так понимаю вот так:
                                ExpandedWrap disabled
                                   ts := TStringStream.Create;
                                   try
                                    ((WebBrowser.Document as IHTMLDocument2) as IPersistStreamInit).Save(TStreamAdapter.Create(ts), 'вот здесь что ставить?')
                                    ...
                                   finally
                                    ts.Free;
                                   end;
                                Сообщение отредактировано: DelphiLexx -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0406 ]   [ 16 queries used ]   [ Generated: 25.04.24, 14:29 GMT ]