Features:
- Import vocabularies from Dr.eye and Merriam-Webster online dictionary
- Install KK phonics font in your system
- Support pronunciation through internet
//--------------------------------------------------------------------------- #include <vcl.h> #include <shlwapi.h> #include <GdiPlus.h> #pragma comment( lib, "shlwapi.lib") #pragma comment( lib, "gdiplus.lib") TForm1 *Form1; bool bChangeFontSize = false; //--------------------------------------------------------------------------- AnsiString url="http://www.dreye.com/axis/ddict.jsp?w="; AnsiString search_word,actual_word,multi_word; AnsiString play_path; AnsiString phonetic[67]; int batch_flag=0; AnsiString *batch_vocabulary; int vocabulary_count=0; int vocabulary_index=0; Vocabulary *words; vector<Vocabulary> vector_words; AnsiString SearchHistory; int inc = 1; //multiple meanings bool bOpenSite = false; AnsiString PreStr[30]; AnsiString SelVoc[200]; int preNum = 18; int SelNum = 0; int currentPos = 0; AnsiString *BatchVoc; int batch_num = 0; int iBatchCurrentPos = 0; bool bBatchAutoInsert = false; bool bBatchMultiVoc = false; AnsiString *FangVoc; int Fang_num = 0; int iFangCurrentPos = 0; bool bFangSemiAutoUpdate = false; bool bFangAutoUpdate = false; bool bNewFang = false; AnsiString OriginalList; //--------------------------------------------------------------------------- void __fastcall TForm1::SetFontStyle(TRichEdit *RichEdit,int start, int length) { int r; AnsiString S; S=RichEdit->Text; TTextAttributes *AText = new TTextAttributes(RichEdit,atSelected); RichEdit->SelStart = start; RichEdit->SelLength = length; AText->Name = "Be Young's Phonetic Symbol"; if(bChangeFontSize) AText->Size = iFontSize; else AText->Size = 12; } //--------------------------------------------------------------------------- void __fastcall TForm1::GetData(int MSearch) { if(Edt_Voc->Text != "") { if(MSearch == 0) Memo_Dreye->Clear(); AnsiString search_word=Edt_Voc->Text.LowerCase(); AnsiString body,final_search_word; if(search_word.Pos(" ")>0) { AnsiString tmp = search_word; final_search_word = StringReplace(tmp.c_str(), " ", "%20", TReplaceFlags() << rfReplaceAll).c_str(); } else final_search_word = search_word; try { Application->ProcessMessages(); body=IdHTTP1->Get(url+final_search_word); Application->ProcessMessages(); } catch(EIdHTTPProtocolException &e) {;} words[0].explain=body.c_str(); Application->ProcessMessages(); AnsiString del_to_mp3_path="param name=\"FileName\" value=\""; words[0].explain.erase(0,words[0].explain.find(del_to_mp3_path.c_str())+del_to_mp3_path.Length()); play_path=words[0].explain.substr(0,words[0].explain.find("\">")).c_str(); AnsiString title = "<div class=ptitle>"; if(words[0].explain.find(title.c_str())!=string::npos) words[0].explain.erase(0,words[0].explain.find(title.c_str())+title.Length()); AnsiString play_str="onclick=\"PlayAU()\">"; if(words[0].explain.find(play_str.c_str())!=string::npos) words[0].explain.erase(0,words[0].explain.find(play_str.c_str())+play_str.Length()); actual_word=words[0].explain.substr(0,words[0].explain.find("<")).c_str(); actual_word=actual_word.Trim(); multi_word=actual_word; AnsiString sup_start="<sup>"; AnsiString sup_end="</sup>"; if(words[0].explain.find(sup_start.c_str())!=string::npos) { Application->ProcessMessages(); AnsiString tmp=words[0].explain.substr(words[0].explain.find(sup_start.c_str()),words[0].explain.find(sup_end.c_str())).c_str(); tmp=StringReplace(tmp.c_str(), sup_start.c_str(), "@", TReplaceFlags() << rfReplaceAll).c_str(); tmp=tmp.SubString(0,tmp.Pos("<")-1); multi_word=actual_word+tmp; Edt_Voc->Text=multi_word; Panel4->Visible = true; bBatchMultiVoc = true; if(!bFangAutoUpdate) ShowMessage("Multiple Meanings"); } else { Panel4->Visible = false; bBatchMultiVoc = false; } if(actual_word.LowerCase()!=search_word.LowerCase()) { if(final_search_word.Pos("@")<1) { bBatchMultiVoc = true; if(!bFangAutoUpdate) ShowMessage("找不到:"+search_word+". 相似字:"+actual_word); } } if(inc>1 && StrToInt(multi_word.SubString(multi_word.Pos("@")+1,1).c_str())==1 )l { Btn_Next->Enabled = false; Edt_Voc->Text = Edt_Voc->Text.SubString(0,Edt_Voc->Text.Pos("@")-1); inc--; return; } else Btn_Next->Enabled = true; if(inc<=0) { inc = 1; return; } words[0].explain.erase(0,words[0].explain.find("KK: [")+6); words[0].explain.insert(0,"["); if(words[0].explain.find("<div id=\"rad\">")!=string::npos) words[0].explain.erase(words[0].explain.find(""),words[0].explain.length()); AnsiString image_src; image_src="<img border=0 align=absbottom src=\"http://www.dreye.com/tw/dict/IMAGES/DIC/PN/"; if( words[0].explain.find(image_src.c_str())!=string::npos) { string tmp_kk=words[0].explain.substr(0,words[0].explain.find("DJ: [")-4); //ShowMessage(words[0].explain.c_str()); AnsiString kk_str; kk_str=StringReplace(tmp_kk.c_str(), image_src, "", TReplaceFlags() << rfReplaceAll); kk_str=StringReplace(kk_str, ".GIF\">", "][", TReplaceFlags() << rfReplaceAll); kk_str=StringReplace(kk_str, "[]", "", TReplaceFlags() << rfReplaceAll); kk_str=StringReplace(kk_str, "<br>", "", TReplaceFlags() << rfReplaceAll); kk_str=kk_str.Trim(); if( words[0].explain.find("img border=0 align=absbottom src=\"http://www.dreye.com/tw/dict/IMAGES/DIC/PN/")!=string::npos) kk_str=StringReplace(kk_str.c_str(), "img border=0 align=absbottom src=\"http://www.dreye.com/tw/dict/IMAGES/DIC/PN/", "", TReplaceFlags() << rfReplaceAll); kk_str = StringReplace(kk_str.c_str(), "\n", "", TReplaceFlags() << rfReplaceAll).t_str(); kk_str = StringReplace(kk_str.c_str(), "[]", "", TReplaceFlags() << rfReplaceAll).t_str(); words[0].kk=kk_str; } else { words[0].kk = ""; } //words[0].word=search_word; words[0].word=actual_word; words[0].explain.erase(0,words[0].explain.find("</div>")+6); string del_str[12]; del_str[0]="</span></div>"; del_str[1]="<div class=peng>"; del_str[2]="<div class=pchi>"; del_str[3]="<ol>"; del_str[4]="</ol>"; del_str[5]="<li>"; del_str[6]="</li>"; del_str[7]="<div class=pcixin>"; del_str[8]="</div>"; del_str[9]="。<div class=pexplain>"; del_str[10]="<div class=\"break\">"; del_str[11]="<div class=pexplain>"; while(words[0].explain.find(del_str[1])!=string::npos) { Application->ProcessMessages(); words[0].explain.erase(words[0].explain.find(del_str[1]),words[0].explain.find(del_str[0])-words[0].explain.find(del_str[1])); words[0].explain.erase(words[0].explain.find(del_str[0]),del_str[0].length()); words[0].explain.erase(words[0].explain.find(del_str[2]),words[0].explain.find(del_str[0])-words[0].explain.find(del_str[2])); words[0].explain.erase(words[0].explain.find(del_str[0]),del_str[0].length()); } if(words[0].explain.find(del_str[10])!=string::npos) { words[0].explain.erase(words[0].explain.find(del_str[10]),words[0].explain.length()); } for(int i=3;i<=6;i++) { while(words[0].explain.find(del_str[i])!=string::npos) { words[0].explain.erase(words[0].explain.find(del_str[i]),del_str[i].length()); } } words[0].explain=StringReplace(words[0].explain.c_str(), "\n", "", TReplaceFlags() << rfReplaceAll).t_str(); words[0].explain=StringReplace(words[0].explain.c_str(), del_str[7].c_str(), "<div class=pcixin>", TReplaceFlags() << rfReplaceAll).t_str(); words[0].explain=StringReplace(words[0].explain.c_str(), del_str[8].c_str(), "。", TReplaceFlags() << rfReplaceAll).t_str(); words[0].explain=StringReplace(words[0].explain.c_str(), del_str[9].c_str(), "", TReplaceFlags() << rfReplaceAll).t_str(); words[0].explain=StringReplace(words[0].explain.c_str(), del_str[7].c_str(), "", TReplaceFlags() << rfReplaceAll).t_str(); words[0].explain=StringReplace(words[0].explain.c_str(), del_str[11].c_str(), "", TReplaceFlags() << rfReplaceAll).t_str(); AnsiString cixing[2]; cixing[0]="a."; cixing[1]="ad."; words[0].explain=StringReplace(words[0].explain.c_str(), cixing[0].c_str(), "adj.", TReplaceFlags() << rfReplaceAll).t_str(); words[0].explain=StringReplace(words[0].explain.c_str(), cixing[1].c_str(), "adv.", TReplaceFlags() << rfReplaceAll).t_str(); if(words[0].explain.find("<br>")!=string::npos) words[0].explain.erase(words[0].explain.find("
"),words[0].explain.length()); Memo_Dreye->Lines->Add(words[0].explain.c_str()); //set phonetic SetPhoneticTable(); int kk_count=0; AnsiString phonetic_str=""; while(words[0].kk.Pos("]")>0) { Application->ProcessMessages(); phonetic_str+=phonetic[words[0].kk.SubString(2,3).ToInt()]; words[0].kk.Delete(1,5); kk_count++; } Edt_KK->Text = "[" + phonetic_str + "]"; IdHTTP1->Disconnect(); if(!CheckBox_EE->Checked) { // Get Webster AnsiString web_voc = Edt_Voc->Text; if(web_voc.Pos("@")>0) web_voc = web_voc.SubString(1,web_voc.Pos("@")-1); AnsiString wikiurl="http://kaoshi.wobuxihuan.org/w/index.php?title="+web_voc+"&action=edit&section=1"; try { AnsiString webster_body=IdHTTP2->Get(wikiurl); words[0].webster = webster_body.c_str(); AnsiString pos_tmp = words[0].webster.c_str(); if(pos_tmp.Pos("Webster")>0) { words[0].webster.erase(0,words[0].webster.find("Webster Collegiate </span></h3>")+31); words[0].webster.erase(words[0].webster.find("")-words[0].webster.find("<a name=\".E8.AE.B0.E5.BF.86")+7); AnsiString web_temp = words[0].webster.c_str(); while(web_temp.Pos("<")>0) { int start_pos = web_temp.Pos("<"); int end_pos = web_temp.Pos(">"); web_temp = web_temp.Delete(start_pos,end_pos - start_pos +1); } while(web_temp.Pos(" ")>0) { int start_pos = web_temp.Pos(" "); web_temp = web_temp.Delete(start_pos,6); } while(web_temp.Pos("<")>0) { int start_pos = web_temp.Pos("<"); web_temp = web_temp.Delete(start_pos,4); } while(web_temp.Pos("[sup]")>0) { int start_pos = web_temp.Pos("[sup]"); web_temp = web_temp.Delete(start_pos,5); } while(web_temp.Pos("[/sup]")>0) { int start_pos = web_temp.Pos("[/sup]"); web_temp = web_temp.Delete(start_pos,6); } RichEdit1->Text = web_temp; Memo_Webster->Text = RichEdit1->Text; } } catch(EIdHTTPProtocolException &e) {;} } if(CheckBox_Root->Checked) { AnsiString actual_word2; bool isPrestr = false; int prePos=19; AnsiString strRoot; for(int x=0;x<preNum;x++) { //PreStr if( Edt_Voc->Text.SubString(1,PreStr[x].Length()) == PreStr[x]) { isPrestr = true; prePos = x; break; } } if(isPrestr) { strRoot = Edt_Voc->Text.SubString(PreStr[prePos].Length() + 1,Edt_Voc->Text.Length()-PreStr[prePos].Length() + 1); try { Application->ProcessMessages(); body=IdHTTP1->Get(url+strRoot); Application->ProcessMessages(); } catch(EIdHTTPProtocolException &e) {;} words[1].explain=body.c_str(); Application->ProcessMessages(); AnsiString del_to_mp3_path="param name=\"FileName\" value=\""; words[1].explain.erase(0,words[1].explain.find(del_to_mp3_path.c_str())+del_to_mp3_path.Length()); AnsiString title = "<div class=ptitle>"; if(words[1].explain.find(title.c_str())!=string::npos) words[1].explain.erase(0,words[1].explain.find(title.c_str())+title.Length()); AnsiString play_str="onclick=\"PlayAU()\">"; if(words[1].explain.find(play_str.c_str())!=string::npos) words[1].explain.erase(0,words[1].explain.find(play_str.c_str())+play_str.Length()); actual_word2=words[1].explain.substr(0,words[1].explain.find("<")).c_str(); actual_word2=actual_word2.Trim(); multi_word=actual_word2; AnsiString sup_start="<sup>"; AnsiString sup_end="</sup>"; if(words[1].explain.find(sup_start.c_str())!=string::npos) { Application->ProcessMessages(); AnsiString tmp=words[1].explain.substr(words[1].explain.find(sup_start.c_str()),words[1].explain.find(sup_end.c_str())).c_str(); tmp=StringReplace(tmp.c_str(), sup_start.c_str(), "@", TReplaceFlags() << rfReplaceAll).c_str(); tmp=tmp.SubString(0,tmp.Pos("<")-1); multi_word=actual_word2+tmp; Memo_Memo->Lines->Add(strRoot + " "); if(!bFangAutoUpdate) ShowMessage("Multiple Meanings"); } else { bool notFound = false; if(actual_word2.LowerCase()!=strRoot.LowerCase()) { if(final_search_word.Pos("@")<1) notFound = true; } if(!notFound) { words[1].explain.erase(0,words[1].explain.find("KK: [")+6); words[1].explain.insert(0,"["); if(words[1].explain.find("<div id=\"rad\">")!=string::npos) words[1].explain.erase(words[1].explain.find(""),words[1].explain.length()); AnsiString image_src; image_src="<img border=0 align=absbottom src=\"http://www.dreye.com/tw/dict/IMAGES/DIC/PN/"; if( words[1].explain.find(image_src.c_str())!=string::npos) { string tmp_kk=words[1].explain.substr(0,words[1].explain.find("DJ: [")-4); AnsiString kk_str; kk_str=StringReplace(tmp_kk.c_str(), image_src, "", TReplaceFlags() << rfReplaceAll); kk_str=StringReplace(kk_str, ".GIF\">", "][", TReplaceFlags() << rfReplaceAll); kk_str=StringReplace(kk_str, "[]", "", TReplaceFlags() << rfReplaceAll); kk_str=StringReplace(kk_str, "<br>", "", TReplaceFlags() << rfReplaceAll); kk_str=kk_str.Trim(); if( words[1].explain.find("img border=0 align=absbottom src=\"http://www.dreye.com/tw/dict/IMAGES/DIC/PN/")!=string::npos) kk_str=StringReplace(kk_str.c_str(), "img border=0 align=absbottom src=\"http://www.dreye.com/tw/dict/IMAGES/DIC/PN/", "", TReplaceFlags() << rfReplaceAll); kk_str = StringReplace(kk_str.c_str(), "\n", "", TReplaceFlags() << rfReplaceAll).t_str(); kk_str = StringReplace(kk_str.c_str(), "[]", "", TReplaceFlags() << rfReplaceAll).t_str(); words[1].kk=kk_str; } else { words[1].kk = ""; } //words[1].word=search_word; words[1].word=actual_word2; words[1].explain.erase(0,words[1].explain.find("</div>")+6); string del_str[12]; del_str[0]="</span></div>"; del_str[1]="<div class=peng>"; del_str[2]="<div class=pchi>"; del_str[3]="<ol>"; del_str[4]="</ol>"; del_str[5]="<li>"; del_str[6]="</li>"; del_str[7]="<div class=pcixin>"; del_str[8]="</div>"; del_str[9]="。<div class=pexplain>"; del_str[10]="<div class=\"break\">"; del_str[11]="<div class=pexplain>"; while(words[1].explain.find(del_str[1])!=string::npos) { Application->ProcessMessages(); words[1].explain.erase(words[1].explain.find(del_str[1]),words[1].explain.find(del_str[0])-words[1].explain.find(del_str[1])); words[1].explain.erase(words[1].explain.find(del_str[0]),del_str[0].length()); words[1].explain.erase(words[1].explain.find(del_str[2]),words[1].explain.find(del_str[0])-words[1].explain.find(del_str[2])); words[1].explain.erase(words[1].explain.find(del_str[0]),del_str[0].length()); } if(words[1].explain.find(del_str[10])!=string::npos) { words[1].explain.erase(words[1].explain.find(del_str[10]),words[1].explain.length()); } for(int i=3;i<=6;i++) { while(words[1].explain.find(del_str[i])!=string::npos) { words[1].explain.erase(words[1].explain.find(del_str[i]),del_str[i].length()); } } words[1].explain=StringReplace(words[1].explain.c_str(), "\n", "", TReplaceFlags() << rfReplaceAll).t_str(); words[1].explain=StringReplace(words[1].explain.c_str(), del_str[7].c_str(), "<div class=pcixin>", TReplaceFlags() << rfReplaceAll).t_str(); words[1].explain=StringReplace(words[1].explain.c_str(), del_str[8].c_str(), "。", TReplaceFlags() << rfReplaceAll).t_str(); words[1].explain=StringReplace(words[1].explain.c_str(), del_str[9].c_str(), "", TReplaceFlags() << rfReplaceAll).t_str(); words[1].explain=StringReplace(words[1].explain.c_str(), del_str[7].c_str(), "", TReplaceFlags() << rfReplaceAll).t_str(); words[1].explain=StringReplace(words[1].explain.c_str(), del_str[11].c_str(), "", TReplaceFlags() << rfReplaceAll).t_str(); AnsiString cixing[2]; cixing[0]="a."; cixing[1]="ad."; words[1].explain=StringReplace(words[1].explain.c_str(), cixing[0].c_str(), "adj.", TReplaceFlags() << rfReplaceAll).t_str(); words[1].explain=StringReplace(words[1].explain.c_str(), cixing[1].c_str(), "adv.", TReplaceFlags() << rfReplaceAll).t_str(); if(words[1].explain.find("<br>")!=string::npos) words[1].explain.erase(words[1].explain.find("
"),words[1].explain.length()); AnsiString RootAdd = strRoot + " " + words[1].explain.c_str(); if(Memo_Memo->Text.Pos(RootAdd)<1) Memo_Memo->Lines->Add(strRoot + " " + words[1].explain.c_str()); else ShowMessage("Data Exist"); } } IdHTTP1->Disconnect(); } } } } //--------------------------------------------------------------------------- void __fastcall TForm1::Btn_AddClick(TObject *Sender) { if(Edit_RB_List->Text == "0") { CheckBox_RB->Checked = false; CheckBox_EL->Checked = true; } Label_NextProgress->Caption = ""; int source = 0x00; if(CheckBox_RB->Checked) source += 0x01; if(CheckBox_BL->Checked) source += 0x02; if(CheckBox_BK->Checked) source += 0x04; if(CheckBox_EL->Checked) source += 0x08; AnsiString voc = Edt_Voc->Text; AnsiString kk = Edt_KK->Text; AnsiString explain = Memo_Explain->Text; AnsiString memory = Edit_Mem->Text; AnsiString notice = Edit_Note->Text; AnsiString sameroot = Edit_Same->Text; AnsiString antonym = Edit_Antonym->Text; AnsiString reference = Edit_Ref->Text; AnsiString like = Edit_Like->Text; AnsiString derive = Edit_Derive->Text; AnsiString example = Edit_Example->Text; AnsiString phrase = Edit_Phrase->Text; AnsiString term = Edit_Term->Text; AnsiString dreye = Memo_Dreye->Text; AnsiString othermemo = Memo_Memo->Text; AnsiString webster = Memo_Webster->Text; AnsiString tmp_webster; for(int i=0;i<Memo_Webster->Lines->Count;i++) { if(Memo_Webster->Lines->Strings[i] != "") tmp_webster = tmp_webster + Memo_Webster->Lines->Strings[i] + "\n"; } webster = tmp_webster; int frequency = Edit_Freq->Text.ToInt(); int RB_List = Edit_RB_List->Text.ToInt(); int mark=0; if(CheckBox_Mark->Checked) mark = 1; int forecast=0; if(CheckBox_Forecast->Checked == true) forecast = 1; ADOTable1->Active=false; ADOConnection1->Open(); ADOQuery1->Close(); ADOQuery1->Open(); AnsiString temp_explain; temp_explain = explain; if(temp_explain.Pos("'")>0) explain = StringReplace(temp_explain.c_str(), "'", "''", TReplaceFlags() << rfReplaceAll).c_str(); AnsiString temp_othermemo; temp_othermemo = othermemo; if(temp_othermemo.Pos("'")>0) othermemo = StringReplace(temp_othermemo.c_str(), "'", "''", TReplaceFlags() << rfReplaceAll).c_str(); AnsiString temp_example; temp_example = example; if(temp_example.Pos("'")>0) example = StringReplace(temp_example.c_str(), "'", "''", TReplaceFlags() << rfReplaceAll).c_str(); AnsiString temp_webster; temp_webster = webster; if(temp_webster.Pos("'")>0) webster = StringReplace(temp_webster.c_str(), "'", "''", TReplaceFlags() << rfReplaceAll).c_str(); AnsiString temp_dreye; temp_dreye = dreye; if(temp_dreye.Pos("'")>0) dreye = StringReplace(temp_dreye.c_str(), "'", "''", TReplaceFlags() << rfReplaceAll).c_str(); AnsiString tmp_memo; for(int i=0;i<Memo_Memo->Lines->Count;i++) { if(Memo_Memo->Lines->Strings[i] != "") tmp_memo = tmp_memo + Memo_Memo->Lines->Strings[i] + "\n"; } othermemo = tmp_memo; ADOQuery1->SQL->Text= "insert into VocDB( " "WORD, KK, RB_LIST, EXPLAIN, MARK, SOURCE, MEMORY, " "NOTICE, ROOT, ANTONYM, REFERENCE, CONTOUR, DERIVE, EXAMPLE, " "PHRASE, DREYE, OTHERMEMO, FREQUENCE_BLACK, CATEGORY, FORECAST, TERM, WEBSTER) " " values('"+ voc + "', '" + kk + "', '" + IntToStr(RB_List) + "', '" + explain + "', '" + IntToStr(mark) + "', '" + IntToStr(source) + "', '" + memory + "', '" + notice + "', '" + sameroot + "', '" + antonym + "', '" + reference + "', '" + like + "', '" + derive + "', '" + example + "', '" + phrase + "', '" + dreye + "', '" + othermemo + "', '" + IntToStr(frequency) + "', '" + category + "', '" + IntToStr(forecast)+ "', '" + term+ "', '" + webster+"')"; ADOQuery1->ExecSQL(); Form1->ADOQuery1->Close(); TStrings *List=new TStringList; ADOConnection1->GetTableNames(List); ADOQuery1->Close(); ADOQuery1->SQL->Text="select * from VocDB order by RB_LIST, WORD"; ADOQuery1->ExecSQL(); ADOQuery1->Open(); StatusBar1->Panels->Items[0]->Text ="目前共有 " + IntToStr(ADOQuery1->RecordCount) + " 個單字"; GridSize(); ADOQuery1->Last(); Button7->OnClick(Sender); Panel4->Visible = false; Edit_Freq->Text = 0; bOpenSite = false; Edt_Voc->SetFocus(); Btn_Add->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::DBGrid1DblClick(TObject *Sender) { GridSize(); if(ADOQuery1->RecordCount > 0) { Btn_Update->Enabled = true; if(RadioButton_FirstUpper->Checked) Edt_Voc->Text = DBGrid1->DataSource->DataSet->FieldByName("WORD")->AsString.SubString(1,1).UpperCase() + DBGrid1->DataSource->DataSet->FieldByName("WORD")->AsString.SubString(2,DBGrid1->DataSource->DataSet->FieldByName("WORD")->AsString.Length()-1); else if(RadioButton_UpperCase->Checked) Edt_Voc->Text = DBGrid1->DataSource->DataSet->FieldByName("WORD")->AsString.UpperCase(); else if(RadioButton_LowerCase->Checked) Edt_Voc->Text = DBGrid1->DataSource->DataSet->FieldByName("WORD")->AsString.LowerCase(); else if(RadioButton_Default->Checked) Edt_Voc->Text = DBGrid1->DataSource->DataSet->FieldByName("WORD")->AsString; Edt_KK->Text = DBGrid1->DataSource->DataSet->FieldByName("KK")->AsString; Edit_RB_List->Text = DBGrid1->DataSource->DataSet->FieldByName("RB_LIST")->AsString; Memo_Explain->Text = DBGrid1->DataSource->DataSet->FieldByName("EXPLAIN")->AsString; Edit_Mem->Text = DBGrid1->DataSource->DataSet->FieldByName("MEMORY")->AsString; Edit_Note->Text = DBGrid1->DataSource->DataSet->FieldByName("NOTICE")->AsString; Edit_Same->Text = DBGrid1->DataSource->DataSet->FieldByName("ROOT")->AsString; Edit_Antonym->Text = DBGrid1->DataSource->DataSet->FieldByName("ANTONYM")->AsString; Edit_Ref->Text = DBGrid1->DataSource->DataSet->FieldByName("REFERENCE")->AsString; Edit_Like->Text = DBGrid1->DataSource->DataSet->FieldByName("CONTOUR")->AsString; Edit_Derive->Text = DBGrid1->DataSource->DataSet->FieldByName("DERIVE")->AsString; Edit_Example->Text = DBGrid1->DataSource->DataSet->FieldByName("EXAMPLE")->AsString; Edit_Phrase->Text = DBGrid1->DataSource->DataSet->FieldByName("PHRASE")->AsString; Memo_Dreye->Text = DBGrid1->DataSource->DataSet->FieldByName("DREYE")->AsString; Memo_Memo->Text = DBGrid1->DataSource->DataSet->FieldByName("OTHERMEMO")->AsString; Edit_Term->Text = DBGrid1->DataSource->DataSet->FieldByName("TERM")->AsString; Memo_Webster->Text = DBGrid1->DataSource->DataSet->FieldByName("WEBSTER")->AsString; int source = DBGrid1->DataSource->DataSet->FieldByName("SOURCE")->AsInteger; CheckBox_RB->Checked = false; CheckBox_BL->Checked = false; CheckBox_BK->Checked = false; CheckBox_EL->Checked = false; if(source&0x01) CheckBox_RB->Checked = true; if(source&0x02) CheckBox_BL->Checked = true; if(source&0x04) CheckBox_BK->Checked = true; if(source&0x08) CheckBox_EL->Checked = true; int mark = DBGrid1->DataSource->DataSet->FieldByName("MARK")->AsInteger; if(mark == 0) CheckBox_Mark->Checked = false; else CheckBox_Mark->Checked = true; int forecast = DBGrid1->DataSource->DataSet->FieldByName("FORECAST")->AsInteger; if(forecast == 0) CheckBox_Forecast->Checked = false; else CheckBox_Forecast->Checked = true; Edit_Freq->Text = DBGrid1->DataSource->DataSet->FieldByName("FREQUENCE_BLACK")->AsInteger; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Btn_AutoSearchRootClick(TObject *Sender) { AnsiString body,final_search_word; bool isPrestr = false; int prePos=19; AnsiString strRoot; for(int x=0;x<preNum;x++) { //PreStr if( Edt_Voc->Text.SubString(1,PreStr[x].Length()) == PreStr[x]) { isPrestr = true; prePos = x; break; } } if(isPrestr) { strRoot = Edt_Voc->Text.SubString(PreStr[prePos].Length() + 1,Edt_Voc->Text.Length()-PreStr[prePos].Length() + 1); try { Application->ProcessMessages(); body=IdHTTP1->Get(url+strRoot); Application->ProcessMessages(); } catch(EIdHTTPProtocolException &e) {;} words[2].explain=body.c_str(); Application->ProcessMessages(); AnsiString del_to_mp3_path="param name=\"FileName\" value=\""; words[2].explain.erase(0,words[2].explain.find(del_to_mp3_path.c_str())+del_to_mp3_path.Length()); play_path=words[2].explain.substr(0,words[2].explain.find("\">")).c_str(); AnsiString title = "<div class=ptitle>"; if(words[2].explain.find(title.c_str())!=string::npos) words[2].explain.erase(0,words[2].explain.find(title.c_str())+title.Length()); AnsiString play_str="onclick=\"PlayAU()\">"; if(words[2].explain.find(play_str.c_str())!=string::npos) words[2].explain.erase(0,words[2].explain.find(play_str.c_str())+play_str.Length()); actual_word=words[2].explain.substr(0,words[2].explain.find("<")).c_str(); actual_word=actual_word.Trim(); multi_word=actual_word; AnsiString sup_start="<sup>"; AnsiString sup_end="</sup>"; if(words[2].explain.find(sup_start.c_str())!=string::npos) { Application->ProcessMessages(); AnsiString tmp=words[2].explain.substr(words[2].explain.find(sup_start.c_str()),words[2].explain.find(sup_end.c_str())).c_str(); tmp=StringReplace(tmp.c_str(), sup_start.c_str(), "@", TReplaceFlags() << rfReplaceAll).c_str(); tmp=tmp.SubString(0,tmp.Pos("<")-1); multi_word=actual_word+tmp; Memo_Memo->Lines->Add(strRoot + " "); if(!bFangAutoUpdate) ShowMessage("Multiple Meanings"); } else { bool notFound = false; if(actual_word.LowerCase()!=strRoot.LowerCase()) { if(final_search_word.Pos("@")<1) notFound = true; } if(!notFound) { words[2].explain.erase(0,words[2].explain.find("KK: [")+6); words[2].explain.insert(0,"["); if(words[2].explain.find("<div id=\"rad\">")!=string::npos) words[2].explain.erase(words[2].explain.find(""),words[2].explain.length()); AnsiString image_src; image_src="<img border=0 align=absbottom src=\"http://www.dreye.com/tw/dict/IMAGES/DIC/PN/"; if( words[2].explain.find(image_src.c_str())!=string::npos) { string tmp_kk=words[2].explain.substr(0,words[2].explain.find("DJ: [")-4); AnsiString kk_str; kk_str=StringReplace(tmp_kk.c_str(), image_src, "", TReplaceFlags() << rfReplaceAll); kk_str=StringReplace(kk_str, ".GIF\">", "][", TReplaceFlags() << rfReplaceAll); kk_str=StringReplace(kk_str, "[]", "", TReplaceFlags() << rfReplaceAll); kk_str=StringReplace(kk_str, "<br>", "", TReplaceFlags() << rfReplaceAll); kk_str=kk_str.Trim(); if( words[2].explain.find("img border=0 align=absbottom src=\"http://www.dreye.com/tw/dict/IMAGES/DIC/PN/")!=string::npos) kk_str=StringReplace(kk_str.c_str(), "img border=0 align=absbottom src=\"http://www.dreye.com/tw/dict/IMAGES/DIC/PN/", "", TReplaceFlags() << rfReplaceAll); kk_str = StringReplace(kk_str.c_str(), "\n", "", TReplaceFlags() << rfReplaceAll).t_str(); kk_str = StringReplace(kk_str.c_str(), "[]", "", TReplaceFlags() << rfReplaceAll).t_str(); words[2].kk=kk_str; } else { words[2].kk = ""; } words[2].word=actual_word; words[2].explain.erase(0,words[2].explain.find("</div>")+6); string del_str[12]; del_str[0]="</span></div>"; del_str[1]="<div class=peng>"; del_str[2]="<div class=pchi>"; del_str[3]="<ol>"; del_str[4]="</ol>"; del_str[5]="<li>"; del_str[6]="</li>"; del_str[7]="<div class=pcixin>"; del_str[8]="</div>"; del_str[9]="。<div class=pexplain>"; del_str[10]="<div class=\"break\">"; del_str[11]="<div class=pexplain>"; while(words[2].explain.find(del_str[1])!=string::npos) { Application->ProcessMessages(); words[2].explain.erase(words[2].explain.find(del_str[1]),words[2].explain.find(del_str[0])-words[2].explain.find(del_str[1])); words[2].explain.erase(words[2].explain.find(del_str[0]),del_str[0].length()); words[2].explain.erase(words[2].explain.find(del_str[2]),words[2].explain.find(del_str[0])-words[2].explain.find(del_str[2])); words[2].explain.erase(words[2].explain.find(del_str[0]),del_str[0].length()); } if(words[2].explain.find(del_str[10])!=string::npos) { words[2].explain.erase(words[2].explain.find(del_str[10]),words[2].explain.length()); } for(int i=3;i<=6;i++) { while(words[2].explain.find(del_str[i])!=string::npos) { words[2].explain.erase(words[2].explain.find(del_str[i]),del_str[i].length()); } } words[2].explain=StringReplace(words[2].explain.c_str(), "\n", "", TReplaceFlags() << rfReplaceAll).t_str(); // 清除換行字元 words[2].explain=StringReplace(words[2].explain.c_str(), del_str[7].c_str(), "<div class=pcixin>", TReplaceFlags() << rfReplaceAll).t_str(); words[2].explain=StringReplace(words[2].explain.c_str(), del_str[8].c_str(), "。", TReplaceFlags() << rfReplaceAll).t_str(); words[2].explain=StringReplace(words[2].explain.c_str(), del_str[9].c_str(), "", TReplaceFlags() << rfReplaceAll).t_str(); words[2].explain=StringReplace(words[2].explain.c_str(), del_str[7].c_str(), "", TReplaceFlags() << rfReplaceAll).t_str(); words[2].explain=StringReplace(words[2].explain.c_str(), del_str[11].c_str(), "", TReplaceFlags() << rfReplaceAll).t_str(); AnsiString cixing[2]; cixing[0]="a."; cixing[1]="ad."; words[2].explain=StringReplace(words[2].explain.c_str(), cixing[0].c_str(), "adj.", TReplaceFlags() << rfReplaceAll).t_str(); words[2].explain=StringReplace(words[2].explain.c_str(), cixing[1].c_str(), "adv.", TReplaceFlags() << rfReplaceAll).t_str(); if(words[2].explain.find("<br>")!=string::npos) words[2].explain.erase(words[2].explain.find("
"),words[2].explain.length()); AnsiString RootAdd = strRoot + " " + words[2].explain.c_str(); if(Memo_Memo->Text.Pos(RootAdd)<1) Memo_Memo->Lines->Add(strRoot + " " + words[2].explain.c_str()); else ShowMessage("Data Exist"); } } IdHTTP1->Disconnect(); } } //---------------------------------------------------------------------------