LiFan
2025-04-24 9b3b2eb20b09e13da837a28f16e552ba70a090c4
jrj/project/printview/Template.Print.ViewEx.cpp
@@ -1,13 +1,31 @@
#include <guiddef.h>
#include <exdisp.h>      // Defines of stuff like IWebBrowser2. This is an include file with Visual C 6 and above
#include <mshtml.h>      // Defines of stuff like IHTMLDocument2. This is an include file with Visual C 6 and above
#include <mshtmhst.h>   // Defines of stuff like IDocHostUIHandler. This is an include file with Visual C 6 and above
#include <Shlwapi.h>
#include <Windows.h>
#include <comutil.h>
#undef _XWIN
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xhtml.hpp>
#include <wobject/xutil.hpp>
#include "vbusiness/vframe/maint.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
#include <xcontrol/xcell.hpp>
#include <xcontrol/xexcel.hpp>
#include <xcontrol/xhtml.hpp>
#include <win32/xfile.hpp>
using xml = KXMLDOMDocument;
#if 0
namespace _excel for ole "Excel.Application,{00020813-0000-0000-C000-000000000046}";
namespace _mshtml for ole "MSHtml,{3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}";
@@ -22,46 +40,15 @@
   void SaveToFile(xstring filename) alias "?SaveToFile@CExcelApplication@@QAEXQA_W@Z";
   void Quit() alias "?Quit@CExcelApplication@@QAEXXZ";
};
struct MYOPENFILENAMEW
{
   unsigned int   lStructSize;
   unsigned int   hwndOwner;
   unsigned int   hInstance;
   xstring              lpstrFilter;
   xstring             lpstrCustomFilter;
   unsigned int   nMaxCustFilter;
   unsigned int        nFilterIndex;
   xstring                 lpstrFile;
   unsigned int        nMaxFile;
   xstring                 lpstrFileTitle;
   unsigned int        nMaxFileTitle;
   xstring      lpstrInitialDir;
   xstring               lpstrTitle;
   unsigned int       Flags;
   unsigned short   nFileOffset;
   unsigned short   nFileExtension;
   xstring      lpstrDefExt;
   unsigned int   lCustData;
   unsigned int    lpfnHook;
   xstring      lpTemplateName;
   //_WIN32_WINNT >= 0x0500
   unsigned int       pvReserved;
   unsigned int        dwReserved;
   unsigned int        FlagsEx;
   // (_WIN32_WINNT >= 0x0500)
};
#endif
   
class  __declspec(dllexport) TemplatePrintViewEx : public xframe
DeclWinObject_(TemplatePrintViewEx, xframe)
{   
   CreateWinObject_(TemplatePrintViewEx, xframe)
public:
   xole ole_print;
   xhtml ole_print;
   xcell cell;
   xstring m_SupplierName;
   xstring m_EntityName;
   xstring m_EntityID;
   xstring m_EntityNo;
@@ -70,7 +57,6 @@
   bool updated;
   xstring   htmlStr;
   cexcel   excel;
   bool       editing;
   xstring  billName ;
@@ -82,49 +68,24 @@
   //bool showgrid;
   bool PaperPrint;
#if 0
   cexcel   excel;
   static stdcall int GetModuleFileName(int hModule ,xstring lpFileName ,int nSize ) native from "kernel32.dll" alias "GetModuleFileNameW";
   static stdcall int PathRemoveFileSpec(xstring lpFileName ) native from "shlwapi.dll" alias "PathRemoveFileSpecW";
   static stdcall int DeleteFile(xstring lpFileName) native from "kernel32.dll" alias "DeleteFileW";   
   static stdcall bool GetSaveFileName(ref MYOPENFILENAMEW)native from "comdlg32.dll" alias "GetSaveFileNameW"; 
#endif
public:
   TemplatePrintViewEx(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
public:
   static TemplatePrintViewEx* CreateInstance(void* implPtr, void* hWnd)
   xstring GetMySaveFileName(xstring initFileName, xstring filter, xstring ext)
   {
      TemplatePrintViewEx* pWin = new TemplatePrintViewEx(implPtr, (HWND)hWnd);
      return pWin;
   }
   xstring GetModulePath()
   {
      xstring str =L"";
      str = str.space(255);
      GetModuleFileName(0,str,250);
      PathRemoveFileSpec(str);
      return str;
   }
   xstring GetModuleTmpPath()
   {
      xstring str =L"";
      str = str.space(255);
      GetModuleFileName(0,str,250);
      PathRemoveFileSpec(str);
      xstring tmp = str + L"\\Temp";
      xaserver::CreateDirectory(tmp);
      return tmp;
   }
   xstring GetSaveFileName(xstring initFileName, xstring filter, xstring ext)
   {
      char[]  szFileName = new char[255] ;
      char[]  szPath =  new char[255];
      szFileName[0] = 0;
      szPath[0] = 0;
      wchar_t  szFileName[255] = { 0 };
      wchar_t  szPath[255] = { 0 };
      
      if(initFileName !=L"")
      {
         int len = initFileName.length();
         char[] tmp = initFileName;
         const wchar_t* tmp = initFileName;
         for(int i=0; i<len+1;i++)
         {
            //szFileName[i] = tmp[i];
@@ -133,10 +94,11 @@
      }
      
      int    nFilterIndex = 1;
      ref MYOPENFILENAMEW ofn = new MYOPENFILENAMEW;
      ofn.lStructSize = 88;//sizeof(ofn);
      ofn.hwndOwner = 0;
      OPENFILENAMEW ofn = { 0 };
      //::ZeroMemory(&ofn,sizeof(OPENFILENAMEW))
      //ofn.lStructSize = 88;//sizeof(ofn);
      ofn.lStructSize = sizeof(ofn);
      ofn.hwndOwner = GetHWND();
      ofn.hInstance = 0;
      ofn.lpstrFilter = filter;
         //"JPEG 文件(*.jpg)\0*.jpg;*.jpeg;*.png;*.gif;*.bmp\0全部文件(*.*)\0*.*\0";
@@ -157,14 +119,13 @@
      ofn.lpTemplateName = 0;
      //debugbreak();
      if(GetSaveFileName(ofn))
      if(xfile::GetSaveFileNameW(ofn))
      {
         delete ofn;
         return szPath;
      }
      else
      {
         return "";
         return L"";
      }
   }
         
@@ -177,22 +138,21 @@
         if(m_EntityName==L"SaleOrder") pre=L"PI";
         if(m_EntityName==L"GDN3")pre=L"INV";
      }
      xstring file1 =  GetSaveFileName(pre+m_EntityNo+L".xlsx",
         "Excel1文件(*.xlsx)\0*.xlsx;*.xls\0Excel97文件(*.xls)\0*.xls\0PDF文件(*.pdf)\0*.pdf\0",
         "xlsx");
      if (m_EntityName == L"VATNotify")m_EntityNo = m_EntityNo + m_SupplierName;
      xstring file1 =  GetMySaveFileName(pre+m_EntityNo+L".xlsx",
         L"Excel1文件(*.xlsx)\0*.xlsx;*.xls\0Excel97文件(*.xls)\0*.xls\0PDF文件(*.pdf)\0*.pdf\0",
         L"xlsx");
      if(file1 ==L"") return 1;
      
      if(win32::PathFileExists(file1))
      if(PathFileExists(file1))
      {
         int res = win32::MessageBox(this.GetHWND(), L"文件已经存在,是否覆盖?",L"提示",4);
         int res = MessageBox(GetHWND(), L"文件已经存在,是否覆盖?",L"提示",4);
         if(res != 6) return 1;
      }
      
      trace(L"\r\n link excel");
      excel = new cexcel;
      int hexcel = cexcel::CreateInstance();
      excel.setNativePointer(hexcel);
      if(hexcel == 0)
      xexcel excel;
      if(!excel.GetNativePtr())
      {
         alert(L"不能连接Excel");
         return 1;
@@ -200,64 +160,62 @@
      xstring gid =  publiccode::GetGuid();
      xstring filename= pre+m_EntityNo+L"_.htm";
      xutil::SaveToFile(GetModuleTmpPath() + L"\\"+ filename, htmlStr,L"",L"",L"");
      xutil::SaveToFile(xutil::GetModuleTmpPath() + L"\\"+ filename, htmlStr,NULL,NULL);
      trace(L"\r\n excel to open");
      excel .OpenDocument(GetModuleTmpPath() + L"\\"+ filename);
      excel .OpenDocument(xutil::GetModuleTmpPath() + L"\\"+ filename);
      trace(L"\r\n trans shape");
      //excel .put_Visible(true);
      excel.TransShape();
      trace(L"\r\n save to tmp excel file");
      if(file1.find(L".xls"))
      {
         if(win32::PathFileExists(GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xls"))
            DeleteFile(GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xls");
         excel.SaveToFile(GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xls");
         if(PathFileExists(xutil::GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xls"))
            DeleteFile(xutil::GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xls");
         excel.SaveToFile(xutil::GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xls");
         //alert(GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xls");
      }
      else 
      {
         if(win32::PathFileExists(GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xlsx"))
            DeleteFile(GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xlsx");
         excel.SaveToFile(GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xlsx");
         if(PathFileExists(xutil::GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xlsx"))
            DeleteFile(xutil::GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xlsx");
         excel.SaveToFile(xutil::GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xlsx");
      }
      
      trace(L"\r\n save to excel file");
      if(win32::PathFileExists(file1)) //GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xlsx"))
      if(PathFileExists(file1)) //GetModuleTmpPath() + L"\\"+ pre+m_EntityNo+L"_.xlsx"))
         DeleteFile(file1);
      excel.SaveToFile(file1);
      
      excel.Quit();
      excel.Release(excel.ptr_native_);
      //excel.Release(excel.ptr_native_);
      return 1;
   }
   
   int OntoExcel() //תΪExcel
   {
      excel = new cexcel;
      excel.setNativePointer(cexcel::CreateInstance());
      xexcel  excel;
      xstring gid =  publiccode::GetGuid();
      xstring pre = m_EntityName;
      if(m_EntityName==L"SaleOrder") pre=L"PI";
      if(m_EntityName==L"GDN3")pre=L"INV";
      xstring filename= pre+m_EntityNo+L".htm";
      xstring filenameex= pre+m_EntityNo+L".xlsx";
      xutil::SaveToFile(GetModuleTmpPath() + L"\\"+ filename, htmlStr,L"",L"",L"");
      excel .OpenDocument(GetModuleTmpPath() + L"\\"+ filename);
      xutil::SaveToFile(xutil::GetModuleTmpPath() + L"\\"+ filename, htmlStr,NULL,NULL);
      excel .OpenDocument(xutil::GetModuleTmpPath() + L"\\"+ filename);
      //excel.put_Visible(true);
      excel.TransShape();
      if(win32::PathFileExists(GetModuleTmpPath() + L"\\"+ filenameex))
         DeleteFile(GetModuleTmpPath() + L"\\"+ filenameex);
      excel.SaveToFile(GetModuleTmpPath() + L"\\"+ filenameex);
      if(PathFileExists(xutil::GetModuleTmpPath() + L"\\"+ filenameex))
         DeleteFile(xutil::GetModuleTmpPath() + L"\\"+ filenameex);
      excel.SaveToFile(xutil::GetModuleTmpPath() + L"\\"+ filenameex);
      excel.put_Visible(true);
      excel.Release(excel.ptr_native_);
      //excel.Release(excel.ptr_native_);
      return 1;
   }
   xstring getfilePath()
   {
      xstring path=GetModulePath()+L"\\resource\\image";
      xstring path= xutil::GetModulePath()+L"\\resource\\image";
      xstring filename=L"contract.jpg";
      filename=L"sign.png";
      filename=L"jrj_maersk.png";
@@ -281,7 +239,7 @@
      xstring right=L"";
      xstring tag=L"";
      
      len = L"[$element:".length();
      len = ((xstring)L"[$element:").length();
      while(true)
      {
         pos = str.find(L"[$element:");
@@ -305,7 +263,7 @@
      
      str = pre + str;
      pre = L"";
      len = L"[/$element:".length();
      len = ((xstring)L"[/$element:").length();
      while(true)
      {
         pos = str.find(L"[/$element:");
@@ -336,16 +294,16 @@
      str = replaceInnerElement(str);
      return str;
   }
#if 0
   xstring DownLoadSKUNoPic(xstring SKUNo,xstring CustomerID=L"",xstring CustomerItemNo=L"")
   {
      
      if(SKUNo.length()>20) return DownLoadPaperPic(SKUNo);
      
      xml x = new xml;
      x.setNativePointer(xml::CreateInstance());
      xaserverarg arg = new xaserverarg;
      arg.setNativePointer(arg.CreateInstance());
      xml x;
      xaserverarg arg;
      arg.AddArg(L"SKUNo",SKUNo);
      
      xstring src =L"/sale/data/ProductLibrary3/pref/picture/imagelistSKUNo";
@@ -356,49 +314,47 @@
         src =L"/sale/data/ProductLibrary3/pref/picture/customer/imagelistSKUNo";
      }
      //trace(L"SKUNo=L"+SKUNo);//要有展示图片查询条件内必定要skuno
      if(url::get(src,arg.GetString(),x)!=1)
      if(xurl::get(src,arg.GetString(),x)!=1)
      {
         trace(L"error for download skuno pic!");
         return "";
         return L"";
      }
      
      xstring spath = L"";
      xstring path =GetModuleTmpPath();
      xstring path = xutil::GetModuleTmpPath();
      xstring ext = L"jpg";
      if(x.GetXmlDoc().selectSingleNode(L"//FileExt[1]"))
      if(x.selectSingleNode(L"//FileExt[1]"))
      {
         ext = x.GetXmlDoc().selectSingleNode(L"//FileExt[1]").text;
         ext = x.selectSingleNode(L"//FileExt[1]").text();
      }else if(CustomerID !=L"")
      {
         src =L"/sale/data/ProductLibrary3/pref/picture/imagelistSKUNo";
         if(url::get(src,arg.GetString(),x)!=1)
         if(xurl::get(src,arg.GetString(),x)!=1)
         {
            trace(L"error for download skuno pic!");
            return "";
            return L"";
         }
         if(x.GetXmlDoc().selectSingleNode(L"//FileExt[1]"))
            ext = x.GetXmlDoc().selectSingleNode(L"//FileExt[1]").text;
         if(x.selectSingleNode(L"//FileExt[1]"))
            ext = x.selectSingleNode(L"//FileExt[1]").text();
      }
         
      xstring filename = SKUNo + L"." + ext;
      if(x.GetXmlDoc().selectSingleNode(L"//PicPath[1]"))
         spath = x.GetXmlDoc().selectSingleNode(L"//PicPath[1]").text;
      if(x.selectSingleNode(L"//PicPath[1]"))
         spath = x.selectSingleNode(L"//PicPath[1]").text();
      if(spath != L"")
      {
          xaserver::DownLoadFile(GetServerUrl(),spath,L"",path+L"/"+filename);
      }
      return "file://"+ path+L"/"+filename;
      return (xstring)L"file://"+ path+L"/"+filename;
   }
#endif
   xstring DownLoadSKUNoPic(xstring SKUNo,xstring CustomerID=L"",xstring CustomerItemNo=L"")
   {
      
      if(SKUNo.length()>20) return DownLoadPaperPic(SKUNo);
      
      xml x = new xml;
      x.setNativePointer(xml::CreateInstance());
      xaserverarg arg = new xaserverarg;
      arg.setNativePointer(arg.CreateInstance());
      xml x;
      xaserverarg arg;
      arg.AddArg(L"SKUNo",SKUNo);
      
      xstring src =L"/sale/data/ProductLibrary3/pref/picture/imagelistSKUNo";
@@ -409,99 +365,96 @@
         src =L"/sale/data/ProductLibrary3/pref/picture/customer/imagelistSKUNo";
      }
      //trace(L"SKUNo=L"+SKUNo);//要有展示图片查询条件内必定要skuno
      if(url::get(src,arg.GetString(),x)!=1)
      if(xurl::get(src,arg.GetString(),x)!=1)
      {
         trace(L"error for download skuno pic!");
         return "";
         return L"";
      }
      
      xstring spath = L"";
      xstring path =GetModuleTmpPath();
      xstring path = xutil::GetModuleTmpPath();
      xstring ext = L"jpg";
      if(x.GetXmlDoc().selectSingleNode(L"//FileExt[1]"))
      if(x.selectSingleNode(L"//FileExt[1]"))
      {
         ext = x.GetXmlDoc().selectSingleNode(L"//FileExt[1]").text;
         ext = x.selectSingleNode(L"//FileExt[1]").text();
      }else if(CustomerID !=L"")
      {
         src =L"/sale/data/ProductLibrary3/pref/picture/imagelistSKUNo";
         if(url::get(src,arg.GetString(),x)!=1)
         if(xurl::get(src,arg.GetString(),x)!=1)
         {
            trace(L"error for download skuno pic!");
            return "";
            return L"";
         }
         if(x.GetXmlDoc().selectSingleNode(L"//FileExt[1]"))
            ext = x.GetXmlDoc().selectSingleNode(L"//FileExt[1]").text;
         if(x.selectSingleNode(L"//FileExt[1]"))
            ext = x.selectSingleNode(L"//FileExt[1]").text();
      }
         
      xstring filename = SKUNo + L"." + ext;
      if(x.GetXmlDoc().selectSingleNode(L"//PicPath[1]"))
         spath = x.GetXmlDoc().selectSingleNode(L"//PicPath[1]").text;
      if(x.selectSingleNode(L"//PicPath[1]"))
         spath = x.selectSingleNode(L"//PicPath[1]").text();
      if(spath != L"")
      {
          xaserver::DownLoadFile(GetServerUrl(),spath,L"",path+L"/"+filename);
      }
      return "file://"+ path+L"/"+filename;
      return L"file://"+ path+L"/"+filename;
   }
      
   xstring GetImageUrl(xstring id)
   {
      xml xp=new xml;
      xp.setNativePointer(xml::CreateInstance());
      xaserverarg arg_pic=new xaserverarg;
      arg_pic.setNativePointer(arg_pic.CreateInstance());
      xml xp;
      xaserverarg arg_pic;
      arg_pic.AddArg(L"id",id);
      
      xstring res = L"/sale/data/productlibrary3/image/url";
      if(url::get(res,arg_pic.GetString(),xp)!=1)
      if(xurl::get(res,arg_pic.GetString(),xp)!=1)
      {
         xp.GetXml();
         xp.xml();
         return 1;
      }else
      {
         xstring path = xp.GetXmlDoc().text;
         xstring path = xp.text();
         if(path !=L"") return path;
      }
      
      return "/business/products/chanpin/"+id.left(2)+L"/"+ id+L".jpg";
      return L"/business/products/chanpin/"+id.left(2)+L"/"+ id+L".jpg";
   }
   
   xstring DownLoadPaperPic(xstring guid)
   {
      xstring path =GetModuleTmpPath();
      xstring path = xutil::GetModuleTmpPath();
      xstring ext = L"jpg";
      xstring filename = guid + L"." + ext;
      xstring spath = GetImageUrl(guid);
      //alert(spath);
      xaserver::DownLoadFile(GetServerUrl(),spath,L"",path+L"/"+filename);
      return "file://"+ path+L"/"+filename;
      return (xstring)L"file://"+ path+L"/"+filename;
   }
         
   xstring DownLoadPaperPic1(xstring guid)
   {
      xstring path =GetModuleTmpPath();
      xstring path = xutil::GetModuleTmpPath();
      xstring ext = L"jpg";
      xstring filename = guid + L"." + ext;
      xstring str = guid.mid(0,2);
      xstring spath = L"/business/products/chanpin/"+str+L"/"+guid+L".jpg";
      xaserver::DownLoadFile(GetServerUrl(),spath,L"",path+L"/"+filename);
      return "file://"+ path+L"/"+filename;
      return (xstring)L"file://"+ path+L"/"+filename;
   }
   
   xstring DownLoadUrlPic(xstring src)
   {
      xstring guid =  publiccode::GetGuid();
      xstring path =GetModuleTmpPath();
      xstring path = xutil::GetModuleTmpPath();
      xstring ext = L"jpg";
      xstring filename = guid + L"." + ext;
      xstring spath = src;
      xaserver::DownLoadFile(GetServerUrl(),spath,L"",path+L"/"+filename);
      return "file://"+ path+L"/"+filename;
      return (xstring)L"file://"+ path+L"/"+filename;
   }
   
   int OnHtml(xaserverarg arg)
   {
      int hCursor = xutil::SetCursorWait();
      HCURSOR hCursor = xutil::SetCursorWait();
      xstring sEntityName = arg.GetArgString(L"EntityName");
      xstring sEntityID = arg.GetArgString(L"EntityID");
@@ -512,14 +465,13 @@
         dataUrl = L"/sale/data/"+sEntityName+ L"/"+ dataUrl;
      if(!m_dataset)
      {
         xml x0 = new xml;
         x0.setNativePointer(xml::CreateInstance());
         if (url::get(dataUrl,arg.GetString(),x0) != 1)
         xml x0 ;
         if (xurl::get(dataUrl,arg.GetString(),x0) != 1)
         {
            alert(L"数据集出错了!");
            return 0;
         }
         trace(x0.GetXml());
         trace(x0.xml());
         m_dataset = x0;
      }
         
@@ -528,23 +480,22 @@
      arg.AddArg(L"sPath",sPath);
      m_spath = sPath;
      
      xml xsl = new xml;
      xsl.setNativePointer(xml::CreateInstance());
      if (url::get(L"/sale/data/SysPrintTemplate/getxsl",arg.GetString(),xsl) != 1)
      xml xsl;
      if (xurl::get(L"/sale/data/SysPrintTemplate/getxsl", arg.GetString(), xsl) != 1)
      {
         alert(L"数据模板错误!");
         return 0;
      }
      
      xstring xslStr = xsl.GetXml();
      xstring xslStr = xsl.xml();
      
      xslStr = adjustXsl(xslStr,sPath);
      xsl.LoadXml(xslStr);
      xsl.loadXML(xslStr);
      
      //trace(m_dataset.GetXml());
      trace(L"\r\n--------\r\n"+xslStr);
      
      m_strHtml = m_dataset.GetXmlDoc().transformNode(xsl.GetXmlDoc());
      m_strHtml = m_dataset.transformNode(xsl);
      xstring aspace = m_strHtml.replace(L"[空]",L"&nbsp;",0);
      aspace = aspace.replace(L"[line]",L"<br/>",0);
      xstring scontent = aspace.replace(L"<?xml version=\"1.0\"?>",L"",0);
@@ -555,20 +506,20 @@
      int pos = tail.find(L"src=\"item-picture:");
      while(pos > 0)
      {
         int spos = pos+L"src=\"item-picture:".length();
         int spos = pos+((xstring)L"src=\"item-picture:").length();
         int pos1 = tail.find(L"\"",spos+1);
         xstring skuno = tail.mid(spos,pos1 - spos ).trim();
         xstring CustomerID=L"";
         xstring CustomerItemNo=L"";
         if(skuno.find(L",L")>0)
         if(skuno.find(L",")>0)
         {
            CustomerID = skuno.left(skuno.find(L",L")).trim();
            skuno = skuno.mid(skuno.find(L",L")+1,256).trim();
            CustomerID = skuno.left(skuno.find(L",")).trim();
            skuno = skuno.mid(skuno.find(L",")+1,256).trim();
         }
         if(skuno.find(L",L")>0)
         if(skuno.find(L",")>0)
         {
            CustomerItemNo = skuno.left(skuno.find(L",L")).trim();
            skuno = skuno.mid(skuno.find(L",L")+1,256).trim();
            CustomerItemNo = skuno.left(skuno.find(L",")).trim();
            skuno = skuno.mid(skuno.find(L",")+1,256).trim();
         }
         xstring src =  DownLoadSKUNoPic(skuno,CustomerID,CustomerItemNo);
         head += tail.left(pos) + L"src=\"" + src;
@@ -582,7 +533,7 @@
      int position = tail.find(L"src=\"paper-picture:");
      while(position > 0)
      {
         int sposition = position+L"src=\"paper-picture:".length();
         int sposition = position+ ((xstring)L"src=\"paper-picture:").length();
         int position1 = tail.find(L"\"",sposition+1);
         xstring guid = tail.mid(sposition,position1 - sposition ).trim();
         xstring src2 =  DownLoadPaperPic(guid);
@@ -597,10 +548,10 @@
      position = tail.find(L"src=\"src-picture:");
      while(position > 0)
      {
         sposition = position+L"src=\"src-picture:".length();
         position1 = tail.find(L"\"",sposition+1);
         guid = tail.mid(sposition,position1 - sposition ).trim();
         src2 =  DownLoadUrlPic(guid);
         int sposition = position+((xstring)L"src=\"src-picture:").length();
         int position1 = tail.find(L"\"",sposition+1);
         xstring guid = tail.mid(sposition,position1 - sposition ).trim();
         xstring src2 =  DownLoadUrlPic(guid);
         head += tail.left(position) + L"src=\"" + src2;
         tail = tail.mid(position1,999999999);
         position = tail.find(L"src=\"src-picture:");
@@ -611,8 +562,7 @@
      htmlStr = scontent;   
      ole_print.LoadHtml(scontent);   
      
      xml x1 = new xml;
      x1.setNativePointer(xml ::CreateInstance());
      xml x1;
      //xstring xcontent = m_strHtml.replace(L"&nbsp;",L"[空]",0);
      xstring xcontent = m_strHtml.replace(L"[空]",L" ",0);
      int pos0 = xcontent.find(L"<xml");
@@ -622,15 +572,15 @@
         xstring str = xcontent.left(pos0)+ xcontent.mid(pos2+6,9999999);
         xcontent = str;
      }
      x1.LoadXml(xcontent);
      if(x1.GetXmlDoc())
      x1.loadXML(xcontent);
      if(x1)
      {
         /*if(!showgrid)
         {
            SendCtrlCmd(cell,L"xmFormatShowGrid");
            showgrid = true;
         }*/
         cell.LoadTemplate(x1.GetXmlDoc());
         cell.LoadTemplate(x1);
         cell.Redraw();
      }
@@ -641,40 +591,61 @@
      
   int updateHtml()
   {
      _mshtml::IHTMLDocument3 doc = ole_print.GetHtmlDocument();
      _mshtml::IHTMLElementCollection rows = doc.getElementsByTagName(L"tr");
      _mshtml::IHTMLElementCollection rows2 = doc.getElementsByTagName(L"td");
      int len = rows.length;
      int len2 = rows2.length;
      return 1;
      IHTMLDocument3* doc = (IHTMLDocument3 * )ole_print.GetHtmlDocument();
      IHTMLElementCollection* rows = NULL;
      IHTMLElementCollection* rows2 = NULL;
      doc->getElementsByTagName((BSTR)L"tr",&rows);
      doc->getElementsByTagName((BSTR)L"td",&rows2);
      long len;
      rows->get_length(&len);
      long len2;
      rows2->get_length(&len2);
      for(int i=0; i < len - 1;i++)
      {
         _mshtml::IHTMLElement e = rows.item(i,i);
         e.style.setAttribute(L"height",e.offsetHeight,0);
         e.Release();
         _variant_t var;
         IHTMLElement* e=0;
         IHTMLStyle* pstyle=0;
         long offsetHeight=0;
         rows->item((_variant_t)i, (_variant_t)i,(IDispatch**) & e);
         e->get_style(&pstyle);
         e->get_offsetHeight(&offsetHeight);
         pstyle->setAttribute((BSTR)L"height",(_variant_t)offsetHeight, 0);
         e->Release();
         pstyle->Release();
      }
      for( i=0; i < len2 - 1;i++)
      for( int i=0; i < len2 - 1;i++)
      {
         _mshtml::IHTMLElement e2 = rows2.item(i,i);
         e2.style.setAttribute(L"width",e.offsetWidth,0);
         e2.Release();
         IHTMLElement* e = 0;
         IHTMLStyle* pstyle = 0;
         long offsetWidth=0;
         rows->item((_variant_t)i, (_variant_t)i, (IDispatch**)&e);
         e->get_style(&pstyle);
         e->get_offsetHeight(&offsetWidth);
         pstyle->setAttribute((BSTR)L"width", (_variant_t)offsetWidth, 0);
         e->Release();
         pstyle->Release();
      }
      rows.Release();
      doc.release();
      htmlStr = doc.documentElement.outerHtml;
      rows->Release();
      doc->Release();
      //IHTMLElement* e = 0;
      //doc->get_documentElement(&e);
      //BSTR bstrHtml=0;
      //e->get_outerHTML(&bstrHtml);
      return 1;
   }
   
   int OnOpenDocument()
   {
      if(GetParam())
      if(GetWinParam())
      {
         xaserverarg arg = new xaserverarg;
         arg.setNativePointer(GetParam());
         int p = arg.ptr_native_;
         xaserverarg arg=GetArg();
         arg.AddArg(L"action",L"open");
         arg.AddArg(L"DocumentID",L"");
         arg.AddArg(L"ok",L"");
         openUrl(L"/sale/view/view.dlg/xpage/Template/PrintDialog", p);
         openUrl(L"/sale/view/view.dlg/xpage/Template/PrintDialog", &arg);
         xstring ret = arg.GetArgString(L"return");
         xstring action = arg.GetArgString(L"action");
         if (ret ==L"ok") 
@@ -682,24 +653,24 @@
            if(action ==L"open")
            {
               m_DocumentID = arg.GetArgString(L"DocumentID");
               xml x = new xml;
               x.setNativePointer(xml::CreateInstance());
               xml x;
               xstring prestr = m_DocumentID.mid(0,2);
               prestr = prestr.upper();
               prestr = prestr.toUpper();
               xaserver::LoadUrl(GetServerUrl(),L"/business/data/bill/"+prestr+L"/"+ m_DocumentID+L".jpg",L"",x);
               if(x.GetXml()!=L"")
               if((xstring)x.xml()!=L"")
               {
                  if(x.GetXmlDoc())
                  if(x)
                  {
                     /*if(!showgrid)
                     {
                        SendCtrlCmd(cell,L"xmFormatShowGrid");
                        showgrid = true;
                     }*/
                     cell.LoadTemplate(x.GetXmlDoc());
                     cell.LoadTemplate(x);
                     cell.Redraw();
                  }
                  ole_print.LoadHtml(x.GetXml());
                  ole_print.LoadHtml(x.xml());
               }else
               {
                  ole_print.LoadHtml(L"<html><body>未找到对应的文档</body></html>");
@@ -709,13 +680,14 @@
            else
            {
               xstring templateName = arg.GetArgString(L"template-name");
               win32::SetWindowText(GetHWND(),templateName);
               SetWindowText(GetHWND(),templateName);
               billName = templateName;
               billPre = arg.GetArgString(L"template-pre");
               billID = arg.GetArgString(L"template-guid");
               m_EntityID  = arg.GetArgString(L"EntityID");
               m_EntityNo = arg.GetArgString(L"EntityNo");
               m_EntityName  = arg.GetArgString(L"EntityName");
               m_SupplierName = arg.GetArgString(L"SupplierName");
               m_DocumentID = L"";
            
               OnHtml(arg);
@@ -728,13 +700,11 @@
      
   int OnPrintDialog()
   {      
      if(GetParam())
      if(GetWinParam())
      {
         xaserverarg arg = new xaserverarg;
         arg.setNativePointer(GetParam());
         int p = arg.ptr_native_;
         xaserverarg arg=GetArg();
         arg.AddArg(L"ok",L"");
         openUrl(L"/sale/view/view.dlg/xpage/Template/PrintDialog", p);
         openUrl(L"/sale/view/view.dlg/xpage/Template/PrintDialog", &arg);
         xstring ret = arg.GetArgString(L"return");
         xstring action = arg.GetArgString(L"action");
         if (ret ==L"ok") 
@@ -743,58 +713,59 @@
            if(action ==L"open")
            {
               m_DocumentID = arg.GetArgString(L"DocumentID");
               xml x = new xml;
               x.setNativePointer(xml::CreateInstance());
               xml x;
               xstring prestr = m_DocumentID.mid(0,2);
               prestr = prestr.upper();
               prestr = prestr.toUpper();
               xaserver::LoadUrl(GetServerUrl(),L"/business/data/bill/"+prestr+L"/"+ m_DocumentID+L".jpg",L"",x);
               if(x.GetXml()!=L"")
               if((xstring)x.xml()!=L"")
               {
                  
                  xstring content = L"";
                  if(x.GetXmlDoc().documentElement.tagName==L"Bill")
                  if((xstring)x.documentElement().tagName() == L"Bill")
                  {
                     content = x.GetXmlDoc().documentElement.text;
                     content = x.documentElement().text();
                     content = content.replace(L"[空]",L"&nbsp",0);
                     ole_print.LoadHtml(content);
                     ole_print.LoadHtml((LPTSTR)content.c_str());
                  }else
                  {
                     if(x.GetXmlDoc())
                     if(x)
                     {
                        /*if(!showgrid)
                        {
                           SendCtrlCmd(cell,L"xmFormatShowGrid");
                           showgrid = true;
                        }*/
                        xml x1 = new xml;
                        x1.setNativePointer(xml::CreateInstance());
                        xstring content1 = x.GetXml();
                        xml x1 ;
                        xstring content1 = x.xml();
                        content1 = content1.replace(L"[空]",L" ",0);
                        //trace(content1);
                        x1.LoadXml(content1);
                        cell.LoadTemplate(x1.GetXmlDoc());
                        x1.loadXML(content1);
                        cell.LoadTemplate(x1);
                        cell.Redraw();
                     }
                     content = x.GetXml();
                     content = x.xml();
                     content = content.replace(L"[空]",L"&nbsp",0);
                     ole_print.LoadHtml(content);
                  }
               }else
               {
                  ole_print.LoadHtml(L"<html><body>未找到对应的文档</body></html>");
                  ole_print.LoadHtml((LPTSTR)L"<html><body>未找到对应的文档</body></html>");
                  //cell.LoadHtml(L"<html><body>未找到对应的文档</body></html>");
               }
            }
            else
            {
               xstring templateName = arg.GetArgString(L"template-name");
               win32::SetWindowText(GetHWND(),templateName);
               SetWindowText(GetHWND(),templateName);
               billName = templateName;
               billPre = arg.GetArgString(L"template-pre");
               billID = arg.GetArgString(L"template-guid");
               m_EntityID  = arg.GetArgString(L"EntityID");
               m_EntityNo = arg.GetArgString(L"EntityNo");
               m_EntityName  = arg.GetArgString(L"EntityName");
               m_SupplierName = arg.GetArgString(L"SupplierName");
               m_DocumentID = L"";
               OnHtml(arg);
            }
@@ -817,22 +788,22 @@
      xstring tools=L"<hbox class=''>";
      if(agent)
      {
         nlist = agent.SelectNodes(L".//xtoolbutton");
         nlen = nlist.length;
         nlist = agent.selectNodes(L".//xtoolbutton");
         nlen = nlist.length();
         for(index=0;index<nlen;index++)
         {
            ele  =  nlist.item(index);
            xstring name = ele.selectSingleNode(L"@name").text;
            xstring label  =  ele.selectSingleNode(L"@caption").text;
            xstring name = ele.selectSingleNode(L"@name").text();
            xstring label  =  ele.selectSingleNode(L"@caption").text();
            xstring image;
            xstring src = L"";
            if(ele.selectSingleNode(L"@image"))
               image = ele.selectSingleNode(L"@image").text;
               image = ele.selectSingleNode(L"@image").text();
            else
               image = L"0 22";
            
            if(ele.selectSingleNode(L"@src"))
               src = ele.selectSingleNode(L"@src").text;
               src = ele.selectSingleNode(L"@src").text();
            
            int strLen = label.length();
            int width = 60 + (strLen - 2) * 10;
@@ -850,7 +821,7 @@
   }
   //焦点激活处理函数
   int OnSetFocus(ref TNotifyEvent evt,int p)
   int OnSetFocus(TEvent * evt,int p)
   {
      //重置工具条
      SetAgent();
@@ -887,17 +858,18 @@
   }
   int PrintPaper() //打印
   {
      //ole_print.GetHtmlDocument();
#ifdef shouldFinish   //ole_print.GetHtmlDocument();
      //return 1;
      _mshtml::IHTMLDocument3 doc = ole_print.GetHtmlDocument();
      _mshtml::IHTMLElementCollection rows = doc.getElementsByTagName(L"tr");
      IHTMLDocument3* doc = (IHTMLDocument3 * )ole_print.GetHtmlDocument();
      IHTMLElementCollection* rows = doc->getElementsByTagName(L"tr");
      
      int len = rows.length;
      long len;
      rows->get_length(&len);
      for(int i=0; i < len - 1;i++)
      {
         //oleobject v = rows.item(i,i);
         _mshtml::IHTMLElement e = rows.item(i,i);
         _mshtml::IHTMLElement2 e1 = e;
         IHTMLElement* e = rows->item(i,i);
         IHTMLElement2* e1 = e;
         //e.setAttribute(L"height",e1.clientHeight,0);
         e.setAttribute(L"height",300,0);
         e.Release();
@@ -905,6 +877,7 @@
      }
      rows.Release();
      doc.Release();
#endif
      /*
      if(PaperPrint == false)
      {
@@ -955,18 +928,17 @@
      xstring guid = publiccode::GetGuid();
      
      xstring prestr = guid.mid(0,2);
      prestr = prestr.upper();
      prestr = prestr.toUpper();
      
      
      content = content.replace(L"gb2312",L"utf-16",0);
      content = content.replace(L"&nbsp",L"[空]",0);
      content = content.replace(L"&",L"",0);
      
      xml x0 = new xml;
      x0.setNativePointer(xml::CreateInstance());
      x0.LoadXml(L"<Bill/>");
      x0.GetXmlDoc().documentElement.text = content;
      content = x0.GetXml();
      xml x0 ;
      x0.loadXML(L"<Bill/>");
      x0.documentElement().settext(content);
      content = x0.xml();
      int ret= xaserver::UploadData(L"bill"+prestr, guid+L".jpg", content);
      if(ret < 0) trace(L"error upload");
@@ -979,20 +951,20 @@
      ls_xml += L"<BillName>"+ billName + L"</BillName>";
      ls_xml += L"</DocumentList>";
      
      xml x = new xml;
      x.setNativePointer(xml::CreateInstance());
      x.LoadXml(ls_xml);
      xaserverarg arg = new xaserverarg;
      arg.setNativePointer(xaserverarg::CreateInstance());
      arg.AddArg(L"content",x.GetXml());
      xml x;
      
      if(url::get(L"/sale/data/DocumentList3/bill/update", arg.GetString(),x)!=1)
      x.loadXML(ls_xml);
      xaserverarg arg;
      arg.AddArg(L"content", x.xml());
      if(xurl::get(L"/sale/data/DocumentList3/bill/update", arg.GetString(),x)!=1)
      {
         xstring error = x.GetXmlDoc().text;
         xstring error = x.text();
         alert(L"err:"+error);
         return 1;
      }
      xstring str = x.GetXmlDoc().documentElement.getAttribute(L"text");
      xstring str = x.documentElement().getAttribute(L"text");
      if(str == L"true")
      {
         alert(L"保存成功!"); 
@@ -1007,16 +979,15 @@
   
   int SendCtrlCmd(xcontrol xc, xstring cmd)
   {
      win32::SendMessage(xc.GetId(),0x401,cmd,0);
      SendMessage(xc.GetHWND(), 0x401, (WPARAM)cmd.c_str(), 0);
      return 1;
   }
   
   int OnRefreshData()
   {
      xaserverarg arg = new xaserverarg;
      arg.setNativePointer(GetParam());
      xaserverarg arg;
      xstring templateName = arg.GetArgString(L"template-name");
      win32::SetWindowText(GetHWND(),templateName);
      SetWindowText(GetHWND(),templateName);
      OnHtml(arg);
      billName = templateName;
      billPre = arg.GetArgString(L"template-pre");
@@ -1024,6 +995,7 @@
      m_EntityID  = arg.GetArgString(L"EntityID");
      m_EntityNo = arg.GetArgString(L"EntityNo");
      m_EntityName  = arg.GetArgString(L"EntityName");
      m_SupplierName = arg.GetArgString(L"SupplierName");
      m_DocumentID = L"";
      return 1;
   }
@@ -1032,7 +1004,7 @@
   {
      if(comdid==L"xmSort")
      {
         OpenWindow(L"dev:xpage[DataSort.dialog.vx]",cast(m_dataset as int));
         //OpenWindow(L"dev:xpage[DataSort.dialog.vx]",cast(m_dataset as int));
         return 1;
      }
      if(comdid==L"print:PrintImmediate") 
@@ -1068,13 +1040,12 @@
      {   
         if(updated)
         {
            int res = win32::MessageBox(this.GetHWND(), L"单据已制作,是否保存?",L"提示",4);
            int res = MessageBox(GetHWND(), L"单据已制作,是否保存?",L"提示",4);
            if(res == 6)OnCmdDispatch(L"print:AddToDocumentList");
         }
         if(GetParam())
         if(GetWinParam())
         {
            xaserverarg arg1 = new xaserverarg;
            arg1.setNativePointer(GetParam());
            xaserverarg arg1 = GetArg();
            arg1.AddArg(L"action",L"new");
            OnPrintDialog();
            arg1.AddArg(L"action",L"");
@@ -1125,38 +1096,38 @@
         ole_print.ExecWB(27,0);
         return 1;
            alert(L"xxx");
               xml x1 = new xml;
         x1.setNativePointer(xml::CreateInstance());
               xml x1 ;
         xaserver::ExecXQuery(GetServerUrl(), L"[xsl.getdevobj.xq]",L"<args/>",x1);
      }
      
      if(comdid == L"xxx") 
      {
         xml x = new xml;
         x.setNativePointer(xml::CreateInstance());
         xaserverarg arg = new xaserverarg;
         arg.setNativePointer(arg.CreateInstance());
         xml x;
         xaserverarg arg;
         arg.AddArg(L"strHtml",m_strHtml);
         if (url::get(L"/sale/data/SysPrintTemplate/WebBrowser",arg.GetString(),x) != 1)
         if (xurl::get(L"/sale/data/SysPrintTemplate/WebBrowser",arg.GetString(),x) != 1)
         {
            alert(L"数据集出错了!");
            return 0;
         }
         xstring strHtml = x.GetXml();
         xstring strHtml = x.xml();
         ole_print.LoadHtml(strHtml);      
      }
      return 0;
   }
   int OnXCommand(ref TXCommandEvent evt,int p)
   int OnXCommand(TEvent* evt,int p)
   {
      return OnCmdDispatch(evt.pStrID);
      return OnCmdDispatch(evt->xcommand.pStrID);
   }
      
   int OnAttachEvent()
   {
      AttachEvent(L"WM_XCOMMAND",OnXCommand);
      AttachEvent(L"WM_SETFOCUS",OnSetFocus);
      AttachEvent(L"WM_XCOMMAND",(FEvent)& TemplatePrintViewEx::OnXCommand);
      AttachEvent(L"WM_SETFOCUS", (FEvent)&TemplatePrintViewEx::OnSetFocus);
      //AttachEvent(L"WM_CLOSE",OnCloseOwnerWindow);
      
      return 0;
@@ -1171,11 +1142,11 @@
   {
      if(!updated) return 1;
      
      int MB_YESNOCANCEL = 3;
      int IDYES = 6;
      int IDNO = 7;
      int IDCANCEL  = 2;
      int re = win32::MessageBox(this.GetHWND(), L"单据已制作,是否保存?",L"提示:",MB_YESNOCANCEL);
      //int MB_YESNOCANCEL = 3;
      //int IDYES = 6;
      //int IDNO = 7;
      //int IDCANCEL  = 2;
      int re = MessageBox(GetHWND(), L"单据已制作,是否保存?",L"提示:",MB_YESNOCANCEL);
      if(re==IDCANCEL) return -1;
      if(re==IDNO) return 1;
      OnCmdDispatch(L"print:AddToDocumentList");
@@ -1206,10 +1177,10 @@
   int onloaded()
   {
      updated = false;
      if(GetParam())
      SetArg();
      if(GetWinParam())
      {
         xaserverarg arg = new xaserverarg;
         arg.setNativePointer(GetParam());
         xaserverarg arg= GetArg();
         xstring templateName = arg.GetArgString(L"template-name");
         if(templateName ==L"")
         {
@@ -1218,7 +1189,7 @@
            
         else
         {
            win32::SetWindowText(GetHWND(),templateName);
            SetWindowText(GetHWND(),templateName);
            OnHtml(arg);
            billName = templateName;
            billPre = arg.GetArgString(L"template-pre");
@@ -1226,11 +1197,13 @@
            m_EntityID  = arg.GetArgString(L"EntityID");
            m_EntityNo = arg.GetArgString(L"EntityNo");
            m_EntityName  = arg.GetArgString(L"EntityName");
            m_SupplierName = arg.GetArgString(L"SupplierName");
            m_DocumentID = L"";
         }
      }else
         OnPrintDialog();
      return 1;
   }
};
};
#define _XWIN