📄 umain.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "uMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
// 特别感谢Zswang(伴水)的友情推荐
// IMEEngine类原出处:http://www.mihai-nita.net/article.php?artID=20051215a
// ccrun(老妖)略作修改并在BCB6中调试通过
//---------------------------------------------------------------------------
#include "msime.h"
#include "IMEEngine.h"
void __fastcall TfrmMain::btnTestClick(TObject *Sender)
{
WideString wstrInput(edtInput->Text);
IMEEngine imee;
imee.GetJMorphResult(FELANG_REQ_REV,
FELANG_CMODE_PINYIN
| FELANG_CMODE_NOINVISIBLECHAR, // 紧凑演示拼音,中间不显示空格分隔符
wstrInput.c_bstr());
if(imee.m_pmorrslt)
{
WideString wstrOutput, wstrWord, wstrPinYin;
wstrOutput = WideString(imee.m_pmorrslt->pwchOutput);
wstrOutput = wstrOutput.SubString(1, imee.m_pmorrslt->cchOutput);
mmoOutput->Lines->Clear();
// 输出整句的单字拼音
mmoOutput->Lines->Add(wstrOutput);
// 将句子分隔成词语的数量
mmoOutput->Lines->Add(String().sprintf("分隔为 %d 段", imee.m_pmorrslt->cWDD));
mmoOutput->Lines->Add("----------");
// 将句子分隔成词语并单独加配拼音
for(int i = 0; i < imee.m_pmorrslt->cWDD; i++)
{
// 读取每段的词语或字
wstrWord = wstrInput.SubString(
imee.m_pmorrslt->pWDD[i].wReadPos + 1,
imee.m_pmorrslt->pWDD[i].cchRead);
// 读取每段的拼音
wstrPinYin = wstrOutput.SubString(
imee.m_pmorrslt->pWDD[i].wDispPos + 1,
imee.m_pmorrslt->pWDD[i].cchDisp);
//
if(wstrPinYin.Length() > 0)
wstrWord = wstrWord + "(" + wstrPinYin + ")";
//
mmoOutput->Lines->Add(wstrWord);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::lblWebClick(TObject *Sender)
{
ShellExecute(NULL, "Open", lblWeb->Caption.c_str(), NULL, NULL, SW_SHOW);
}
//---------------------------------------------------------------------------
/*
以下代码为ccrun(老妖)写的简单实现代码
#include <ole2.h>
//---------------------------------------------------------------------------
__fastcall TForm4::TForm4(TComponent* Owner)
: TForm(Owner)
{
OleInitialize(NULL);
}
//---------------------------------------------------------------------------
#include "msime.h"
void __fastcall TForm4::Button1Click(TObject *Sender)
{
static const IID IID_IFELanguage =
{
0x019f7152, 0xe6db, 0x11d0,
{ 0x83, 0xc3, 0x00, 0xc0, 0x4f, 0xdd, 0xb8, 0x2e }
};
// 简体中文
LPCWSTR msime = L"MSIME.China";
CLSID clsid;
if(CLSIDFromString(const_cast<LPWSTR>(msime), &clsid) != S_OK)
return;
//
IFELanguage *pIFELanguage;
if(CoCreateInstance(clsid, NULL, CLSCTX_SERVER,
IID_IFELanguage, (LPVOID*)&pIFELanguage) != S_OK)
return;
if(!pIFELanguage)
return;
if(pIFELanguage->Open() != S_OK)
{
pIFELanguage->Release();
return;
}
DWORD dwCaps;
if(pIFELanguage->GetConversionModeCaps(&dwCaps) != S_OK)
{
pIFELanguage->Close();
pIFELanguage->Release();
}
// 要解析的中文句子
WideString wstrInput = WideString("汉字加拼音演示 妖哥万岁");
MORRSLT *pmorrslt;
if(pIFELanguage->GetJMorphResult(
FELANG_REQ_REV,
FELANG_CMODE_PINYIN |
FELANG_CMODE_NOINVISIBLECHAR,
wstrInput.Length(), wstrInput, NULL, &pmorrslt) != S_OK)
{
pIFELanguage->Close();
pIFELanguage->Release();
}
if(!pmorrslt)
{
pIFELanguage->Close();
pIFELanguage->Release();
}
WideString wstrOutput, wstrWord, wstrPinYin;
wstrOutput = WideString(pmorrslt->pwchOutput);
wstrOutput = wstrOutput.SubString(1, pmorrslt->cchOutput);
// 将句子分隔成词语并单独加配拼音
for(int i = 0; i < pmorrslt->cWDD; i++)
{
// 读取每段的词语或字
wstrWord = wstrInput.SubString(
pmorrslt->pWDD[i].wReadPos + 1,
pmorrslt->pWDD[i].cchRead);
// 读取每段的拼音
wstrPinYin = wstrOutput.SubString(
pmorrslt->pWDD[i].wDispPos + 1,
pmorrslt->pWDD[i].cchDisp);
//
if(wstrPinYin.Length() > 0)
wstrWord = wstrWord + "(" + wstrPinYin + ")";
// 输出结果
Memo1->Lines->Add(wstrWord);
}
CoTaskMemFree(pmorrslt);
pIFELanguage->Close();
pIFELanguage->Release();
}
//---------------------------------------------------------------------------
void __fastcall TForm4::FormClose(TObject *Sender, TCloseAction &Action)
{
CoUninitialize();
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -