//simvan gia tin apothikeusi tis eikonas otan patiete to save //dinatotita gia apothikeusi se bmp & jpg morfi void __fastcall TForm1::SavePic1Click(TObject *Sender) { SavePictureDialog1->Title = "Save Image"; SavePictureDialog1->DefaultExt = "jpg"; SavePictureDialog1->Filter = "JPEG images (*.jpg) | *.jpg; | Bmp files (*.bmp)|*.BMP" ; SavePictureDialog1->FilterIndex = 1; if (SavePictureDialog1->Execute()) { AnsiString temp2 = ExtractFileName(SavePictureDialog1->FileName); AnsiString temp = ExtractFileExt(SavePictureDialog1->FileName); AnsiString Ext = temp.LowerCase(); if (Ext.AnsiPos("jpg") > 0) { TJPEGImage *jp = new TJPEGImage(); try { jp->Assign(Image1->Picture->Bitmap); jp->SaveToFile(SavePictureDialog1->FileName); } __finally { delete jp; } }
int init() { OutputDebugString("RPCInterface init"); TRegistry * reg; AnsiString str; if (frmPluginMain == NULL) { try { // pass on the provided parameters // this gets better behaviour for VCL dlls Application->Handle = plugin.hwndParent; frmPluginMain = new TfrmPluginMain(Application); try { // set parent handle reg = new TRegistry(); reg->OpenKey("software\\PMMSoft\\Winamp controller\\server settings", true); str = reg->ReadString("Visible"); if (str.LowerCase() == "true") frmPluginMain->Show(); } __finally { delete reg; } } catch (...) { delete frmPluginMain; frmPluginMain = NULL; } } return 0; }
void __fastcall TForm1::OpenPicture1Click(TObject *Sender) { OpenPictureDialog1->Filter = "Bmp files (*.bmp)|*.BMP| JPEG images (*.jpg) | *.jpg; " ; if (OpenPictureDialog1->Execute()) { if (!FileExists(OpenPictureDialog1->FileName)) return; AnsiString temp2 = ExtractFileName(OpenPictureDialog1->FileName); AnsiString temp = ExtractFileExt(OpenPictureDialog1->FileName); AnsiString Ext = temp.LowerCase(); if (Ext.AnsiPos("jpg") > 0) { TJPEGImage *myjpeg = new TJPEGImage(); myjpeg->LoadFromFile(OpenPictureDialog1->FileName); myjpeg->DIBNeeded(); Image1->Picture->Bitmap->Assign(myjpeg); delete myjpeg; } else if (Ext.AnsiPos("bmp") > 0) { Image1->Picture->Bitmap->LoadFromFile(OpenPictureDialog1->FileName); } } { Undo1->Enabled=false; //apenergopoioume ta undo/redo Redo1->Enabled=false; ToolUndo->Enabled=false; ToolRedo->Enabled=false; } }
bool __fastcall TFTPFile::GetPasv(AnsiString ServerString) { int pos = ServerString.LowerCase().Pos("ftp://"); if(pos < 1) return false; pos = StrLScan(ServerString.c_str(),"|"); if(pos < 0) return false; return ServerString.SubString(pos + 2,ServerString.Length() - pos - 1).UpperCase() == "PASV"; }
AnsiString __fastcall TFTPFile::GetUserName(AnsiString ServerString) { int pos = ServerString.LowerCase().Pos("ftp://"); if(pos < 1) return ""; ServerString = ServerString.SubString(pos + 6,ServerString.Length() - pos); pos = StrLScan(ServerString.c_str(),":"); if(pos < 0) return ""; return DecryFTPPassword(ServerString.SubString(1,pos)); }
AnsiString __fastcall TFTPFile::GetPort(AnsiString ServerString) { int pos = ServerString.LowerCase().Pos("ftp://"); if(pos < 1) return ""; ServerString = ServerString.SubString(pos + 6,ServerString.Length() - pos); pos = StrLScan(ServerString.c_str(),"@"); if(pos < 0) return ""; ServerString = ServerString.SubString(pos + 2,ServerString.Length() - pos - 1); pos = StrLScan(ServerString.c_str(),":"); if(pos < 0) return ""; ServerString = ServerString.SubString(pos + 2,ServerString.Length() - pos - 1); pos = StrLScan(ServerString.c_str(),"/"); if(pos < 0) return ""; return ServerString.SubString(1,pos); }
AnsiString __fastcall TFTPFile::GetFilePath(AnsiString ServerString) { int pos = ServerString.LowerCase().Pos("ftp://"); if(pos < 1) return ""; ServerString = ServerString.SubString(pos + 6,ServerString.Length() - pos); pos = StrLScan(ServerString.c_str(),"/"); if(pos < 0) return ""; ServerString = ServerString.SubString(pos + 2,ServerString.Length() - pos - 1); pos = StrRScan(ServerString.c_str(),"/"); if(pos < 0) return "/"; ServerString = ServerString.SubString(1,pos); if(ServerString.SubString(1,1) != "/") ServerString = "/" + ServerString; if(ServerString.SubString(ServerString.Length(),1) != "/") ServerString = ServerString + "/"; return ServerString; }
bool CFolderHelper::RenameItem(TElTree* tv, TElTreeItem* node, AnsiString& new_text, TOnItemRename OnRename) { R_ASSERT(OnRename); if (new_text.IsEmpty()) return false; new_text = new_text.LowerCase(); // find item with some name for (TElTreeItem* item=node->GetFirstSibling(); item; item=item->GetNextSibling()){ if ((item->Text==new_text)&&(item!=node)) return false; } AnsiString full_name; if (IsFolder(node)){ // is folder - rename all folder items for (TElTreeItem* item=node->GetFirstChild(); item&&(item->Level>node->Level); item=item->GetNext()){ if (IsObject(item)){ MakeName(item,0,full_name,false); VERIFY(node->Level<_GetItemCount(full_name.c_str(),'\\')); AnsiString new_full_name; _ReplaceItem(full_name.c_str(),node->Level,new_text.c_str(),new_full_name,'\\'); if (full_name!=new_full_name) OnRename(full_name.c_str(),new_full_name.c_str(),TYPE_OBJECT); } } AnsiString new_full_name; MakeName(node,0,full_name,true); _ReplaceItem(full_name.c_str(),node->Level,new_text.c_str(),new_full_name,'\\'); if (full_name!=new_full_name) OnRename(full_name.c_str(),new_full_name.c_str(),TYPE_FOLDER); }else if (IsObject(node)){ // is object - rename only this item MakeName(node,0,full_name,false); VERIFY(node->Level<_GetItemCount(full_name.c_str(),'\\')); AnsiString new_full_name; _ReplaceItem(full_name.c_str(),node->Level,new_text.c_str(),new_full_name,'\\'); if (full_name!=new_full_name) OnRename(full_name.c_str(),new_full_name.c_str(),TYPE_OBJECT); } tv->Selected=node; return true; }
bool CFolderHelper::NameAfterEdit(TElTreeItem* node, AnsiString value, AnsiString& N) { VERIFY(node); N=N.LowerCase(); if (N.IsEmpty()){ N=value; return false; } int cnt=_GetItemCount(N.c_str(),'\\'); if (cnt>1) { N=value; return false; } VERIFY(node); for (TElTreeItem* itm=node->GetFirstSibling(); itm; itm=itm->GetNextSibling()){ if ((itm->Text==N)&&(itm!=node)){ N=value; return false; } } // all right node->Text=N; cnt=_GetItemCount(value.c_str(),'\\'); AnsiString new_name; _ReplaceItem(value.c_str(),cnt-1,N.c_str(),new_name,'\\'); N=new_name; return true; }
//--------------------------------------------------------------------------- AnsiString __fastcall TfrmSearch::AnalyseScript() { AnsiString Script; AnsiString s; for(int n = 0;n < SkyEdit2->Lines->Count;n++) { s = SkyEdit2->Lines->Strings[n]; s = AnsiReplaceStr(AnsiReplaceStr(AnsiReplaceStr(AnsiReplaceStr(s,"\n"," "),"\r"," ")," "," "),"\t"," "); if(s.SubString(1,1) == "'" || s.SubString(1,4).LowerCase() == "rem "||s.SubString(1,4).LowerCase() == "rem\t") //注释行 continue; Script = Script + " " + SkyEdit2->Lines->Strings[n]; } Script = AnsiReplaceStr(AnsiReplaceStr(AnsiReplaceStr(Script,"\n"," "),"\r"," "),"\t"," "); AnsiString LowerCaseScript = Script.LowerCase(); AnsiString ParamString; TBillField * BillField; AnsiString LowerCaseFieldName; AnsiString ParamName; int Pos; for(int n = 0;n < BillFile->FieldCount;n++) { BillField = BillFile->GetBillField(n); LowerCaseFieldName = BillField->FieldName.LowerCase(); Pos = LowerCaseScript.Pos(LowerCaseFieldName); if(Pos < 1) continue; //ParamName = BillField->FieldName.LowerCase(); if(ParamString == "") //ParamString = ParamString + ParamName; ParamString = ParamString + BillField->FieldName; else //ParamString = ParamString + "," + ParamName; ParamString = ParamString + "," + BillField->FieldName; //将原字符串中的字段名替换为ParamName int k = 1; while(k <= LowerCaseScript.Length()) { if(LowerCaseScript.SubString(k,LowerCaseFieldName.Length()) == LowerCaseFieldName) { Script = StuffString(Script,k,LowerCaseFieldName.Length(),BillField->FieldName); LowerCaseScript = StuffString(LowerCaseScript,k,LowerCaseFieldName.Length(),LowerCaseFieldName); } ++k; } MatchFieldList->AddObject(BillField->FieldName,(TObject *)BillField); } ParamString = "(" + ParamString + ")"; Script = "'执行过程\nFunction MatchBill" + ParamString + "\n" + "if " + Script + " then \n"\ " MatchBill = 1\n"\ "else\n MatchBill = 0\n"\ "end if\n"\ "End Function"; SkyEdit1->Text = Script; //脚本语法检查 TScriptControl * ScriptControl = new TScriptControl(this); ScriptControl->Language = "VBScript"; ScriptControl->AllowUI = false; LPSAFEARRAY Params; //传递给脚本的参数 Params = SafeArrayCreateVector(VT_VARIANT, 0, MatchFieldList->Count); VARIANT * pData = NULL; SafeArrayAccessData(Params, (void **)&pData); //锁定数据 TList * ParamList = new TList; //参数列表 VARIANT * pDataTmp; for(int n = 0;n < MatchFieldList->Count;n++) { pDataTmp = new VARIANT; pDataTmp->vt = VT_BSTR; ParamList->Add((TObject *)pDataTmp); } ScriptControl->AddCode(WideString(Script).c_bstr()); bool ScriptSucceed; ScriptControl->Error->get_Number(); ScriptSucceed = ScriptControl->Error->Number == 0; if(!ScriptSucceed)//ScriptControl->Error->Number > 0) { MessageBox(Handle,("查询脚本错误:第 " + AnsiString(ScriptControl->Error->Line) \ + " 行,第 " + AnsiString(ScriptControl->Error->Column) \ + "列出现错误 " + AnsiString(ScriptControl->Error->Number) \ + " (" + AnsiString(ScriptControl->Error->Description) + ")").c_str(),"错误",MB_OK | MB_ICONSTOP); //ScriptSucceed = false; } else { //生成参数列表 for(int p = 0;p < MatchFieldList->Count;p++) { pDataTmp = (VARIANT *)ParamList->Items[p]; switch(((TBillField *)MatchFieldList->Objects[p])->SortType) { case SORT_AS_STR: pDataTmp->bstrVal = SysAllocString(L"000"); break; case SORT_AS_DATETIME: pDataTmp->bstrVal = SysAllocString(L"2000-01-01 00:00:00"); break; case SORT_AS_NUMBER: pDataTmp->bstrVal = SysAllocString(L"1000"); break; case SORT_AS_CURRENCY: pDataTmp->bstrVal = SysAllocString(L"2.18"); break; } * (pData + p) = * pDataTmp; } //执行脚本 try { int Found = ScriptControl->Run(WideString("MatchBill").c_bstr(),&Params); if(Found != 0 && Found != 1) { MessageBox(Handle,"脚本没有返回预期的0或1","脚本编译错误",MB_OK | MB_ICONSTOP); ScriptSucceed = false; } else ScriptSucceed = true; } catch(Exception & E) { ScriptSucceed = false; } if(!ScriptSucceed && ScriptControl->Error->Number != 0) MessageBox(Handle,("查询脚本错误:\n"\ "第 " + AnsiString(ScriptControl->Error->Line) \ + " 行,第 " + AnsiString(ScriptControl->Error->Column) \ + "列出现错误\n " + AnsiString(ScriptControl->Error->Number) \ + " (" + AnsiString(ScriptControl->Error->Description) + ")").c_str(),"脚本编译错误",MB_OK | MB_ICONSTOP); //释放字符串占用的空间 for(int p = 0;p < MatchFieldList->Count;p++) { pDataTmp = (VARIANT *)ParamList->Items[p]; SysFreeString(pDataTmp->bstrVal); } SafeArrayUnaccessData(Params); for(int n = 0;n < ParamList->Count;n++) { delete (VARIANT *)ParamList->Items[n]; } delete ParamList; delete ScriptControl; } if(ScriptSucceed) return Script; else return ""; }
void Global::ConfigParse(TQueryParserComp *qp, cParser *cp) { // Ra: trzeba by przerobiæ na cParser, ¿eby to dzia³a³o w scenerii pParser = cp; qParser = qp; AnsiString str; int i; do { str = GetNextSymbol().LowerCase(); if (str == AnsiString("sceneryfile")) { str = GetNextSymbol().LowerCase(); strcpy(szSceneryFile, str.c_str()); } else if (str == AnsiString("humanctrlvehicle")) { str = GetNextSymbol().LowerCase(); asHumanCtrlVehicle = str; } else if (str == AnsiString("width")) iWindowWidth = GetNextSymbol().ToInt(); else if (str == AnsiString("height")) iWindowHeight = GetNextSymbol().ToInt(); else if (str == AnsiString("heightbase")) fDistanceFactor = GetNextSymbol().ToInt(); else if (str == AnsiString("bpp")) iBpp = ((GetNextSymbol().LowerCase() == AnsiString("32")) ? 32 : 16); else if (str == AnsiString("fullscreen")) bFullScreen = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("freefly")) // Mczapkie-130302 { bFreeFly = (GetNextSymbol().LowerCase() == AnsiString("yes")); pFreeCameraInit[0].x = GetNextSymbol().ToDouble(); pFreeCameraInit[0].y = GetNextSymbol().ToDouble(); pFreeCameraInit[0].z = GetNextSymbol().ToDouble(); } else if (str == AnsiString("wireframe")) bWireFrame = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("debugmode")) // McZapkie! - DebugModeFlag uzywana w mover.pas, // warto tez blokowac cheaty gdy false DebugModeFlag = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("soundenabled")) // McZapkie-040302 - blokada dzwieku - przyda // sie do debugowania oraz na komp. bez karty // dzw. bSoundEnabled = (GetNextSymbol().LowerCase() == AnsiString("yes")); // else if (str==AnsiString("renderalpha")) //McZapkie-1312302 - dwuprzebiegowe renderowanie // bRenderAlpha=(GetNextSymbol().LowerCase()==AnsiString("yes")); else if (str == AnsiString("physicslog")) // McZapkie-030402 - logowanie parametrow // fizycznych dla kazdego pojazdu z maszynista WriteLogFlag = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("physicsdeactivation")) // McZapkie-291103 - usypianie fizyki PhysicActivationFlag = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("debuglog")) { // McZapkie-300402 - wylaczanie log.txt str = GetNextSymbol().LowerCase(); if (str == "yes") iWriteLogEnabled = 3; else if (str == "no") iWriteLogEnabled = 0; else iWriteLogEnabled = str.ToIntDef(3); } else if (str == AnsiString("adjustscreenfreq")) { // McZapkie-240403 - czestotliwosc odswiezania ekranu str = GetNextSymbol(); bAdjustScreenFreq = (str.LowerCase() == AnsiString("yes")); } else if (str == AnsiString("mousescale")) { // McZapkie-060503 - czulosc ruchu myszy (krecenia glowa) str = GetNextSymbol(); fMouseXScale = str.ToDouble(); str = GetNextSymbol(); fMouseYScale = str.ToDouble(); } else if (str == AnsiString("enabletraction")) { // Winger 040204 - 'zywe' patyki dostosowujace sie do trakcji; Ra 2014-03: teraz ³amanie bEnableTraction = (GetNextSymbol().LowerCase() == AnsiString("yes")); } else if (str == AnsiString("loadtraction")) { // Winger 140404 - ladowanie sie trakcji bLoadTraction = (GetNextSymbol().LowerCase() == AnsiString("yes")); } else if (str == AnsiString("friction")) // mno¿nik tarcia - KURS90 fFriction = GetNextSymbol().ToDouble(); else if (str == AnsiString("livetraction")) { // Winger 160404 - zaleznosc napiecia loka od trakcji; Ra 2014-03: teraz pr¹d przy braku // sieci bLiveTraction = (GetNextSymbol().LowerCase() == AnsiString("yes")); } else if (str == AnsiString("skyenabled")) { // youBy - niebo if (GetNextSymbol().LowerCase() == AnsiString("yes")) asSky = "1"; else asSky = "0"; } else if (str == AnsiString("managenodes")) { bManageNodes = (GetNextSymbol().LowerCase() == AnsiString("yes")); } else if (str == AnsiString("decompressdds")) { bDecompressDDS = (GetNextSymbol().LowerCase() == AnsiString("yes")); } // ShaXbee - domyslne rozszerzenie tekstur else if (str == AnsiString("defaultext")) { str = GetNextSymbol().LowerCase(); // rozszerzenie if (str == "tga") szDefaultExt = szTexturesTGA; // domyœlnie od TGA // szDefaultExt=std::string(Parser->GetNextSymbol().LowerCase().c_str()); } else if (str == AnsiString("newaircouplers")) bnewAirCouplers = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("defaultfiltering")) iDefaultFiltering = GetNextSymbol().ToIntDef(-1); else if (str == AnsiString("ballastfiltering")) iBallastFiltering = GetNextSymbol().ToIntDef(-1); else if (str == AnsiString("railprofiltering")) iRailProFiltering = GetNextSymbol().ToIntDef(-1); else if (str == AnsiString("dynamicfiltering")) iDynamicFiltering = GetNextSymbol().ToIntDef(-1); else if (str == AnsiString("usevbo")) bUseVBO = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("feedbackmode")) iFeedbackMode = GetNextSymbol().ToIntDef(1); // domyœlnie 1 else if (str == AnsiString("feedbackport")) iFeedbackPort = GetNextSymbol().ToIntDef(0); // domyœlnie 0 else if (str == AnsiString("multiplayer")) iMultiplayer = GetNextSymbol().ToIntDef(0); // domyœlnie 0 else if (str == AnsiString("maxtexturesize")) { // wymuszenie przeskalowania tekstur i = GetNextSymbol().ToIntDef(16384); // domyœlnie du¿e if (i <= 64) iMaxTextureSize = 64; else if (i <= 128) iMaxTextureSize = 128; else if (i <= 256) iMaxTextureSize = 256; else if (i <= 512) iMaxTextureSize = 512; else if (i <= 1024) iMaxTextureSize = 1024; else if (i <= 2048) iMaxTextureSize = 2048; else if (i <= 4096) iMaxTextureSize = 4096; else if (i <= 8192) iMaxTextureSize = 8192; else iMaxTextureSize = 16384; } else if (str == AnsiString("doubleambient")) // podwójna jasnoœæ ambient bDoubleAmbient = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("movelight")) // numer dnia w roku albo -1 { fMoveLight = GetNextSymbol().ToIntDef(-1); // numer dnia 1..365 if (fMoveLight == 0.0) { // pobranie daty z systemu unsigned short y, m, d; TDate date = Now(); date.DecodeDate(&y, &m, &d); fMoveLight = (double)date - (double)TDate(y, 1, 1) + 1; // numer bie¿¹cego dnia w roku } if (fMoveLight > 0.0) // tu jest nadal zwiêkszone o 1 { // obliczenie deklinacji wg: // http://naturalfrequency.com/Tregenza_Sharples/Daylight_Algorithms/algorithm_1_11.htm // Spencer J W Fourier series representation of the position of the sun Search 2 (5) // 172 (1971) fMoveLight = M_PI / 182.5 * (Global::fMoveLight - 1.0); // numer dnia w postaci k¹ta fSunDeclination = 0.006918 - 0.3999120 * cos(fMoveLight) + 0.0702570 * sin(fMoveLight) - 0.0067580 * cos(2 * fMoveLight) + 0.0009070 * sin(2 * fMoveLight) - 0.0026970 * cos(3 * fMoveLight) + 0.0014800 * sin(3 * fMoveLight); } } else if (str == AnsiString("smoothtraction")) // podwójna jasnoœæ ambient bSmoothTraction = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("timespeed")) // przyspieszenie czasu, zmienna do testów fTimeSpeed = GetNextSymbol().ToIntDef(1); else if (str == AnsiString("multisampling")) // tryb antyaliasingu: 0=brak,1=2px,2=4px iMultisampling = GetNextSymbol().ToIntDef(2); // domyœlnie 2 else if (str == AnsiString("glutfont")) // tekst generowany przez GLUT bGlutFont = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("latitude")) // szerokoœæ geograficzna fLatitudeDeg = GetNextSymbol().ToDouble(); else if (str == AnsiString("convertmodels")) // tworzenie plików binarnych iConvertModels = GetNextSymbol().ToIntDef(7); // domyœlnie 7 else if (str == AnsiString("inactivepause")) // automatyczna pauza, gdy okno nieaktywne bInactivePause = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("slowmotion")) // tworzenie plików binarnych iSlowMotionMask = GetNextSymbol().ToIntDef(-1); // domyœlnie -1 else if (str == AnsiString("modifytga")) // czy korygowaæ pliki TGA dla szybszego // wczytywania iModifyTGA = GetNextSymbol().ToIntDef(0); // domyœlnie 0 else if (str == AnsiString("hideconsole")) // hunter-271211: ukrywanie konsoli bHideConsole = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString( "rollfix")) // Ra: poprawianie przechy³ki, aby wewnêtrzna szyna by³a "pozioma" bRollFix = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("fpsaverage")) // oczekiwana wartosæ FPS fFpsAverage = GetNextSymbol().ToDouble(); else if (str == AnsiString("fpsdeviation")) // odchylenie standardowe FPS fFpsDeviation = GetNextSymbol().ToDouble(); else if (str == AnsiString("fpsradiusmax")) // maksymalny promieñ renderowania fFpsRadiusMax = GetNextSymbol().ToDouble(); else if (str == AnsiString("calibratein")) // parametry kalibracji wejœæ { // i = GetNextSymbol().ToIntDef(-1); // numer wejœcia if ((i < 0) || (i > 5)) i = 5; // na ostatni, bo i tak trzeba pomin¹æ wartoœci fCalibrateIn[i][0] = GetNextSymbol().ToDouble(); // wyraz wolny fCalibrateIn[i][1] = GetNextSymbol().ToDouble(); // mno¿nik fCalibrateIn[i][2] = GetNextSymbol().ToDouble(); // mno¿nik dla kwadratu fCalibrateIn[i][3] = GetNextSymbol().ToDouble(); // mno¿nik dla szeœcianu } else if (str == AnsiString("calibrateout")) // parametry kalibracji wyjœæ { // i = GetNextSymbol().ToIntDef(-1); // numer wejœcia if ((i < 0) || (i > 6)) i = 6; // na ostatni, bo i tak trzeba pomin¹æ wartoœci fCalibrateOut[i][0] = GetNextSymbol().ToDouble(); // wyraz wolny fCalibrateOut[i][1] = GetNextSymbol().ToDouble(); // mno¿nik liniowy fCalibrateOut[i][2] = GetNextSymbol().ToDouble(); // mno¿nik dla kwadratu fCalibrateOut[i][3] = GetNextSymbol().ToDouble(); // mno¿nik dla szeœcianu } else if (str == AnsiString("brakestep")) // krok zmiany hamulca dla klawiszy [Num3] i [Num9] fBrakeStep = GetNextSymbol().ToDouble(); else if (str == AnsiString("joinduplicatedevents")) // czy grupowaæ eventy o tych samych nazwach bJoinEvents = (GetNextSymbol().LowerCase() == AnsiString("yes")); else if (str == AnsiString("hiddenevents")) // czy ³¹czyæ eventy z torami poprzez nazwê toru iHiddenEvents = GetNextSymbol().ToIntDef(0); else if (str == AnsiString("pause")) // czy po wczytaniu ma byæ pauza? iPause |= (GetNextSymbol().LowerCase() == AnsiString("yes")) ? 1 : 0; else if (str == AnsiString("lang")) asLang = GetNextSymbol(); // domyœlny jêzyk - http://tools.ietf.org/html/bcp47 else if (str == AnsiString("opengl")) // deklarowana wersja OpenGL, ¿eby powstrzymaæ b³êdy fOpenGL = GetNextSymbol().ToDouble(); // wymuszenie wersji OpenGL } while (str != "endconfig"); //(!Parser->EndOfFile) // na koniec trochê zale¿noœci if (!bLoadTraction) // wczytywanie drutów i s³upów { // tutaj wy³¹czenie, bo mog¹ nie byæ zdefiniowane w INI bEnableTraction = false; // false = pantograf siê nie po³amie bLiveTraction = false; // false = pantografy zawsze zbieraj¹ 95% MaxVoltage } // if (fMoveLight>0) bDoubleAmbient=false; //wtedy tylko jedno œwiat³o ruchome // if (fOpenGL<1.3) iMultisampling=0; //mo¿na by z góry wy³¹czyæ, ale nie mamy jeszcze fOpenGL if (iMultisampling) { // antyaliasing ca³oekranowy wy³¹cza rozmywanie drutów bSmoothTraction = false; } if (iMultiplayer > 0) { bInactivePause = false; // okno "w tle" nie mo¿e pauzowaæ, jeœli w³¹czona komunikacja // pauzowanie jest zablokowane dla (iMultiplayer&2)>0, wiêc iMultiplayer=1 da siê zapauzowaæ // (tryb instruktora) } fFpsMin = fFpsAverage - fFpsDeviation; // dolna granica FPS, przy której promieñ scenerii bêdzie zmniejszany fFpsMax = fFpsAverage + fFpsDeviation; // górna granica FPS, przy której promieñ scenerii bêdzie zwiêkszany if (iPause) iTextMode = VK_F1; // jak pauza, to pokazaæ zegar if (qp) { // to poni¿ej wykonywane tylko raz, jedynie po wczytaniu eu07.ini Console::ModeSet(iFeedbackMode, iFeedbackPort); // tryb pracy konsoli sterowniczej iFpsRadiusMax = 0.000025 * fFpsRadiusMax * fFpsRadiusMax; // maksymalny promieñ renderowania 3000.0 -> 225 if (iFpsRadiusMax > 400) iFpsRadiusMax = 400; if (fDistanceFactor > 1.0) { // dla 1.0 specjalny tryb bez przeliczania fDistanceFactor = iWindowHeight / fDistanceFactor; // fDistanceFactor>1.0 dla rozdzielczoœci wiêkszych ni¿ bazowa fDistanceFactor *= (iMultisampling + 1.0) * fDistanceFactor; // do kwadratu, bo wiêkszoœæ odleg³oœci to ich kwadraty } } }
//执行任务 bool __fastcall BeginJob( int JobMode, //工作模式.1:本地文件模式;2:FTP文件模式 AnsiString ListFileName, //列表文件名 AnsiString BillName, //话单类型名称 AnsiString DBName, //数据库连接名 AnsiString TableName, //表名 AnsiString LogFileName, //日志文件名 AnsiString TempPath, //临时目录 bool TransFieldValue, //是否对字段值进行翻译 int MaxError, //导入时允许的最大错误数 bool VerifyFile, //是否对文件进行格式检查 AnsiString FTPServer, //已配置好的FTP服务器名称,FTP文件模式 AnsiString DirList, //取文件的目录列表 int FTPRetryCount //列FTP文件时允许的最大重试次数 ) { SaveLog(("开始运行任务."\ "\n话单类型:" + BillName + "\n数据库连接:" + DBName + "\n导入到表:" + TableName + "\n日志文件:" + LogFileName + "\n导入数据库允许的最大错误数:" + IntToStr(MaxError) + "\n" "\n临时文件放置在:" + TempPath + "驱动器\n" ).c_str()); if(JobMode == 1) { SaveLog(("话单文件列表是" + ListFileName + ".\n").c_str()); } else if(JobMode == 2) { SaveLog(("搜索目录列表是" + DirList + "\n" + "FTP服务器:" + FTPServer).c_str()); } bool Result = false; frmMain = NULL; TStringList * FileList = NULL; TIdFTP * IdFTP = NULL; try { frmMain = new TfrmMain(Application); if(TempPath != "") { if(!DirectoryExists(TempPath) && !CreateDir(TempPath)) SaveLog(("指定的临时文件夹无效,已改为使用默认的临时文件夹:" + frmMain->TempDirectory + "\n").c_str()); else { if(TempPath.SubString(TempPath.Length(),1) != "\\") TempPath = TempPath + "\\"; frmMain->TempDirectory = TempPath; } } if(!frmMain->DBConfig->IsDBNameExists(DBName)) throw new Exception("在配置文件中找不到" + DBName + "的配置信息"); frmExportToDB = new TfrmExportToDB(NULL); frmExportToDB->txtDBServer->Text = frmMain->DBConfig->GetDBAttributeValue(DBName,"Server"); if(frmExportToDB->txtDBServer->Text == "") throw new Exception("没有为" + DBName + "配置服务器地址"); frmExportToDB->cbxDBType->ItemIndex = frmExportToDB->cbxDBType->Items->IndexOf( frmMain->DBConfig->GetDBAttributeValue(DBName,"DBType")); if(frmExportToDB->cbxDBType->ItemIndex < 0) { throw new Exception("为" + DBName + "配置的数据库类型不正确"); } FileList = new TStringList; if(JobMode == 1) { FileList->LoadFromFile(ListFileName); for(int n = FileList->Count - 1;n > -1;n--) { if(FileList->Strings[n] == "") FileList->Delete(n); } } else //FTP模式 { if(!frmMain->FTPConfig->IsFTPNameExists(FTPServer)) { throw new Exception("在FTP配置文件中找不到指定的FTP服务器"); } IdFTP = new TIdFTP(NULL); IdFTP->Host = frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"Server"); try { IdFTP->Port = StrToInt(frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"Port")); } catch(...) { IdFTP->Port = 21; } IdFTP->Username = frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"UserName"); IdFTP->Password = frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"Password",true); IdFTP->Passive = frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"Mode").UpperCase() == "PASV"; AnsiString FTPString = "ftp://" + frmMain->FTPConfig->EncryFTPString(IdFTP->Username) + ":" + frmMain->FTPConfig->EncryFTPString(IdFTP->Password) + "@" + IdFTP->Host + ":" + IntToStr(IdFTP->Port); AnsiString PasvString; if(IdFTP->Passive) PasvString = "|PASV|"; else PasvString = "||"; int ErrCount = 0; while(true) { AnsiString Status; TStringList * FTPDirList = new TStringList; AnsiString CurFTPPath = ""; AnsiString SearchFileName = ""; try { if(IdFTP->Connected()) IdFTP->Disconnect(); Status = "连接FTP服务器" + IdFTP->Host; SaveLog((Status + "\n").c_str()); IdFTP->Connect(true,FTPTimeout); Status = "获取FTP文件列表"; SaveLog((Status + "\n").c_str()); FTPDirList->Clear(); FTPDirList->LoadFromFile(DirList); AnsiString FileName; for(int n = FTPDirList->Count - 1;n > -1;n--) { if(FTPDirList->Strings[n] == "") FTPDirList->Delete(n); } FileList->Clear(); if(FTPDirList->Count == 0) FTPDirList->Add(""); for(int n = 0;n < FTPDirList->Count;n++) { CurFTPPath = FTPDirList->Strings[n]; if(CurFTPPath == "") { CurFTPPath = "/"; SearchFileName = ""; } else { int pos = StrRScan(CurFTPPath.c_str(),"/",-1); if(pos > -1) { SearchFileName = CurFTPPath.SubString(pos + 2,CurFTPPath.Length() - pos - 1); CurFTPPath = CurFTPPath.SubString(1,pos + 1); } else { SaveLog(("搜索路径[" + CurFTPPath + "]不正确,已跳过该行\n").c_str()); continue; } } Status = "获取文件列表" + CurFTPPath + SearchFileName; try { IdFTP->ChangeDir(CurFTPPath); } catch(Exception * E) { if(E->Message.Pos("No such file or directory.") > 0) { SaveLog(("搜索路径[" + CurFTPPath + "]不正确,服务器上没有找到该目录,已放弃对该目录的搜索\n").c_str()); continue; } else { throw new Exception(E->Message); } } if(SearchFileName != "" && SearchFileName.Pos("*") < 1 && SearchFileName.Pos("?") < 1) { //检查SearchFileName在FTP上是否是目录 IdFTP->List(NULL,"",true); for(int k = 0;k < IdFTP->DirectoryListing->Count;k++) { FileName = IdFTP->DirectoryListing->Items[k]->FileName; if(FileName == "." || FileName == "..") continue; if(FileName.LowerCase() == SearchFileName.LowerCase() && IdFTP->DirectoryListing->Items[k]->ItemType == ditDirectory) //SearchFileName是一个目录 { CurFTPPath = CurFTPPath + FileName + "/"; SearchFileName = ""; IdFTP->ChangeDir(CurFTPPath); break; } } } IdFTP->List(NULL,SearchFileName,true); int FileCount = 0; for(int k = 0;k < IdFTP->DirectoryListing->Count;k++) { FileName = IdFTP->DirectoryListing->Items[k]->FileName; if(FileName == "." || FileName == ".." || IdFTP->DirectoryListing->Items[k]->ItemType == ditDirectory) //目录 continue; FileList->Add(FTPString + CurFTPPath + PasvString + FileName); ++FileCount; } SaveLog((CurFTPPath + SearchFileName + " 找到" + IntToStr(FileCount) + "个文件").c_str()); } delete IdFTP; IdFTP = NULL; delete FTPDirList; FTPDirList = NULL; SaveLog(("共搜索到" + IntToStr(FileList->Count) + "个文件.\n").c_str()); for(int n = 0;n < FileList->Count;n++) { SaveLog(("找到文件:" + GetFullFTPFileName(FileList->Strings[n])).c_str()); } break; } catch(Exception * E) { ++ErrCount; if((FTPRetryCount > 0 && ErrCount > FTPRetryCount) || (FTPRetryCount == 0 && ErrCount > 1000)) { if(FTPDirList != NULL) { delete FTPDirList; FTPDirList = NULL; } ProcessExitCode = 5; throw new Exception(Status + "发生错误:" + E->Message); } else { SaveLog((Status + "发生错误:" + E->Message + " 重试" + IntToStr(ErrCount) + "\n").c_str()); } } } } frmExportToDB->txtDBUserName->Text = frmMain->DBConfig->GetDBAttributeValue(DBName,"UserName"); frmExportToDB->txtDBPassword->Text = frmMain->DBConfig->GetDBAttributeValue(DBName,"Password",true); frmExportToDB->cbxDataBases->Items->Add(frmMain->DBConfig->GetDBAttributeValue(DBName,"DataBase")); frmExportToDB->cbxDataBases->ItemIndex = 0; frmExportToDB->txtDBPort->Text = frmMain->DBConfig->GetDBAttributeValue(DBName,"Port"); frmExportToDB->txtTableName->Text = TableName; frmExportToDB->txtMaxError->Text = IntToStr(MaxError); frmExportToDB->cbxTransFieldValue->Checked = TransFieldValue; if(frmExportToDB->LoadFileList(FileList,BillName)) { if(SlentMode) { if(!frmExportToDB->ManualStartJob()) { if(frmExportToDB->TermByUser) { ProcessExitCode = 98; throw new Exception("任务被用户中止"); } else { throw new Exception("发生错误"); } } } else { frmExportToDB->btnStartClick(NULL); frmExportToDB->ShowModal(); } Result = true; } else { ProcessExitCode = 5; throw new Exception("加载文件列表失败"); } } catch(Exception * E) { ShowErrorMessage(Application->Handle,(E->Message).c_str(),false,99); if(ProcessExitCode == 0) ProcessExitCode = 99; Result = false; } SaveLog("*****************任务结束.*******************"); if(IdFTP != NULL) { delete IdFTP; IdFTP = NULL; } if(FileList != NULL) { delete FileList; FileList = NULL; } if(frmExportToDB != NULL) { delete frmExportToDB; frmExportToDB = NULL; } if(frmMain != NULL) { delete frmMain; frmMain = NULL; } return Result; }