Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CppWebBrowser

3.0K
05 июня 2006 года
Inga
79 / / 27.12.2005
1. Из окна CppWebBrowser сохраняю файл на диск:
CppWebBrowser1->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);
Подскажите как в этом окне сохранения, формат Internet Explorer *.mnt поместить на первое место в списке “Тип файлов”?

2. Оказалось, что CppWebBrowser не реагирует на свое свойство Visible!
Видимо это ошибка в компоненте т.к. CppWebBrowser не реагирует на это свойство, он не исчезает при Visible=false (проверила на двух компьютерах).
Вот так убираю CppWebBrowser:
 
Код:
void __fastcall TForm1::FormShow(TObject *Sender)
{
CppWebBrowser1->Hide();
}

или лучше написать в OnCreate формы?
1
05 июня 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=Inga]1. Из окна CppWebBrowser сохраняю файл на диск:
CppWebBrowser1->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);
Подскажите как в этом окне сохранения, формат Internet Explorer *.mnt поместить на первое место в списке “Тип файлов”?

2. Оказалось, что CppWebBrowser не реагирует на свое свойство Visible!
Видимо это ошибка в компоненте т.к. CppWebBrowser не реагирует на это свойство, он не исчезает при Visible=false (проверила на двух компьютерах).
Вот так убираю CppWebBrowser:

void __fastcall TForm1::FormShow(TObject *Sender)
{
CppWebBrowser1->Hide();
}
или лучше написать в OnCreate формы?[/QUOTE]
У диалога есть свойство DefaultExt - туда его и надо установить.
CppWebBrowser - а смысл его скрывать?
3.0K
05 июня 2006 года
Inga
79 / / 27.12.2005
>CppWebBrowser - а смысл его скрывать?

У меня есть форма с рисунками и текстовыми метками (примерный вид которой прилагаю на рисунке, рисунок пришлось сильно сжать - ограничение на форуме стало 39 кб). Я хочу получить ОДИН файл, который содержал бы в себе и эти рисунки и подписи к ним. Этот файл должен распознаваться на всех компьютерах. Принтскрином форму не снять, рисунков много вниз, следовательно, полоса прокрутки.
Я придумала код, который транслирует мою форму в html формат и далее грузит ее в невидимый CppWebBrowser1. Далее сохраняю в *.mnt формат, стандартный для Internet Explorer который объединяет в себе и картинки и текст и открывается на любом компьютере.
Код:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 ProgressBar1->Min = 0;
 ProgressBar1->Max = ComponentCount;
 ProgressBar1->Position = 0;
 ListBox1->Clear();

 //подготовка динамической html страницы
 ListBox1->Items->Add("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
 ListBox1->Items->Add("<html>");
 ListBox1->Items->Add("<head>");
 ListBox1->Items->Add("<title>Отчет</title>");
 ListBox1->Items->Add("</head>");
 ListBox1->Items->Add("<body>");
 ListBox1->Items->Add("<table border=\"1\" width=\"750\" bgcolor=\"#ccffcc\">");

 //код ниже отвечает за содержимое тега table в коде страницы html
 int Index = 1;
 AnsiString S = "";
 AnsiString S2 = "";
 ProgressBar1->Visible = true;
 
 for(int i=0; i<ComponentCount; i++)
 {
   ProgressBar1->Position = ProgressBar1->Position + 1;
   TImage * IsImage = dynamic_cast<TImage *>(Components);
     if(IsImage)
      {
      IsImage->Picture->SaveToFile("C:\\html\\Images\\Image" + IntToStr(i) + ".bmp");
      ListBox1->Items->Add("<tr>");
      ListBox1->Items->Add("<td>");
      S = "<img src=\"C:\\html\\Images\\Image" + IntToStr(i) +  ".bmp" + "\" alt=\"\">";
      ListBox1->Items->Add(S);
      ListBox1->Items->Add("</td>");
      ListBox1->Items->Add("<td>");
       for(int i=0; i<ComponentCount; i++)
        {
         TLabel * IsLabel = dynamic_cast<TLabel *>(Components);
         if(IsLabel)
          {
             if(Components->Name == "Label" + IntToStr(Index))
               {
                TLabel * Temp = (TLabel *)Components;
                ListBox1->Items->Add(Temp->Caption);
                break;
               }
          }
        }
      ListBox1->Items->Add("</td>");
      ListBox1->Items->Add("</tr>");
      Index ++;
      }
 }
 ListBox1->Items->Add("</table>");
 ListBox1->Items->Add("</body>");
 ListBox1->Items->Add("</html>"); //динамическая html страница сформирована

 ListBox1->Items->SaveToFile("отчет.html");
 CppWebBrowser1->Navigate(WideString("C:\\html\\отчет.html"));
 ProgressBar1->Visible = false;
 ProgressBar1->Position = 0;
 Application->ProcessMessages();
 CppWebBrowser1->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 CppWebBrowser1->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
 CppWebBrowser1->ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormShow(TObject *Sender)
{
 CppWebBrowser1->Hide();
}
//---------------------------------------------------------------------------

Метод CppWebBrowser1->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT); вызывает сразу диалоговое окно сохранения для CppWebBrowser, диалогового окна нет на форме, поэтому я не знаю как установить DefaultExt в *.mnt :(

P.S
Вот код вроде для того что мне нужно, но он на Visual C++ ничего не понятно. :(
Можно его для Builder переделать?
void CDBrowseView::OnHtmSave()
{
static char szFilter1[] = "MHT File (*.mht)|*.mht|Email File (*.eml)|*.eml||";

// FALSE gives you a file save dialog box, TRUE a file open
CFileDialog m_FileDialog(FALSE,
"mht", "*.mht",
OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY, szFilter1,
NULL);

if (m_FileDialog.DoModal() == IDOK)
{
// URL of web page to be saved
CString szUrl = CDBrowseView::GetLocationURL();
// filename and path return from save as dialog
CString szFile = m_FileDialog.GetPathName();
//call save page function
int r = SaveWholePage(szUrl, szFile);
// handle return code from function
if(r == 1)
AfxMessageBox("File Saved ");
else
AfxMessageBox("Save Failed ");
}
}
1
05 июня 2006 года
kot_
7.3K / / 20.01.2000
Посмотри здесь - возможно чем поможет.
З.Ы. Используй пожалуйста форматирование в своих сообщениях.
3.0K
05 июня 2006 года
Inga
79 / / 27.12.2005
[QUOTE=kot_]
З.Ы. Используй пожалуйста форматирование в своих сообщениях.[/QUOTE]

Не могу найти на форуме кнопку вставления тегов для кода?
Раньше была кнопка, которая вставляла теги. Надо писать в вручную теги кода?
1
05 июня 2006 года
kot_
7.3K / / 20.01.2000
Установите в настройках расширенный редактор в место стандартного.
246
06 июня 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=Inga]
P.S
Вот код вроде для того что мне нужно, но он на Visual C++ ничего не понятно. :(
Можно его для Builder переделать?
 
Код:
...

[/QUOTE]
Переделать можно, только не хватает основного момента (ф-ии
SaveWholePage(szUrl, szFile);).

Вообще вариантов сохранения как web-архив всего два:
1. Поставить хук и ловить создание диалога сохранения(HCBT_CREATEWND), перемещать его за экран, устанавливать требуемый формат и нажимать кнопку "Сорхранить".
2. Использовать CDO (как раз это сделано в ф-ии SaveWholePage)

И еще, зачем в ListBox формимровать шаблон страницы? Почему не взять TStringList?
3.0K
06 июня 2006 года
Inga
79 / / 27.12.2005
Спасибо буду разбираться.

Вот еще одна идея у меня:
Будет ли работать код, если я просто создам файл на запись *.mnt и запишу туда нужные html теги c нужным содержанием? Вместо, например, ListBox1->Items->Add("<td>"); буду писать write в файл. Тогда мне не нужен будет CppBrowser. Будет такое открываться IE?
246
06 июня 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=Inga]Спасибо буду разбираться.

Вот еще одна идея у меня:
Будет ли работать код, если я просто создам файл на запись *.mnt и запишу туда нужные html теги c нужным содержанием? Вместо, например, ListBox1->Items->Add("<td>"); буду писать write в файл. Тогда мне не нужен будет CppBrowser. Будет такое открываться IE?[/QUOTE]
Думаю, что нет. Если создать страницу "обычную" и картинки рядом положить, то да.
И еще если использовать CDO, то CppWebBrowser - здесь не нужен вовсе (CDO работает без него, вроде...).
А если работать через WeBrowserControl, то можно использовать IE вместо TCppWebBrowser:
 
Код:
IWebBrowser2* pWebBrowser = NULL;
VARIANT vURL = {0}, vDummy = {0};
...
CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_SERVER, IID_IWebBrowser2, (LPVOID*)&pWebBrowser);
pWebBrowser->put_Visible(VARIANT_FALSE);
pWebBrowser->Navigate2(&vURL, &vDummy, &vDummy, &vDummy, &vDummy);

только придется самой писать обработчики событий DocumentComplete e.t.c.
3.0K
06 июня 2006 года
Inga
79 / / 27.12.2005
Спасибо, GIZMO, но моих знаний маловато для того что вы пишете. Я не знаю что такое CDO. :confused:
Если будет время посмотрите мой код формирования html, который я приводила выше. Там сохраняются картинки и формируется файл html с путями на эти картинки. Теперь меняю ListBox1->Items->Add("<head>");
на запись в файл. Ведь папка с картинками на месте, только меняю способ формирования. Может будет работать?
246
06 июня 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=Inga]Спасибо, GIZMO, но моих знаний маловато для того что вы пишете. Я не знаю что такое CDO. :confused:
Если будет время посмотрите мой код формирования html, который я приводила выше. Там сохраняются картинки и формируется файл html с путями на эти картинки. Теперь меняю ListBox1->Items->Add("<head>");
на запись в файл. Ведь папка с картинками на месте, только меняю способ формирования. Может будет работать?[/QUOTE]
К сожалению HTML я пр. не знаю. Попробуйте запустить прогу и посмотрите - откроется результат в IE:)
3.0K
06 июня 2006 года
Inga
79 / / 27.12.2005
Я решила отказаться от записи напрямую в mht, у этого формата очень сложная и не понятная html шапка, не понятно. Поэтому mht будет формировать CppBrowser.
Посмотри мой новый код в теме "new". Основная мысль оформить универсальную функцию формирующую html из Image и Label на форме. Все получилось, но остались вопросы (тема "new").
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог