void WordLine(Word_xp::TWordDocument* WD,Word_xp::TWordFont* WF, UnicodeString Line, AnsiString Font, int height, int bold, int italic, int underline, int shadow, TColor Color = (TColor)RGB(0,0,0), Word_xp::WdParagraphAlignment Position = WdParagraphAlignment::wdAlignParagraphLeft) { WD->GetDefaultInterface()->Paragraphs->get_Last()->set_Alignment(Position); WD->Range(EmptyParam(),EmptyParam())->InsertAfter(StringToOleStr(Line)); WF->ConnectTo(WD->Sentences->get_Last()->get_Font()); WF->GetDefaultInterface()->Size = height; WF->GetDefaultInterface()->Shadow = shadow; WF->GetDefaultInterface()->Bold = bold; WF->GetDefaultInterface()->Italic = italic; WF->GetDefaultInterface()->Underline = (Word_xp::WdUnderline)underline; WF->GetDefaultInterface()->Color = (Word_xp::WdColor)Color; WF->set_Name(StringToOleStr(Font)); }
//--------------------------------------------------------------------------- void __fastcall TDPAniver1::PreencheArquivo( AnsiString arquivoNovo, AnsiString arquivoModelo) { int Grupo; int Secao = 1; try { DSEmp = new PHDataSource( NULL ); DSEmp->Name = "DSEmpresa"; DSEmp->Tabela = DM->TBEmpresas; DSEmp->Open( true ); // Carrega no datasource os dados da empresa que esta sendo acessada if(!DSEmp->BuscaKeyBD( "Codigo", IntToStr( vg.EmpresaAtual ), true, true )) throw Exception( "Não foi possível carregar dados da empresa acessada." ); FiltraAniversariantes(); Evolucao1->StartProcess( DSAniver2->CountReg() * 8 ); // Percorre todos os aniversariantes da lista while(!DSAniver2->Eof) { if((int)DSAniver2->GV( ANIVER_GERARCARTAO )) { Grupo = 1; Evolucao1->Label1->Caption = "Aniversariante: " + DSAniver2->GT( ANIVER_SOCIO ); while(Grupo < 5) { Evolucao1->ProcessAdd(); SubstituiPadroesDoDocumento(Grupo, Secao); Grupo++; Evolucao1->ProcessAdd(); if(Evolucao1->Interrompe()) break; } DSAniver2->Next(); if(!DSAniver2->Eof) { Secao++; WDoc->Sections->Add( EmptyParam, (OleVariant) wdSectionNewPage ); WDoc->ActiveWindow->Selection->GoToNext( wdGoToPage ); WDoc->ActiveWindow->Selection->InsertFile( StringToOleStr( arquivoModelo ), EmptyParam, (OleVariant) false, (OleVariant) false, EmptyParam ); } if(Evolucao1->Interrompe()) break; } else { DSAniver2->Next(); } } } __finally { DSAniver2->Close(); DSEmp->Close(); delete DSEmp; } }
//--------------------------------------------------------------------------- void __fastcall TDPAniver1::ConectaWordServer( AnsiString arquivo) { try { WDoc->Connect(); } catch(Exception & E) { throw Exception( "Não foi possível conectar com Word.\r\n\r\n" + E.Message + "\r\n" ); } WApp->Options->CheckSpellingAsYouType = False; WApp->Options->CheckGrammarAsYouType = False; WApp->Caption = StringToOleStr( Caption ); OleVariant Template = EmptyParam; OleVariant NewTemplate = False; OleVariant ItemIndex = 1; if(!FileExists( arquivo )) { WApp->Documents->Add( Template, NewTemplate ); WDoc->ConnectTo( WApp->Documents->Item( ItemIndex ) ); } else { WDoc->ConnectTo( WApp->Documents->Open( (OleVariant) arquivo ) ); OleVariant Final = (OleVariant) (int)WDoc->Characters->Count; } }
//--------------------------------------------------------------------------- void OfficeFillCell(AnsiString Office, Variant Document,int table,int string,int row, AnsiString str) { // Записать строку STR в ячейку номер (String, Row) таблицы номер Table // для ОО нумерация table, string, row - c нуля // для ОО нумерация table, string, row - c единицы try { if (Office=="OO") { Variant vTables, vTable, vCell;; vTables = Document.OleFunction("getTextTables"); // список таблиц vTable = vTables.OleFunction("getByIndex", table-1); // таблица по номеру vCell = vTable.OleFunction("getCellByPosition", row-1, string-1); // ячейка по номеру vCell.OleFunction("setString", str); } if (Office=="MSO") { Variant word_rang, vTables, vTable, vCell;; word_rang=Document.OleFunction("Range"); vTables=word_rang.OlePropertyGet("Tables"); vTable=vTables.OleFunction("Item",(Variant)(table)); vCell=vTable.OleFunction("Cell", string, row); vCell.OlePropertyGet("Range").OlePropertySet("Text",StringToOleStr(str)); } } catch (Exception &E) { ShowMessage("Ошибка при записи в таблицу " + E.Message); } }
void doc2txt::convertPro(AnsiString WordFile,AnsiString PathPutTxt) { TStringList* word=new TStringList; String filename = WordFile; Variant vVarApp,vVarDoc,vVarParagraphs,vVarParagraph; AnsiString resolution = ExtractFileExt(filename); AnsiString str = StringReplace( ExtractFileName(filename),resolution,"",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase); try { vVarApp=CreateOleObject("Word.Application"); } catch(...) { MessageBox(0, "Не удачно получилось открыть Word", "Внимание", MB_OK); return; } vVarApp.OlePropertySet("Visible",false); vVarDoc = vVarApp.OlePropertyGet("Documents"); vVarDoc.OleProcedure("Open", StringToOleStr(filename)); vVarDoc = vVarDoc.OleFunction("Item",1); vVarDoc.OleProcedure("Activate"); String s = vVarDoc.OlePropertyGet("Content").OlePropertyGet("Text"); word->Add(s); word->SaveToFile( PathPutTxt + str +".txt" ); vVarApp.OleProcedure("Quit"); delete word; }
//--------------------------------------------------------------------------- void __fastcall TCPRecib1::SpeedButton22Click( TObject* Sender ) { if( !PHDS1->CountReg() ) { throw Exception( "Nenhum Contrato." ); } PHDS1->Edit();//Sinaliza que o arquivo do word está em edição try { W1->Connect(); W1->Caption = StringToOleStr( "GEPH - Gerenciador de Escritórios (RECIBOS): " + String( PHDS1->GV( RECIB_DESCRICAO ) ) ); W1->Visible = true; AnsiString Arq = String( PHDS1->GV( RECIB_ARQUIVO ) ); int Tam = -1; int H = FileOpen( Arq, fmOpenRead | fmShareDenyNone ); if( H != -1 ) { if( FileSeek( H, 0, 2 ) == 0 ) { Tam = 0; } FileClose( H ); } if( !FileExists( Arq ) || Tam == 0 ) // novo ou zerado { OleVariant Template = EmptyParam; OleVariant NewTemplate = false; OleVariant DocType = EmptyParam; OleVariant ItemIndex = 1; W1->Documents->Add( Template, NewTemplate, DocType ); WordDocument1->ConnectTo( W1->Documents->Item( ItemIndex ) ); WordDocument1->SaveAs( ( OleVariant ) Arq ); } else { WordDocument1->ConnectTo( W1->Documents->Open( (OleVariant) Arq ) ); } WordDocument1->Activate(); W1->Activate(); } catch( Exception & exception ) { W1->Disconnect(); Application->ShowException( &exception ); } }
void DrawRough() { long lStyle; IRoughsPtr v7RoughsCollect; IRoughPtr v7Rough; IRoughParamsPtr v7RoughsParam; ITextPtr v7RoughText; ksRoughParam *pRoughParam; //V5 //признак "по контуру" stRoughnessParam.bPoKonturu = (Form4->Panel7->BevelOuter == bvLowered); //тип шероховатости if (Form4->Panel1->BevelOuter == bvLowered) stRoughnessParam.cType = 0; if (Form4->Panel2->BevelOuter == bvLowered) stRoughnessParam.cType = 1; if (Form4->Panel3->BevelOuter == bvLowered) stRoughnessParam.cType = 2; //текст if (Form4->ListBox1->ItemIndex > -1) stRoughnessParam.cText = Form4->ListBox1->Items->operator [](Form4->ListBox1->ItemIndex); //cтрелка, если есть и тип её if (stRoughnessParam.dDistance == 0) { //полки нет stRoughnessParam.cPolka = 0; } else { //полка есть if (stRoughnessParam.pObj) lStyle = pDocV5->ksGetObjectStyle(stRoughnessParam.pObj->Reference); else lStyle = -1; if (lStyle != 1) stRoughnessParam.cPolka = 1; else stRoughnessParam.cPolka = 2; }; if (Form4->Panel5->BevelOuter == bvLowered) stRoughnessParam.cPolka = 1; if (Form4->Panel6->BevelOuter == bvLowered) stRoughnessParam.cPolka = 2; //создание шероховатости v7RoughsCollect = stRoughnessParam.pSymCont->Roughs; v7Rough = v7RoughsCollect->Add(); v7RoughsParam = v7Rough; v7RoughText = v7RoughsParam->RoughParamText; v7RoughText->set_Str(StringToOleStr(stRoughnessParam.cText)); v7RoughsParam->SignType = (ksRoughSignEnum)stRoughnessParam.cType; v7RoughsParam->ProcessingByContour = stRoughnessParam.bPoKonturu; v7Rough->BaseObject = stRoughnessParam.pObj; v7Rough->X0 = stRoughnessParam.X0; v7Rough->Y0 = stRoughnessParam.Y0; //дополнительная выносная линия (если нужна) DrawAnotherCurve(); if (stRoughnessParam.pLineParam || stRoughnessParam.pArcParam) if (stRoughnessParam.cPolka == 2) stRoughnessParam.cPolka = 1; //если есть стрелка то убирает её на выноске if (stRoughnessParam.cPolka) { //разворот полки if (stRoughnessParam.X1 > stRoughnessParam.X0) v7RoughsParam->ShelfDirection = ksShelfDirectionEnum::ksLSRight; else v7RoughsParam->ShelfDirection = ksShelfDirectionEnum::ksLSLeft ; //полка либо влево, либо вправо //разворот ножки полки //тип указателя ножки if (stRoughnessParam.cPolka == 1) v7RoughsParam->ArrowType = ksArrowEnum::ksLeaderWithoutArrow; else v7RoughsParam->ArrowType = ksArrowEnum::ksArrow; //длина ножки v7RoughsParam->LeaderLength = stRoughnessParam.dDistance * GetCurrentViewScale(); v7RoughsParam->LeaderAngle = stRoughnessParam.dAngNEW; v7Rough->_Update(); } else { //Привязка к объекту не требуется так как мы вручную устанавливаем угол v7Rough->_Update(); pRoughParam = (ksRoughParam *)pKompas5->GetParamStruct(StructType2DEnum::ko_RoughParam); pDocV5->ksGetObjParam(v7Rough->Reference, pRoughParam, 16); ((ksRoughPar*)pRoughParam->GetrPar())->ang = stRoughnessParam.dAngNEW; pDocV5->ksSetObjParam(v7Rough->Reference, pRoughParam, 16); } }
bool ViborRoughness() { //Подгрузка функции GetCurrentViewScale GetCurrentViewScale = (float(*)())GetProcAddress(LoadLibrary(L"KAPI2D5.dll"), "?GetCurrentViewScale@@YAMXZ"); //Получение базовой шероховатости long lBaseRough = pDocV5->ksCreateViewObject(16); if (!lBaseRough) return false; //получение угла из версии 5 ksRoughParam *pRoughParam = (ksRoughParam *)pKompas5->GetParamStruct(StructType2DEnum::ko_RoughParam); pDocV5->ksGetObjParam(lBaseRough, pRoughParam, 16); stRoughnessParam.dAng = ((ksRoughPar*)pRoughParam->GetrPar())->ang; //Взятие базового объекта IRoughPtr v7Rough = pKompas5->TransferReference(lBaseRough, 0); stRoughnessParam.pObj = v7Rough->BaseObject; stRoughnessParam.X0 = v7Rough->X0; stRoughnessParam.Y0 = v7Rough->Y0; //pDocV5->ksLightObj(stRoughnessParam.pObj->Reference, 1); //Разбиение шероховатости и просмотр "есть ли линия(дуга)-вытяжка" ksLineSegParam *TempLineParam; long TempRGroup = pDocV5->ksDecomposeObj(lBaseRough, 2, 1, 0); long lObj, lTypeObj, lLineSmall, lLineBig; long lDistance; bool b0, b1, b2, b3; ksIterator *pIter = (ksIterator*)pKompas5->GetIterator(); if (pIter->ksCreateIterator(0, TempRGroup)) { //Так как известны координаты базовой точки, то ищем линию которым принадлежит эта точка (НЕ НА КОНЦАХ) if ( pDocV5->ksExistObj(lObj = pIter->ksMoveIterator(StringToOleStr(UnicodeString("F")))) ) do { lTypeObj = pDocV5->ksGetObjParam(lObj, 0, 0); if (lTypeObj == LINESEG_OBJ) { //Получение параметров линии TempLineParam = (ksLineSegParam *)pKompas5->GetParamStruct(StructType2DEnum::ko_LineSegParam); pDocV5->ksGetObjParam(lObj, TempLineParam, lTypeObj); //true если попадет на крайнюю точку линии Проверка что точка не конечная (потому как это не будет искомая линия) //double iii = stRoughnessParam.X0 - TempLineParam->x2; //double yyy = stRoughnessParam.Y0 - TempLineParam->y2; b0 =((fabs(stRoughnessParam.X0 - TempLineParam->x1) < 0.001) && (fabs(stRoughnessParam.Y0 - TempLineParam->y1) < 0.001)) || ((fabs(stRoughnessParam.X0 - TempLineParam->x2) < 0.001) && (fabs(stRoughnessParam.Y0 - TempLineParam->y2) < 0.001)); //По уравнению прямой смотрим принадлежность точки линии b1 = fabs((stRoughnessParam.X0 - TempLineParam->x1)*(TempLineParam->y2 - TempLineParam->y1) - (stRoughnessParam.Y0 - TempLineParam->y1)*(TempLineParam->x2 - TempLineParam->x1)) < 0.001; //true для случая когда линии вертикальны или горизонтальны b2 = fabs(TempLineParam->x1 - TempLineParam->x2) < 0.001; b3 = fabs(TempLineParam->y1 - TempLineParam->y2) < 0.001; if (!b0) { if (!b2 && !b3 && b1) stRoughnessParam.pLineParam = TempLineParam; if (b3) if (((TempLineParam->x1 < stRoughnessParam.X0) && (stRoughnessParam.X0 < TempLineParam->x2)) || ((TempLineParam->x2 < stRoughnessParam.X0) && (stRoughnessParam.X0 < TempLineParam->x1))) stRoughnessParam.pLineParam = TempLineParam; if (b2) if (((TempLineParam->y1 < stRoughnessParam.Y0) && (stRoughnessParam.Y0 < TempLineParam->y2)) || ((TempLineParam->y2 < stRoughnessParam.Y0) && (stRoughnessParam.Y0 < TempLineParam->y1))) stRoughnessParam.pLineParam = TempLineParam; } } if (lTypeObj == ARC_OBJ) { //Так как дуга может быть только одна и только в вытяжке, то параметры не проверяются stRoughnessParam.pArcParam = (ksArcByPointParam *)pKompas5->GetParamStruct(StructType2DEnum::ko_ArcByPointParam); pDocV5->ksGetObjParam(lObj, stRoughnessParam.pArcParam, lTypeObj); } } while( pDocV5->ksExistObj(lObj = pIter->ksMoveIterator(StringToOleStr(UnicodeString("N")))) ); } pIter->ksDeleteIterator(); pDocV5->ksClearGroup(TempRGroup, true); ////////// //Удаление базовой шероховатости pDocV5->ksDeleteObj(lBaseRough); //Отключение привязок (чтобы не видеть перекрестье привязок) ksSnapOptions *pOpt = (ksSnapOptions *)pKompas5->GetParamStruct(86); //ko_SnapOptions pKompas5->ksGetSysOptions(SNAP_OPTIONS, pOpt); pOpt->commonOpt = pOpt->commonOpt | 8; pKompas5->ksSetSysOptions(SNAP_OPTIONS, pOpt); //Построение фантома double x,y; ksRequestInfo *pRInfo = (ksRequestInfo *)pKompas5->GetParamStruct(10); //ko_RequestInfo ksPhantom *pPhan = (ksPhantom *)pKompas5->GetParamStruct(6); //ko_Phantom ksType6 *pType6; //настройка фантома pPhan->Init(); pPhan->phantom = 6; pType6 = (ksType6 *) pPhan->GetPhantomParam(); pType6->gr = 0; pRInfo->Init(); pRInfo->prompt = StringToOleStr((UnicodeString)L"Выберите вторую точку выноски"); pRInfo->dynamic = 1; pRInfo->SetCallBackC(StringToOleStr((UnicodeString)L"CALLD"), (long)HInstance, NULL); x = 0; y = 0; bEsc4 = true; if (pDocV5->ksCursor(pRInfo, &x, &y, pPhan) != 0) { //Включение привязок pOpt->commonOpt = pOpt->commonOpt ^ 8; pKompas5->ksSetSysOptions(SNAP_OPTIONS, pOpt); return false; } //Включение привязок pOpt->commonOpt = pOpt->commonOpt ^ 8; pKompas5->ksSetSysOptions(SNAP_OPTIONS, pOpt); if (bEsc4) return false; return true; }
void __fastcall TRefEditForm::Button3Click(TObject *Sender) { wchar_t *doc_contents; wchar_t *ref_contents; wchar_t *ref_codes; RangePtr my_range; AnsiString fileName; AnsiString refNo; ListBox1->Items->Clear(); for(int k=0;k<ListBox_Words->Items->Count;k++) { fileName=(AnsiString)ListBox_Words->Items->Strings[k]; //-- We've got a file name - Open the document WordDocument1->ConnectTo(WordApplication1->Documents->Open((OleVariant)fileName)); ParagraphsPtr doc_pars; doc_pars=WordDocument1->Paragraphs; long doc_pars_cnt=doc_pars->Count; Paragraph* doc_par; RangePtr par_range; wchar_t* par_contents; Words* par_words; RangePtr word_range; wchar_t* word_contents; for(long k=0;k<doc_pars_cnt;k++) { doc_par=doc_pars->Item(k+1); par_range=doc_par->get_Range(); par_words=par_range->get_Words(); int par_word_cnt; par_word_cnt=par_words->get_Count(); /**/ unsigned int ref_open=0; unsigned int brk_open=0; wchar_t* refs_bracked[25]; long refs_ind[25]; int refs_cnt=0; RangePtr brackets_beg_range; RangePtr brackets_end_range; /**/ for(int j=par_word_cnt;j>0;j--) { word_range=par_words->Item(j); word_contents=word_range->get_Text(); if(word_contents[0]=='#' || word_contents[1]=='#') { if(word_contents[0]=='#') {my_range=WordDocument1->Range((Variant)word_range->Start,(Variant)(word_range->Start+4)); if(!brk_open) {brackets_end_range=WordDocument1->Range((Variant)word_range->Start,(Variant)(word_range->Start+4)); brk_open=1; } } if(word_contents[1]=='#') {my_range=WordDocument1->Range((Variant)(word_range->Start+1),(Variant)(word_range->Start+5)); ref_open=1; if(!brk_open) {brackets_end_range=WordDocument1->Range((Variant)word_range->Start+1,(Variant)(word_range->Start+5)); brk_open=1; } brk_open=0; } /**/ refs_bracked[refs_cnt]=my_range->get_Text(); refs_cnt++; if(ref_open) { for(int i=0;i<refs_cnt;i++) { refs_ind[i]=RefCode2RefNo(refs_bracked[i]); } for(int j=0;j<refs_cnt;j++) for(int k=0;k<refs_cnt;k++) {if(refs_ind[j]<refs_ind[k]) {long tmp=refs_ind[j]; refs_ind[j]=refs_ind[k]; refs_ind[k]=tmp; } } AnsiString a; AnsiString b; for(int i=0;i<refs_cnt-1;i++) {b=IntToStr(refs_ind[i]); b+=", "; a+=b; } b=IntToStr(refs_ind[refs_cnt-1]); a+=b; //my_range=WordDocument1->Range((Variant)(word_range->Start+1),(Variant)(word_range->Start+refs_cnt*6-1)); my_range=WordDocument1->Range((Variant)(word_range->Start+1),(Variant)(brackets_end_range->Start+4)); my_range->set_Text(StringToOleStr(a)); refs_cnt=0; ref_open=0; } } } } WordDocument1->Save(); WordDocument1->Close(); WordDocument1->Disconnect(); ListBox1->Items->Add(fileName+" proceed"); } }
//--------------------------------------------------------------------------- void __fastcall TRefEditForm::Button2Click(TObject *Sender) {RangePtr tmp_range; AnsiString str; WordDocument2->ConnectTo(WordApplication1->Documents->Add()); tmp_range=WordDocument2->get_Content(); int cnt=ListBox1->Count; for(int i=0;i<cnt;i++) {str=(AnsiString)ListBox1->Items->Strings[i]; tmp_range->InsertAfter(StringToOleStr(str)); } tmp_range->InsertAfter(StringToOleStr("\nÑÏÈÑÎÊ ÂÈÊÎÐÈÑÒÀÍÈÕ ÄÆÅÐÅË\n")); //----- // wchar_t *doc_contents; wchar_t *ref_contents; // RangePtr my_range; OleVariant FileName; FileName = ref_fileName; WordDocument1->ConnectTo(WordApplication1->Documents->Open(FileName)); //----- TablesPtr doc_tables; doc_tables=WordDocument1->Tables; Table* ref_table; ref_table=doc_tables->Item(1); Columns* ref_table_columns; ref_table_columns=ref_table->get_Columns(); // Column* code_column; // code_column=ref_table_columns->get_First(); // Cells* code_cells; // code_cells=code_column->Cells; // Cell* code_cell; // RangePtr code_range; Column* ref_column; ref_column=ref_table_columns->get_Last(); Cells* ref_cells; ref_cells=ref_column->Cells; Cell* ref_cell; RangePtr ref_range; long k=0; for(long j=0;j<ref_count;j++) {if(arr[j].used) {ref_cell=ref_cells->Item(j+1); ref_range=ref_cell->get_Range(); ref_contents =ref_range->get_Text(); tmp_range->InsertAfter(StringToOleStr(arr[j].RefCode)); tmp_range->InsertAfter(StringToOleStr("\t")); k++; tmp_range->InsertAfter(StringToOleStr(IntToStr(k))); tmp_range->InsertAfter(StringToOleStr("\t")); tmp_range->InsertAfter(StringToOleStr(ref_contents)); } } tmp_range->InsertAfter(StringToOleStr("\nÑÏÈÑÎÊ ÍÅÂÈÊÎÐÈÑÒÀÍÈÕ ÄÆÅÐÅË\n")); for(long j=0;j<ref_count;j++) {if(arr[j].used==0) {ref_cell=ref_cells->Item(j+1); ref_range=ref_cell->get_Range(); ref_contents =ref_range->get_Text(); tmp_range->InsertAfter(StringToOleStr(arr[j].RefCode)); tmp_range->InsertAfter(StringToOleStr("\t")); k++; tmp_range->InsertAfter(StringToOleStr(IntToStr(k))); tmp_range->InsertAfter(StringToOleStr("\t")); tmp_range->InsertAfter(StringToOleStr(ref_contents)); } } WordDocument1->Close(); WordDocument1->Disconnect(); WordDocument2->Save(); WordDocument2->Close(); WordDocument2->Disconnect(); }