Kitchen Pages, KitCAD i3 KGC rX - SDK source - Index
This, version is limited in function - language or grid support is not enabled. Example code only.
Example of TWebBrowser component control (works with XE3 and above)
The Windows registry needs a setting for the browser to function as EDGE (11001). Information about this setting is not included.
WebBrowser; C++ Builder example
KitCADi3KGCrX.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
USEFORM("MainUnit1.cpp", Form1);
//---------------------------------------------------------------------------
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
try
{
Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
MainUnit1.h
//---------------------------------------------------------------------------
#ifndef MainUnit1H
#define MainUnit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <SHDocVw.hpp> //TWebBrowser
#include <Vcl.OleCtrls.hpp>
#include <Vcl.ComCtrls.hpp>
#include <Vcl.Dialogs.hpp>
#include <Vcl.ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TWebBrowser *WebBrowser1;
TRichEdit *RichEdit1;
TOpenDialog *OpenDialog1;
TSaveDialog *SaveDialog1;
TTimer *Timer1;
void __fastcall SetPermissions11001(TObject *Sender);
void __fastcall SetPermissions11000(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall WebBrowser1BeforeNavigate2(TObject *ASender, const IDispatch *pDisp,
const OleVariant &URL, const OleVariant &Flags, const OleVariant &TargetFrameName,
const OleVariant &PostData, const OleVariant &Headers,
WordBool &Cancel);
void __fastcall WebBrowser1NewWindow3(TObject *ASender, IDispatch *&ppDisp, WordBool &Cancel,
DWORD dwFlags, const WideString bstrUrlContext, const WideString bstrUrl);
void __fastcall Timer1Timer(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
MainUnit1.cpp
//---------------------------------------------------------------------------
#include <System.Win.Registry.hpp> //added by jason
#include <vcl.h>
#include <mshtml.h> // IHTMLDocument - IHTMLElement, added by jason
#pragma hdrstop
#include "MainUnit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
String params = "";
for (int ai=0;ai<=ParamCount();ai++)
{
//the switch of \version provides usecurrentversion = false
// if (LowerCase(ParamStr(ai)) == "/version") {usecurrentversion = false;}
if (LowerCase(ParamStr(ai)) == "/b") {Beep(10000,1000);}
if (LowerCase(ParamStr(ai)) == "/q") {Application->Terminate();}
if ( LowerCase(ParamStr(ai)) != "-embedding"
&& LowerCase(ParamStr(ai)) != "-embedding.kpd"
&& LowerCase(ParamStr(ai)) != "embedding"
&& !LowerCase(ParamStr(ai)).IsEmpty()
&& FileExists(ParamStr(ai))
&& ParamStr(ai)!=Application->ExeName ){
params = ParamStr(1); //should point to HTML file
//ShowMessage(ParamStr(ai));
}
}
//ShowMessage(params);
if(FileExists(ExtractFilePath(Application->ExeName)+"conf\\KitCADi3KGCrX.11000")==true){ SetPermissions11000(this); }
if(FileExists(ExtractFilePath(Application->ExeName)+"conf\\KitCADi3KGCrX.11001")==true){ SetPermissions11001(this); }
WebBrowser1->Navigate( WideString(params).c_bstr() );
Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SetPermissions11001(TObject *Sender) {
#ifdef _Windows
UnicodeString cHomePath = "SOFTWARE";
UnicodeString cFeatureBrowserEmulation =
"Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION\\";
int cIE11 = 11001;
UnicodeString sKey = ExtractFileName(ParamStr(0));
TRegIniFile *Reg = new TRegIniFile(cHomePath);
__try {
TRegistry *reg1 = dynamic_cast<TRegistry*>(Reg);
if (Reg->OpenKey(cFeatureBrowserEmulation,
true) && !(reg1->KeyExists(sKey) && reg1->ReadInteger(sKey)
== cIE11)) {
reg1->WriteInteger(sKey, cIE11);
}
}
__finally {
Reg->Free();
}
#endif
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SetPermissions11000(TObject *Sender) {
#ifdef _Windows
UnicodeString cHomePath = "SOFTWARE";
UnicodeString cFeatureBrowserEmulation =
"Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION\\";
int cIE11 = 11000;
UnicodeString sKey = ExtractFileName(ParamStr(0));
TRegIniFile *Reg = new TRegIniFile(cHomePath);
__try {
TRegistry *reg1 = dynamic_cast<TRegistry*>(Reg);
if (Reg->OpenKey(cFeatureBrowserEmulation,
true) && !(reg1->KeyExists(sKey) && reg1->ReadInteger(sKey)
== cIE11)) {
reg1->WriteInteger(sKey, cIE11);
}
}
__finally {
Reg->Free();
}
#endif
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WebBrowser1BeforeNavigate2(TObject *ASender, const IDispatch *pDisp,
const OleVariant &URL, const OleVariant &Flags, const OleVariant &TargetFrameName,
const OleVariant &PostData, const OleVariant &Headers,
WordBool &Cancel)
{
//debug
//Application->MessageBoxW(L"here - beforenavigate2", BSTR(URL) ,0);
//cancel and save richedit depending on which URL was given
Variant vs1 = "about:blankS"; //dont cancel on about:blank
Variant vs2 = "res:\/\/ieframe.dll\/syntax.htm#http:\/\/\/cgi-bin\/kitcadi3_kp2.cgi";
Variant vs3 = "http:\/\/\/cgi-bin\/kitcadi3_kp2.cgi";
Variant vs4 = "http:\/\/www.kitchenpages.com\/cgi-bin\/kitcadi3_kp2.cgi";
AnsiString s1 = URL.AsType( varString );
AnsiString s2 = vs1.AsType( varString );
AnsiString s3 = vs2.AsType( varString );
AnsiString s4 = vs3.AsType( varString );
AnsiString s5 = vs4.AsType( varString );
bool save = false;
if(s1 == s2){ Cancel=TRUE; }
if(s1 == s3){ Cancel=TRUE; save=true;}
if(s1 == s4){ Cancel=TRUE; save=true;}
if(s1 == s5){ Cancel=TRUE; save=true;}
//ShowMessage(s2);
if(save==true){
//always grab a copy of the html body into a richedit control
AnsiString aContenuText = "";
AnsiString aContenuHTML = "";
Variant vDocument = WebBrowser1->ControlInterface->Document;
if (((IDispatch *)vDocument) != NULL)
{
Variant vBody = vDocument.OlePropertyGet("Body");
Variant vContenuText = vBody.OlePropertyGet("InnerText");
Variant vContenuHTML = vBody.OlePropertyGet("InnerHTML");
aContenuText = vContenuText;
aContenuHTML = vContenuHTML;
}
RichEdit1->Lines->Text = aContenuHTML;
//shorten the loaded file if its HTML
AnsiString textareastart = "<textarea name=\"data\" id=\"content\" rows=\"40\" cols=\"80\">";
AnsiString textareaend = "<\/textarea>";
AnsiString xURL = RichEdit1->Lines->Text;
if( AnsiString(xURL).AnsiPos(textareastart) != 0){
RichEdit1->Lines->Text = String(xURL).SubString((55 + AnsiString(xURL).AnsiPos(textareastart)),String(xURL).Length());
}
AnsiString xURLx = RichEdit1->Lines->Text;
if( AnsiString(xURLx).AnsiPos(textareaend) != 0){
RichEdit1->Lines->Text = String(xURLx).SubString(0,(AnsiString(xURLx).AnsiPos(textareaend))-1);
}
//get filename from savefile dialog
if( SaveDialog1->Execute() ){
RichEdit1->Lines->SaveToFile( SaveDialog1->FileName );
}
}
Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WebBrowser1NewWindow3(TObject *ASender, IDispatch *&ppDisp,
WordBool &Cancel, DWORD dwFlags, const WideString bstrUrlContext,
const WideString bstrUrl)
{
//debug
//Application->MessageBoxW(L"here - newwindow3", bstrUrl ,0);
//cancel file OPEN function and use OPENDIALOG to get file
WideString s1 = "about:blankS"; //dont cancel on about:blank
WideString s2 = "res:\/\/ieframe.dll\/syntax.htm#http:\/\/\/cgi-bin\/kitcadi3_rXopen.cgi";
WideString s3 = "http:\/\/\/cgi-bin\/kitcadi3_kp2.cgi";
WideString s4 = "http:\/\/www.kitchenpages.com\/cgi-bin\/kitcadi3_rXopen.cgi";
bool load = false;
if(bstrUrl == s1){ Cancel=TRUE; }
if(bstrUrl == s2){ Cancel=TRUE; load=true;}
if(bstrUrl == s3){ Cancel=TRUE; load=true;}
if(bstrUrl == s4){ Cancel=TRUE; load=true;}
//ShowMessage(bstrUrl);
if(load==true){
if( OpenDialog1->Execute() ){
RichEdit1->Lines->LoadFromFile( OpenDialog1->FileName );
//shorten the loaded file if its HTML
AnsiString textareastart = "<textarea name=\"data\" id=\"content\" rows=\"40\" cols=\"80\">";
AnsiString textareaend = "<\/textarea>";
AnsiString xURL = RichEdit1->Lines->Text;
if( AnsiString(xURL).AnsiPos(textareastart) != 0){
RichEdit1->Lines->Text = String(xURL).SubString((1 + AnsiString(xURL).AnsiPos(textareastart)),String(xURL).Length());
}
AnsiString xURLa = RichEdit1->Lines->Text;
if( AnsiString(xURLa).AnsiPos(textareaend) != 0){
RichEdit1->Lines->Text = String(xURLa).SubString(0,(AnsiString(xURLa).AnsiPos(textareaend))-1);
}
int Kloop = 0; bool Kisok = true;
do {
RichEdit1->SelStart = Kloop;
RichEdit1->SelLength = 1;
if(RichEdit1->SelText=="\\"){ RichEdit1->SelText = "\\\\"; Kloop=Kloop+3;}
if(RichEdit1->SelText=="\r\r"){ RichEdit1->SelText = ""; Kloop=Kloop+1;}
if(RichEdit1->SelText=="\r"){ RichEdit1->SelText = "[!EOL!]"; Kloop=Kloop+7;}
if(RichEdit1->SelText=="\n"){ RichEdit1->SelText = "[!EOL!]"; Kloop=Kloop+7;}
if(RichEdit1->SelText=="\r\n"){ RichEdit1->SelText = "[!EOL!]"; Kloop=Kloop+7;}
Kloop++;
if(Kloop <= RichEdit1->Text.Length()){Kisok = true;}else{Kisok = false;}
}while(Kisok);
Kloop = 0; Kisok = true;
do {
RichEdit1->SelStart = Kloop;
RichEdit1->SelLength = 1;
if(RichEdit1->SelText=="\t"){ RichEdit1->SelText = ""; }
if(RichEdit1->SelText=="\r"){ RichEdit1->SelText = ""; }
if(RichEdit1->SelText=="\n"){ RichEdit1->SelText = ""; }
if(RichEdit1->SelText=="\r\n"){ RichEdit1->SelText = ""; }
Kloop++;
if(Kloop <= RichEdit1->Text.Length()){Kisok = true;}else{Kisok = false;}
}while(Kisok);
RichEdit1->WantReturns=false;
//var kp2loaddata = '#KitCAD-i3-KGC-2.27.19.66 _[!EOL!][KitCAD2][!EOL!]Objects=1[!EOL!]File=new_drawing.kp2[!EOL!]Jobumber=[!EOL!]Clientame=0[!EOL!]EstPrice=0.00[!EOL!]Comment= [!EOL!][0][!EOL!]name=AKGraphicControl1[!EOL!]File=C:\\Program Files (x86)\\Kitchen\\Objects\\BC2di.kpd[!EOL!]Top=78[!EOL!]Left=337[!EOL!]Width=1000[!EOL!]Depth=600[!EOL!]otation=471[!EOL!]epeats=1[!EOL!]Height=0[!EOL!]HeightFrom=0[!EOL!]xdTop=68[!EOL!]xdLeft=68[!EOL!]';
//var kp2loaddata
WideString jscommand = "var kp2loaddata = '" + RichEdit1->Lines->Text.Trim() + "';";
RichEdit1->Lines->Text = jscommand;
// ShowMessage(jscommand);
jscommand = RichEdit1->Lines->Text;
IHTMLDocument2 *Doc = NULL;
IHTMLWindow2 *topwindow;
if(SUCCEEDED(WebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&Doc))) {
HRESULT hr = Doc->get_parentWindow(&topwindow);
if (SUCCEEDED(hr)) {
VARIANT v;
VariantInit(&v);
topwindow->execScript(jscommand.c_bstr(),NULL,&v);
VariantClear(&v);
topwindow->Release();
}
Doc->Release();
}
//try{ ChromeBrowserLoadkp2filept2(); }catch(e){}
WideString jscommand2 = "try{ ChromeBrowserLoadkp2filept2(); }catch(e){}";
IHTMLDocument2 *Doc2 = NULL;
IHTMLWindow2 *topwindow2;
if(SUCCEEDED(WebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&Doc2))) {
HRESULT hr = Doc->get_parentWindow(&topwindow2);
if (SUCCEEDED(hr)) {
VARIANT v2;
VariantInit(&v2);
topwindow2->execScript(jscommand2.c_bstr(),NULL,&v2);
VariantClear(&v2);
topwindow2->Release();
}
Doc2->Release();
}
//return to previous state
RichEdit1->WantReturns=true;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
//escape the file path to exe
/*
RichEdit1->Lines->Text = ExtractFilePath( Application->ExeName );
int Kloop = 0; bool Kisok = true;
do {
RichEdit1->SelStart = Kloop;
RichEdit1->SelLength = 1;
if(RichEdit1->SelText=="\\"){ RichEdit1->SelText = "/"; Kloop++;}
if(RichEdit1->SelText=="\r"){ RichEdit1->SelText = ""; }
if(RichEdit1->SelText=="\n"){ RichEdit1->SelText = ""; }
if(RichEdit1->SelText==" "){ RichEdit1->SelText = "%20"; }
Kloop++;
if(Kloop <= RichEdit1->Text.Length()){Kisok = true;}else{Kisok = false;}
}while(Kisok);
AnsiString EscapedFilePath = "file:///"+RichEdit1->Lines->Text;
//WideString jscommand = "ChromeBrowser='guiclient.exe';var msieS=document.createElement('script');msieS.setAttribute('type','text\/javascript');msieS.setAttribute('src','" + EscapedFilePath + "msie.js');document.body.appendChild(msieS);";
*/
WideString jscommand = "ChromeBrowser='guiclient.exe';var msieS=document.createElement('script');msieS.setAttribute('type','text\/javascript');msieS.setAttribute('src','msie.js');document.body.appendChild(msieS);";
IHTMLDocument2 *Doc = NULL;
IHTMLWindow2 *topwindow;
if(SUCCEEDED(WebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&Doc))) {
HRESULT hr = Doc->get_parentWindow(&topwindow);
if (SUCCEEDED(hr)) {
VARIANT v;
VariantInit(&v);
topwindow->execScript(jscommand.c_bstr(),NULL,&v);
VariantClear(&v);
topwindow->Release();
}
Doc->Release();
}
Timer1->Enabled = false;
}
//---------------------------------------------------------------------------
MainUnit1.dfm
object Form1: TForm1
Left = 0
Top = 0
Caption = 'KitCAD i3 KGC rX'
ClientHeight = 562
ClientWidth = 984
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Icon.Data = {
0000010001002020100000000000E80200001600000028000000200000004000
0000010004000000000080020000000000000000000000000000000000000000
0000000080000080000000808000800000008000800080800000C0C0C0008080
80000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000
0000000000000000000000000000000000000007000000000000000000000000
0000008707000000000000000000000000007707070000000000007700000000
0003770707000000000007770000000000887707070000000700737000000000
0778870708700700007738077700000007F737070870770770737077F0070000
0777777808707F3777370770000000000077F77808707F87F0707F0FF7880007
7000777807808F7F870F0078337707777777F77807883FF330007813777F0887
7777FF7008838838003333777F7F000887777880888888BBB338877700077880
000008808333BBBB33BB00007777788888833833333BBBBBB00077777700F777
77777883333BBBBBB3333887000070000007777BBBBBBBBBB000000000000077
7700077BBBBBFBBBBBB00777770007777770777BBBBBBBBFF33B7FFF77700077
8007777BBB3BBBBBBFF33877000000000078777877F3BB3BB77FF33387000000
7837778877703BF33F777000783700008877073F8000377088F7777000070003
F780038780700370038F777000000000700088FF807707770038FF7770700000
000837FF7070000007F387000000000000037F77807000000070337077000000
0000077770700000000008870000000000000777707000000000777700000000
000000077070000000000070000000000000000000000000000000000000FFFF
FFFFFFEFFFFFFFCBFFFFFF2BFFCFFE2BFF8FFC2BFB1FF829BC23F8292446F809
009FFC090120E70902C08008070080180C00E010000E1F9000F0000007030000
000F7E0007FFC380018381000001C600000FFC000003F0010070F087101EE185
981FF7048C05FE05F83FFE05FD13FF85FF8FFF85FF0FFFE5FFDFFFFFFFFF}
OldCreateOrder = False
Position = poDesktopCenter
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object WebBrowser1: TWebBrowser
Left = 0
Top = 0
Width = 984
Height = 562
Align = alClient
TabOrder = 1
OnBeforeNavigate2 = WebBrowser1BeforeNavigate2
OnNewWindow3 = WebBrowser1NewWindow3
ExplicitLeft = 472
ExplicitTop = 288
ExplicitWidth = 300
ExplicitHeight = 150
ControlData = {
4C000000B3650000163A00000000000000000000000000000000000000000000
000000004C000000000000000000000001000000E0D057007335CF11AE690800
2B2E126208000000000000004C0000000114020000000000C000000000000046
8000000000000000000000000000000000000000000000000000000000000000
00000000000000000100000000000000000000000000000000000000}
end
object RichEdit1: TRichEdit
Left = 16
Top = 144
Width = 233
Height = 297
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Lines.Strings = (
'RichEdit1')
ParentFont = False
PlainText = True
TabOrder = 0
Visible = False
WordWrap = False
end
object OpenDialog1: TOpenDialog
DefaultExt = '*.kp2'
FileName = 'untitled'
Filter =
'KitCAD files|*.kp2|KitCAD files|*.kpd;*.kp2;*.kp3|HTML files|*.h' +
'tml;*.htm|Text files|*.txt'
Left = 24
Top = 96
end
object SaveDialog1: TSaveDialog
DefaultExt = '*.kp2'
FileName = 'untitled'
Filter =
'KitCAD files|*.kp2|KitCAD files|*.kpd;*.kp2;*.kp3|HTML files|*.h' +
'tml;*.htm|Text files|*.txt'
Left = 80
Top = 96
end
object Timer1: TTimer
Interval = 6000
OnTimer = Timer1Timer
Left = 136
Top = 96
end
end
Copyright 2015-2018, all rights reserved. License.