Given below program,matchWord works fine when the source string and the string been found are English characters.But when I tested with Chinese characters,say ,searching "文" in "中文的文字是象形字",`matchWord`(匹配整个单词) makes big difference but not expected result.
Don't know whether this behavior's designed as expected.
Code: Select all
import "ecere"
//import "StringsBox"
//namespace gui::controls;
class gui::controls::Form1 : Window
{
caption = "Form1";
background = activeBorder;
borderStyle = sizable;
hasMaximize = true;
hasMinimize = true;
hasClose = true;
size = { 496, 324 };
anchor = { horz = -35, vert = 31 };
bool matchWord;
bool matchCase;
Button chkMatchWord
{
this, caption = "匹配整个单词", background = white, size = { 144, 15 }, position = { 24, 200 }, isCheckbox = true;
bool NotifyClicked(Button button, int x, int y, Modifiers mods)
{
matchWord=button.checked;
return true;
}
bool OnStateChange(WindowState state, Modifiers mods)
{
//
return true;
}
};
Button rdxIcmp
{
this, caption = "忽略大小写", size = { 88, 15 }, position = { 24, 144 }, isRadio = true;
bool NotifyClicked(Button button, int x, int y, Modifiers mods)
{
matchCase=!button.checked;
return true;
}
bool OnStateChange(WindowState state, Modifiers mods)
{
//
return true;
}
};
Button rdxCmp
{
this, caption = "区分大小写", size = { 86, 15 }, position = { 120, 144 }, isRadio = true;
bool NotifyClicked(Button button, int x, int y, Modifiers mods)
{
matchCase=button.checked;
return true;
}
bool OnStateChange(WindowState state, Modifiers mods)
{
return true;
}
};
Label label3 { this, caption = "待查找字符串", size = { 148, 13 }, position = { 16, 80 } };
Label label2 { this, caption = "源字符串:", size = { 84, 13 }, position = { 16, 24 } };
//bool matchWord;//=false;
//bool ignoreCase;//=true;
//StringsBox box{};
EditBox editBox1 { this, caption = "editBox1", size = { 254, 219 }, position = { 208, 16 } };
Button button1
{
this, caption = "(O)操作字符串", altO, size = { 154, 21 }, position = { 40, 256 };
bool NotifyClicked(Button button, int x, int y, Modifiers mods)
{
String source=this.editBox3.contents;//CopyString("This is a long string");
String word=this.editBox2.contents;
int index=-1;
char* result=SearchString(source,0,word,matchCase,matchWord) ;
if(result)
{
char idxStr[256];
index=result-source;
sprintf(idxStr,"Found at index of %d",index);
label1.text=idxStr;//itoa(index);
}
else
{
label1.text="Not found!";
}
return true;
}
};
EditBox editBox3 { this, caption = "editBox3", size = { 174, 19 }, position = { 16, 48 }, contents = "This is a very long string" };
Label label1 { this, caption = "<=单击开始查找:", size = { 180, 21 }, position = { 208, 256 } };
EditBox editBox2 { this, caption = "editBox2", size = { 166, 19 }, position = { 16, 104 }, contents = "is" };
Button button2
{
this, caption = "(X)退出", altX, isDefault = true, position = { 400, 256 };
bool NotifyClicked(Button button, int x, int y, Modifiers mods)
{
Destroy(0);
return true;
}
};
bool OnCreate(void)
{
return true;
}
bool OnPostCreate(void)
{
this.rdxCmp.checked=true;
this.chkMatchWord.checked=true;
matchWord=this.chkMatchWord.checked;
matchCase=this.rdxCmp.checked;
return true;
}
}
Form1 form1 {};