void __fastcall TForm1::FormShow(TObject *Sender)
{
CppWebBrowser1->Hide();
}
CppWebBrowser
CppWebBrowser1->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);
Подскажите как в этом окне сохранения, формат Internet Explorer *.mnt поместить на первое место в списке “Тип файлов”?
2. Оказалось, что CppWebBrowser не реагирует на свое свойство Visible!
Видимо это ошибка в компоненте т.к. CppWebBrowser не реагирует на это свойство, он не исчезает при Visible=false (проверила на двух компьютерах).
Вот так убираю CppWebBrowser:
Код:
или лучше написать в OnCreate формы?
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 - а смысл его скрывать?
У меня есть форма с рисунками и текстовыми метками (примерный вид которой прилагаю на рисунке, рисунок пришлось сильно сжать - ограничение на форуме стало 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();
}
//---------------------------------------------------------------------------
{
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 ");
}
}
здесь - возможно чем поможет.
З.Ы. Используй пожалуйста форматирование в своих сообщениях.
Посмотри
З.Ы. Используй пожалуйста форматирование в своих сообщениях.
З.Ы. Используй пожалуйста форматирование в своих сообщениях.[/QUOTE]
Не могу найти на форуме кнопку вставления тегов для кода?
Раньше была кнопка, которая вставляла теги. Надо писать в вручную теги кода?
Установите в настройках расширенный редактор в место стандартного.
P.S
Вот код вроде для того что мне нужно, но он на Visual C++ ничего не понятно. :(
Можно его для Builder переделать?
Код:
...
[/QUOTE]
Переделать можно, только не хватает основного момента (ф-ии
SaveWholePage(szUrl, szFile);).
Вообще вариантов сохранения как web-архив всего два:
1. Поставить хук и ловить создание диалога сохранения(HCBT_CREATEWND), перемещать его за экран, устанавливать требуемый формат и нажимать кнопку "Сорхранить".
2. Использовать CDO (как раз это сделано в ф-ии SaveWholePage)
И еще, зачем в ListBox формимровать шаблон страницы? Почему не взять TStringList?
Вот еще одна идея у меня:
Будет ли работать код, если я просто создам файл на запись *.mnt и запишу туда нужные html теги c нужным содержанием? Вместо, например, ListBox1->Items->Add("<td>"); буду писать write в файл. Тогда мне не нужен будет CppBrowser. Будет такое открываться IE?
Вот еще одна идея у меня:
Будет ли работать код, если я просто создам файл на запись *.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);
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.
Если будет время посмотрите мой код формирования html, который я приводила выше. Там сохраняются картинки и формируется файл html с путями на эти картинки. Теперь меняю ListBox1->Items->Add("<head>");
на запись в файл. Ведь папка с картинками на месте, только меняю способ формирования. Может будет работать?
Если будет время посмотрите мой код формирования html, который я приводила выше. Там сохраняются картинки и формируется файл html с путями на эти картинки. Теперь меняю ListBox1->Items->Add("<head>");
на запись в файл. Ведь папка с картинками на месте, только меняю способ формирования. Может будет работать?[/QUOTE]
К сожалению HTML я пр. не знаю. Попробуйте запустить прогу и посмотрите - откроется результат в IE:)
Посмотри мой новый код в теме "new". Основная мысль оформить универсальную функцию формирующую html из Image и Label на форме. Все получилось, но остались вопросы (тема "new").