TCppWebBrowser *CppWebBrowser1;
CppWebBrowser1 = new TCppWebBrowser(this); //HTMLForm имя формы
[color=red]CppWebBrowser1->TControl::Parent=this;[/color]
CppWebBrowser1->ParentWindow = this;
CppWebBrowser1->Align = alClient;
CppWebBrowser1->Visible=true;
new
TCppWebBrowser *CppWebBrowser1;
CppWebBrowser1 = new TCppWebBrowser(HTMLForm); //HTMLForm имя формы
CppWebBrowser1->ParentWindow = HTMLForm;
CppWebBrowser1->Align = alClient;
CppWebBrowser1->Visible=true;
P.S.
Еще у меня после строк:
TCppWebBrowser *CppWebBrowser1;
CppWebBrowser1 = new TCppWebBrowser(HTMLForm); //HTMLForm имя формы
CppWebBrowser1->ParentWindow = HTMLForm;
CppWebBrowser1->Align = alClient;
CppWebBrowser1->Visible=true;
В этом же коде есть ниже две строки которые, касаются CppWebBrowser1:
CppWebBrowser1->Navigate(WideString("C:\\html\\123.html"));
CppWebBrowser1->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);//появляется окно сохранения
Это весь код в приложении который имеет отношение к CppWebBrowser.
Не понятно почему он появляется в левом верхнем углу монитора.
Код:
TCppWebBrowser *CppWebBrowser1;
CppWebBrowser1 = new TCppWebBrowser(HTMLForm); //HTMLForm èìÿ ôîðìû
CppWebBrowser1->TControl::Parent=HTMLForm;
CppWebBrowser1->ParentWindow = HTMLForm;
CppWebBrowser1->Align = alClient;
CppWebBrowser1->Visible=true;
То CppWebBrowser1 появляется как и положено на всю форму, но ровно через секунду становиться не видимым. :eek:
TCppWebBrowser *CppWebBrowser1;
CppWebBrowser1 = new TCppWebBrowser(HTMLForm); //HTMLForm èìÿ ôîðìû
CppWebBrowser1->TControl::Parent=HTMLForm;
CppWebBrowser1->ParentWindow = HTMLForm;
CppWebBrowser1->Align = alClient;
CppWebBrowser1->Visible=true;
То CppWebBrowser1 появляется как и положено на всю форму, но ровно через секунду становиться не видимым. :eek:[/QUOTE]
Наверно компилятор сообщает, почему не компилируется.
Если вместо This написать имя формы, то у меня тоже работает .
Код:
THTMLForm *HTMLForm;
TCppWebBrowser *CppWebBrowser1;
//---------------------------------------------------------------------------
__fastcall THTMLForm::THTMLForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void OnCreateHTMLDocument()
{
CppWebBrowser1 = new TCppWebBrowser(HTMLForm); //HTMLForm имя формы
CppWebBrowser1->TControl::Parent=HTMLForm;
CppWebBrowser1->Visible = false;//не работает
CppWebBrowser1->Hide();
HTMLForm->ProgressBar1->Min = 0;
HTMLForm->ProgressBar1->Max = HTMLForm->ComponentCount;
HTMLForm->ProgressBar1->Position = 0;
HTMLForm->ListBox1->Clear();
//подготовка динамической html страницы
HTMLForm->ListBox1->Items->Add("<!DOCTYPE ........itional//EN\">");
HTMLForm->ListBox1->Items->Add("<html>");
HTMLForm->ListBox1->Items->Add("<head>");
HTMLForm->ListBox1->Items->Add("<title>Отчет</title>");
HTMLForm->ListBox1->Items->Add("</head>");
HTMLForm->ListBox1->Items->Add("<body>");
HTMLForm->ListBox1->Items->Add("<table border=\"1\" bgcolor=\"#ccffcc\">");
//width=\"750\"
//код ниже отвечает за содержимое тега table в коде страницы html
int Index = 1;
AnsiString S = "";
AnsiString S2 = "";
HTMLForm->ProgressBar1->Visible = true;
for(int i=0; i<HTMLForm->ComponentCount; i++)
{
HTMLForm->ProgressBar1->Position = HTMLForm->ProgressBar1->Position + 1;
TImage * IsImage = dynamic_cast<TImage *>(HTMLForm->Components);
if(IsImage)
{
IsImage->Picture->SaveToFile("C:\\html\\Images\\Image" + IntToStr(i) + ".bmp");
HTMLForm->ListBox1->Items->Add("<tr>");
HTMLForm->ListBox1->Items->Add("<td>");
S = "<img src=\"C:\\html\\Images\\Image" + IntToStr(i) + ".bmp" + "\" alt=\"\">";
HTMLForm->ListBox1->Items->Add(S);
HTMLForm->ListBox1->Items->Add("</td>");
HTMLForm->ListBox1->Items->Add("<td>");
for(int i=0; i<HTMLForm->ComponentCount; i++)
{
TLabel * IsLabel = dynamic_cast<TLabel *>(HTMLForm->Components);
if(IsLabel)
{
if(HTMLForm->Components->Name == "Label" + IntToStr(Index))
{
TLabel * Temp = (TLabel *)HTMLForm->Components;
HTMLForm->ListBox1->Items->Add(Temp->Caption);
break;
}
}
}
HTMLForm->ListBox1->Items->Add("</td>");
HTMLForm->ListBox1->Items->Add("</tr>");
Index ++;
}
}
HTMLForm->ListBox1->Items->Add("</table>");
HTMLForm->ListBox1->Items->Add("</body>");
HTMLForm->ListBox1->Items->Add("</html>"); //динамическая html страница сформирована
HTMLForm->ListBox1->Items->SaveToFile("отчет.html");
CppWebBrowser1->Navigate(WideString("C:\\html\\отчет.html"));
Application->ProcessMessages();
CppWebBrowser1->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);
HTMLForm->ProgressBar1->Visible = false;
HTMLForm->ProgressBar1->Position = 0;
delete CppWebBrowser1;
}
void __fastcall THTMLForm::Button1Click(TObject *Sender)
{
OnCreateHTMLDocument();
}
TCppWebBrowser *CppWebBrowser1;
//---------------------------------------------------------------------------
__fastcall THTMLForm::THTMLForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void OnCreateHTMLDocument()
{
CppWebBrowser1 = new TCppWebBrowser(HTMLForm); //HTMLForm имя формы
CppWebBrowser1->TControl::Parent=HTMLForm;
CppWebBrowser1->Visible = false;//не работает
CppWebBrowser1->Hide();
HTMLForm->ProgressBar1->Min = 0;
HTMLForm->ProgressBar1->Max = HTMLForm->ComponentCount;
HTMLForm->ProgressBar1->Position = 0;
HTMLForm->ListBox1->Clear();
//подготовка динамической html страницы
HTMLForm->ListBox1->Items->Add("<!DOCTYPE ........itional//EN\">");
HTMLForm->ListBox1->Items->Add("<html>");
HTMLForm->ListBox1->Items->Add("<head>");
HTMLForm->ListBox1->Items->Add("<title>Отчет</title>");
HTMLForm->ListBox1->Items->Add("</head>");
HTMLForm->ListBox1->Items->Add("<body>");
HTMLForm->ListBox1->Items->Add("<table border=\"1\" bgcolor=\"#ccffcc\">");
//width=\"750\"
//код ниже отвечает за содержимое тега table в коде страницы html
int Index = 1;
AnsiString S = "";
AnsiString S2 = "";
HTMLForm->ProgressBar1->Visible = true;
for(int i=0; i<HTMLForm->ComponentCount; i++)
{
HTMLForm->ProgressBar1->Position = HTMLForm->ProgressBar1->Position + 1;
TImage * IsImage = dynamic_cast<TImage *>(HTMLForm->Components);
if(IsImage)
{
IsImage->Picture->SaveToFile("C:\\html\\Images\\Image" + IntToStr(i) + ".bmp");
HTMLForm->ListBox1->Items->Add("<tr>");
HTMLForm->ListBox1->Items->Add("<td>");
S = "<img src=\"C:\\html\\Images\\Image" + IntToStr(i) + ".bmp" + "\" alt=\"\">";
HTMLForm->ListBox1->Items->Add(S);
HTMLForm->ListBox1->Items->Add("</td>");
HTMLForm->ListBox1->Items->Add("<td>");
for(int i=0; i<HTMLForm->ComponentCount; i++)
{
TLabel * IsLabel = dynamic_cast<TLabel *>(HTMLForm->Components);
if(IsLabel)
{
if(HTMLForm->Components->Name == "Label" + IntToStr(Index))
{
TLabel * Temp = (TLabel *)HTMLForm->Components;
HTMLForm->ListBox1->Items->Add(Temp->Caption);
break;
}
}
}
HTMLForm->ListBox1->Items->Add("</td>");
HTMLForm->ListBox1->Items->Add("</tr>");
Index ++;
}
}
HTMLForm->ListBox1->Items->Add("</table>");
HTMLForm->ListBox1->Items->Add("</body>");
HTMLForm->ListBox1->Items->Add("</html>"); //динамическая html страница сформирована
HTMLForm->ListBox1->Items->SaveToFile("отчет.html");
CppWebBrowser1->Navigate(WideString("C:\\html\\отчет.html"));
Application->ProcessMessages();
CppWebBrowser1->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);
HTMLForm->ProgressBar1->Visible = false;
HTMLForm->ProgressBar1->Position = 0;
delete CppWebBrowser1;
}
void __fastcall THTMLForm::Button1Click(TObject *Sender)
{
OnCreateHTMLDocument();
}
[FONT=Times New Roman][SIZE=3]В итоге я получаю нужную мне html страницу после сохранения в диалоговом окне [FONT=Verdana][SIZE=2]ExecWB[/SIZE][/FONT]. Я дальше планирую и ListBox сделать динамическим.[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]Вопросы:[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]1. Мне пришлось вставить оператор Application->ProcessMessages(); иначе диалоговое окно сохранения CppWebBrowser1->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT); не появлялось. Почему?[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]2. Почему в момент вызова оператора new для CppWebBrowser на секунду в углу формы, CppWebBrowser пытается появиться и тем самым создает не красивый эффект на 1-2 секунды (см. рисунок). Потом он пропадает, но это не красиво. Как это избежать, что надо добавить в моент создания CppWebBrowser?[/SIZE][/FONT]
Код:
TCppWebBrowser *CppWebBrowser1;
CppWebBrowser1 = new TCppWebBrowser(this); //HTMLForm имя формы
[color=red]CppWebBrowser1->TControl::Parent=this;[/color]
CppWebBrowser1->ParentWindow = this;
CppWebBrowser1->Align = alClient;
CppWebBrowser1->Visible=true;
CppWebBrowser1 = new TCppWebBrowser(this); //HTMLForm имя формы
[color=red]CppWebBrowser1->TControl::Parent=this;[/color]
CppWebBrowser1->ParentWindow = this;
CppWebBrowser1->Align = alClient;
CppWebBrowser1->Visible=true;
CppWebBrowser1->ParentWindow = this;
^^^^^^^^^^^^^^^^^^^^^^^^
ЖжОшь!
правильный ответ ушел в FAQ's.
^^^^^^^^^^^^^^^^^^^^^^^^
ЖжОшь!
правильный ответ ушел в FAQ's.[/QUOTE]
"Setting ParentWindow has no effect if Parent is not NULL."
И??? Сразу жжошь??? :D
Вопросом было: "Основная мысль транслировать форму в html формат и при этом [color=red]НЕ ПОКАЗЫВАТЬ[/color] CppWebBrowser, а сразу показать диалоговое окно сохранения в html."
Код:
void OnCreateHTMLDocument()
{
CppWebBrowser1 = new TCppWebBrowser(HTMLForm); //HTMLForm имя формы
CppWebBrowser1->Hide();
CppWebBrowser1->[color=red]TControl[/color]::Parent=HTMLForm;
...
{
CppWebBrowser1 = new TCppWebBrowser(HTMLForm); //HTMLForm имя формы
CppWebBrowser1->Hide();
CppWebBrowser1->[color=red]TControl[/color]::Parent=HTMLForm;
...
this, не проходит, потому что ф-ия OnCreateHTMLDocument() не принадлежит к классу THTMLForm.
P.S. Что за FAQ? Собрание сочинений супер пупер программиста GIZMO?
Жжошшь! :D
FAQ.
Инге рекомендую все ж прочесть по ссылке которую я дал и не поленится и поискать на сайте ( я имею ввиду rsdn.ru) - тема упаковки, чтения и сохранения там рассматривается достаточно подробно - можно найти как работать с данным форматом, чем он отличается и т.д. Я к сожалению таких задач пока не имею и данный формат не использую - потому и код не привожу - тестить мне его сейчас некогда.
За свой пост получаешь награду заслуженную - предупреждение. Прежде чем оставлять свое сообщение стоит ознакомится с
Инге рекомендую все ж прочесть по ссылке которую я дал и не поленится и поискать на сайте ( я имею ввиду rsdn.ru) - тема упаковки, чтения и сохранения там рассматривается достаточно подробно - можно найти как работать с данным форматом, чем он отличается и т.д. Я к сожалению таких задач пока не имею и данный формат не использую - потому и код не привожу - тестить мне его сейчас некогда.
Я уже опредилилась - оставляю этот код (см.выше) в своем приложении, он полность рабочий. Остался вопрос не красивого эффекта при попытке создать CppWebBrowser через new. Попробую сделать метод OnCreateHTMLDocument() методом формы - вдруг поможет. :rolleyes:
Код:
void OnCreateHTMLDocument()
{
CppWebBrowser1 = new TCppWebBrowser(HTMLForm); //HTMLForm имя формы
CppWebBrowser1->Hide();
CppWebBrowser1->TControl::Parent=HTMLForm;
...
...
{
CppWebBrowser1 = new TCppWebBrowser(HTMLForm); //HTMLForm имя формы
CppWebBrowser1->Hide();
CppWebBrowser1->TControl::Parent=HTMLForm;
...
...
CppWebBrowser1->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);
и соотвественно не появляется диалоговое окно сохранения.:(
В абсолютно чистом проекте мелькание можно заметить лишь быстро, часто и много нажимая на Button (код ниже), но в моем приложении видно сильнее, так-как в углу еще и картинка находиться.
Код:
[COLOR=green]#include <vcl.h>
[/COLOR][COLOR=green]#pragma hdrstop
[/COLOR]
[COLOR=green]#include "Unit1.h"
[/COLOR][COLOR=green]//---------------------------------------------------------------------------
[/COLOR][COLOR=green]#pragma package(smart_init)
[/COLOR][COLOR=green]#pragma link "SHDocVw_OCX"
[/COLOR][COLOR=green]#pragma resource "*.dfm"
[/COLOR]TForm1 *Form1;
TCppWebBrowser *CppWebBrowser1;
[COLOR=green]//---------------------------------------------------------------------------
[/COLOR]__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
[COLOR=green]//---------------------------------------------------------------------------
[/COLOR]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
CppWebBrowser1 = new TCppWebBrowser(Form1);
CppWebBrowser1->TControl::Parent=Form1;
CppWebBrowser1->Visible = false;
CppWebBrowser1->Hide();
delete CppWebBrowser1;
}
[/COLOR][COLOR=green]#pragma hdrstop
[/COLOR]
[COLOR=green]#include "Unit1.h"
[/COLOR][COLOR=green]//---------------------------------------------------------------------------
[/COLOR][COLOR=green]#pragma package(smart_init)
[/COLOR][COLOR=green]#pragma link "SHDocVw_OCX"
[/COLOR][COLOR=green]#pragma resource "*.dfm"
[/COLOR]TForm1 *Form1;
TCppWebBrowser *CppWebBrowser1;
[COLOR=green]//---------------------------------------------------------------------------
[/COLOR]__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
[COLOR=green]//---------------------------------------------------------------------------
[/COLOR]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
CppWebBrowser1 = new TCppWebBrowser(Form1);
CppWebBrowser1->TControl::Parent=Form1;
CppWebBrowser1->Visible = false;
CppWebBrowser1->Hide();
delete CppWebBrowser1;
}
И??? Сразу жжошь??? :D[/QUOTE]
Ага!:)
Код:
/*1*/ TCppWebBrowser *CppWebBrowser1;
/*2*/ CppWebBrowser1 = new TCppWebBrowser(this); //HTMLForm имя формы
/*3*/ [color=red]CppWebBrowser1->TControl::Parent=this;[/color]
/*4*/ CppWebBrowser1->ParentWindow = this;
/*5*/ CppWebBrowser1->Align = alClient;
/*6*/ CppWebBrowser1->Visible=true;
/*2*/ CppWebBrowser1 = new TCppWebBrowser(this); //HTMLForm имя формы
/*3*/ [color=red]CppWebBrowser1->TControl::Parent=this;[/color]
/*4*/ CppWebBrowser1->ParentWindow = this;
/*5*/ CppWebBrowser1->Align = alClient;
/*6*/ CppWebBrowser1->Visible=true;
Строка /*3*/ выделенна красным - правильно, там 2-е ошибки:
1 - Ты уже сам понял, что никаго this в функции кот. не является членом класса нет. Тоже в строке /*2*/.
2 - TControl::Parent - это не тот "парент". У CppWebBrowser контейнер TOLEControl вот его парент и нужно выставлять. Отсюда и появляются странные визуальные эффекты.
Строка ниже:
Код:
CppWebBrowser1->ParentWindow = this
Таже фигня (this) + пытаемся присвоить св-ву ParentWindow имеющему тип HWND указатель типа THTMLForm. Возможно у формы есть оператор преобразования в HWND, но я бы написал ... = this->Handle;
Строка /*6*/, - почему не работает св-во visible?:(. См. 3-2.
[QUOTE=_nоrth_]
P.S. Что за FAQ? Собрание сочинений супер пупер программиста GIZMO?
Жжошшь! :D[/QUOTE]
Если читал, то видно, что там не только мои ответы.
Кстати я не программист, я даже не "продвинутый пользователь".
[QUOTE=Inga]Я пробывала CppWebBrowser1->Hide(); поставить выше, но почему-то после этого не срабатывает оператор внизу кода:
До этой ссылки я еще не доросла. :)
Там методы с использованием COM - технологий, слабо разбираюсь.;)
Я уже не много запуталась с этими [COLOR=#ff0000]Parent - ми :) [/COLOR]
Я так поняла, что от визуального эффекта я не отделаюсь? Как лучше посупить в моем случае? Может использовать более старый компонент THTML? А есть у него диалоговое окно сохранения в mht?
В книге Калверта описано как его установить в Builder 6, где он по умолчанию отсуствует.
CppWebBrowser1->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);
и соотвественно не появляется диалоговое окно сохранения.:(
[/QUOTE]
1. В *.h модуле в объявлении формы после ключевого слова private: написать
Код:
TCppWebBrowser *CppWebBrowser1;
IDispatch *CurDispatch;
void __fastcall CppWebBrowser1DocumentComplete(TObject *Sender, IDispatch *pDisp, tagVARIANT *);
void __fastcall CppWebBrowser1NavigateComplete2(TObject *Sender, IDispatch *pDisp, tagVARIANT *);
IDispatch *CurDispatch;
void __fastcall CppWebBrowser1DocumentComplete(TObject *Sender, IDispatch *pDisp, tagVARIANT *);
void __fastcall CppWebBrowser1NavigateComplete2(TObject *Sender, IDispatch *pDisp, tagVARIANT *);
2. В *.cpp модуль записать
Код:
void __fastcall THTMLForm::CppWebBrowser1DocumentComplete(TObject *Sender, IDispatch *pDisp, tagVARIANT *)
{
if (pDisp == CurDispatch)
{
((TCppWebBrowser *)Sender)->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);
CurDispatch = NULL;
}
}
void __fastcall THTMLForm::CppWebBrowser1NavigateComplete2(TObject *Sender, IDispatch *pDisp, tagVARIANT *)
{
if (!CurDispatch)
CurDispatch = pDisp;
}
{
if (pDisp == CurDispatch)
{
((TCppWebBrowser *)Sender)->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);
CurDispatch = NULL;
}
}
void __fastcall THTMLForm::CppWebBrowser1NavigateComplete2(TObject *Sender, IDispatch *pDisp, tagVARIANT *)
{
if (!CurDispatch)
CurDispatch = pDisp;
}
3. В событие OnCreate формы записать:
Код:
CppWebBrowser1 = NULL;
4. В событие OnClose формы записать:
Код:
if(CppWebBrowser1!=NULL)delete CppWebBrowser1;
5. Сделать OnCreateHTMLDocument() методом класса THTMLForm и чуть исправить
Код:
void THTMLForm::OnCreateHTMLDocument()
{
CurDispatch = NULL;
if(CppWebBrowser1==NULL)
{
CppWebBrowser1 = new TCppWebBrowser(this); //HTMLForm имя формы
CppWebBrowser1->OnDocumentComplete = CppWebBrowser1DocumentComplete;
CppWebBrowser1->OnNavigateComplete2 = CppWebBrowser1NavigateComplete2;
CppWebBrowser1->Hide();
CppWebBrowser1->[color=red]TWinControl[/color]::Parent = this;
CppWebBrowser1->Top = -1000;
CppWebBrowser1->Show();
}
HTMLForm->ProgressBar1->Min = 0;
HTMLForm->ProgressBar1->Max = HTMLForm->ComponentCount;
HTMLForm->ProgressBar1->Position = 0;
HTMLForm->ListBox1->Clear();
//подготовка динамической html страницы
HTMLForm->ListBox1->Items->Add("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
HTMLForm->ListBox1->Items->Add("<html>");
HTMLForm->ListBox1->Items->Add("<head>");
HTMLForm->ListBox1->Items->Add("<title>Отчет</title>");
HTMLForm->ListBox1->Items->Add("</head>");
HTMLForm->ListBox1->Items->Add("<body>");
HTMLForm->ListBox1->Items->Add("<table border=\"1\" bgcolor=\"#ccffcc\">");
//width=\"750\"
//код ниже отвечает за содержимое тега table в коде страницы html
int Index = 1;
AnsiString S = "";
AnsiString S2 = "";
HTMLForm->ProgressBar1->Visible = true;
for(int i=0; i<HTMLForm->ComponentCount; i++)
{
HTMLForm->ProgressBar1->Position = HTMLForm->ProgressBar1->Position + 1;
TImage * IsImage = dynamic_cast<TImage *>(HTMLForm->Components);
if(IsImage)
{
IsImage->Picture->SaveToFile("C:\\html\\Images\\Image" + IntToStr(i) + ".bmp");
HTMLForm->ListBox1->Items->Add("<tr>");
HTMLForm->ListBox1->Items->Add("<td>");
S = "<img src=\"C:\\html\\Images\\Image" + IntToStr(i) + ".bmp" + "\" alt=\"\">";
HTMLForm->ListBox1->Items->Add(S);
HTMLForm->ListBox1->Items->Add("</td>");
HTMLForm->ListBox1->Items->Add("<td>");
for(int i=0; i<HTMLForm->ComponentCount; i++)
{
TLabel * IsLabel = dynamic_cast<TLabel *>(HTMLForm->Components);
if(IsLabel)
{
if(HTMLForm->Components->Name == "Label" + IntToStr(Index))
{
TLabel * Temp = (TLabel *)HTMLForm->Components;
HTMLForm->ListBox1->Items->Add(Temp->Caption);
break;
}
}
}
HTMLForm->ListBox1->Items->Add("</td>");
HTMLForm->ListBox1->Items->Add("</tr>");
Index ++;
}
}
HTMLForm->ListBox1->Items->Add("</table>");
HTMLForm->ListBox1->Items->Add("</body>");
HTMLForm->ListBox1->Items->Add("</html>"); //динамическая html страница сформирована
HTMLForm->ListBox1->Items->SaveToFile("отчет.html");
CppWebBrowser1->Navigate(WideString("C:\\html\\отчет.html"));
HTMLForm->ProgressBar1->Visible = false;
HTMLForm->ProgressBar1->Position = 0;
}
{
CurDispatch = NULL;
if(CppWebBrowser1==NULL)
{
CppWebBrowser1 = new TCppWebBrowser(this); //HTMLForm имя формы
CppWebBrowser1->OnDocumentComplete = CppWebBrowser1DocumentComplete;
CppWebBrowser1->OnNavigateComplete2 = CppWebBrowser1NavigateComplete2;
CppWebBrowser1->Hide();
CppWebBrowser1->[color=red]TWinControl[/color]::Parent = this;
CppWebBrowser1->Top = -1000;
CppWebBrowser1->Show();
}
HTMLForm->ProgressBar1->Min = 0;
HTMLForm->ProgressBar1->Max = HTMLForm->ComponentCount;
HTMLForm->ProgressBar1->Position = 0;
HTMLForm->ListBox1->Clear();
//подготовка динамической html страницы
HTMLForm->ListBox1->Items->Add("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
HTMLForm->ListBox1->Items->Add("<html>");
HTMLForm->ListBox1->Items->Add("<head>");
HTMLForm->ListBox1->Items->Add("<title>Отчет</title>");
HTMLForm->ListBox1->Items->Add("</head>");
HTMLForm->ListBox1->Items->Add("<body>");
HTMLForm->ListBox1->Items->Add("<table border=\"1\" bgcolor=\"#ccffcc\">");
//width=\"750\"
//код ниже отвечает за содержимое тега table в коде страницы html
int Index = 1;
AnsiString S = "";
AnsiString S2 = "";
HTMLForm->ProgressBar1->Visible = true;
for(int i=0; i<HTMLForm->ComponentCount; i++)
{
HTMLForm->ProgressBar1->Position = HTMLForm->ProgressBar1->Position + 1;
TImage * IsImage = dynamic_cast<TImage *>(HTMLForm->Components);
if(IsImage)
{
IsImage->Picture->SaveToFile("C:\\html\\Images\\Image" + IntToStr(i) + ".bmp");
HTMLForm->ListBox1->Items->Add("<tr>");
HTMLForm->ListBox1->Items->Add("<td>");
S = "<img src=\"C:\\html\\Images\\Image" + IntToStr(i) + ".bmp" + "\" alt=\"\">";
HTMLForm->ListBox1->Items->Add(S);
HTMLForm->ListBox1->Items->Add("</td>");
HTMLForm->ListBox1->Items->Add("<td>");
for(int i=0; i<HTMLForm->ComponentCount; i++)
{
TLabel * IsLabel = dynamic_cast<TLabel *>(HTMLForm->Components);
if(IsLabel)
{
if(HTMLForm->Components->Name == "Label" + IntToStr(Index))
{
TLabel * Temp = (TLabel *)HTMLForm->Components;
HTMLForm->ListBox1->Items->Add(Temp->Caption);
break;
}
}
}
HTMLForm->ListBox1->Items->Add("</td>");
HTMLForm->ListBox1->Items->Add("</tr>");
Index ++;
}
}
HTMLForm->ListBox1->Items->Add("</table>");
HTMLForm->ListBox1->Items->Add("</body>");
HTMLForm->ListBox1->Items->Add("</html>"); //динамическая html страница сформирована
HTMLForm->ListBox1->Items->SaveToFile("отчет.html");
CppWebBrowser1->Navigate(WideString("C:\\html\\отчет.html"));
HTMLForm->ProgressBar1->Visible = false;
HTMLForm->ProgressBar1->Position = 0;
}
Я уже не много запуталась с этими [COLOR=#ff0000]Parent - ми :) [/COLOR][/QUOTE]Ничего сложного.
Если хочешь, можешь писать :
CppWebBrowser1->TControl::Parent = this;
Но, если лучше нравится, то можешь писать :
CppWebBrowser1->TWinControl::Parent = this;
Но а если не хочешь детей обижать, тогда пиши :
CppWebBrowser1->TOleControl::Parent = this; ;)
Правда не получается реализовать мою мечту сделать одну функцию и просто вставлять ее в другие приложения для трансформации их в html. Придется существенно пересмотреть мою концепцию - надо и h файл переделывать! Нельзя ли получить комментарии, а то буду писать и сама не понимать что пишу:rolleyes:
Что делают методы и что например значит:
CurDispatch = pDisp; ???//what is?
CurDispatch = NULL; ??? //why? :)
От моего кода почти ничего не осталось. Кошмар!:o
А в вашем коде нет: CppWebBrowser1->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);
Оно работает?
if (!CurDispatch)CurDispatch = pDisp; оно выполняется, когда CppWebBrowser полностью загрузило страницу.
В твоем пред. коде нужно было ставить вызов ProcessMessages() для того, чтоб дать время бровзеру загрузить страницу. Но обработать событие OnNavigateComplete2 более надежно.
CurDispatch = NULL; - это подготовка к след.навигации.
Можно все это оформить в виде класса, и тогда можно встраивать в формы простым:
TMyClass *mc = new TMyClass(this);
В конструктор класса поместить создание бровзера, в деструктор удаление.
Вместо Listbox использовать напр. TStringList, а ProgressBar можно динамически создавать и удалять из этого класса.
Оно работает?[/QUOTE]Конечно работает. Так не для этого писался весь код ? :) Он вызывается автоматически в обработчике события OnDocumentComplete, когда бровзер полностью загрузил страницу.
Буду пробывать и разбираться.
CppWebBrowser1->Navigate(WideString(GetCurrentDir()+"\\"+dir+"\\Report.html"));
while(CppWebBrowser1->ReadyState != Shdocvw_tlb::READYSTATE_COMPLETE) //Shdocvw_tlb:: для Builder 5
{
Sleep(100);
Application->ProcessMessages();
}
Application->ProcessMessages();
CppWebBrowser1->ExecWB(Shdocvw_tlb::OLECMDID_SAVEAS,Shdocvw_tlb::OLECMDEXECOPT_DODEFAULT);