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();
}
}
//---------------------------------------------------------------------------
