Vocabulary Database

Features:

  1. Import vocabularies from Dr.eye and Merriam-Webster online dictionary
  2. Install KK phonics font in your system
  3. Support pronunciation through internet

 

GRE

//---------------------------------------------------------------------------

#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+"&amp;action=edit&amp;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("&nbsp;")>0)      {       int start_pos = web_temp.Pos("&nbsp;");       web_temp = web_temp.Delete(start_pos,6);      }      while(web_temp.Pos("&lt;")>0)      {       int start_pos = web_temp.Pos("&lt;");       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();  } } //---------------------------------------------------------------------------

 

Leave a Reply