📄 o22.htm
字号:
<html>
<head>
<title>用C++Builder3制作NotePad(记事本)续篇</title>
<meta http-equiv="目录类型" content="文本/html; 字符集=gb2312">
</head>
<body bgcolor="#FFFFFF">
<table width="100%" border="0" height="285">
<tr>
<td height="35">
<div align="center" class="p14"><font color="#000000">用C++ Builder3
制作NotePad(记事本)续篇</font></div>
</td>
</tr>
<tr valign="top">
<td><font color="#000000">上回说到“我的记事本”小功告成,copy给朋友一份,咦,不能用,说是缺文件?噢,像VB的VBRUN???<br>
.dll一样,C++ Builder3编译的程序也需要运行库的支持的。找到并打开它看看我们还有些什么没有做?首先是关于菜单的快捷键问题。如果你是使用我上次所给的资源脚本导人的菜单,你会发现带有快捷键的菜单项的文字都像“撒消(U)\tCtrl+Z”一样。以前用BC的资源编辑器做过菜单的朋友都知道,“\t”表示右对齐,而在C++
Builder3中也作为菜单的文字了。另外C++ Builder3中的快捷键的建立也简单的多,快捷键已经作为菜单的ShortCut属性了。这里,仅改动“编辑(E)”中的“撒消(U)Ctrl+Z”项来示众,其余皆可依样而画葫芦之。<br>
先双击MainMenu1菜单组件,进入菜单编辑器,选中“编辑(E)”中的“撤消(U)Ctrl+Z”项。接着将Caption属性改为“撤消(U)”(即把“\tCtrl+Z”删去),并在shortCut瞩性中选择Ctrl+Z。这样,该项的快捷键就设完了。接着是编辑菜单里的各个项。首先是“撤消(&U)Ctrl+Z”到“全部选定(&A)”六项(必须先将他们的Enabled属性都设为true),C++
Builder3为这些功能提供了现成的方法(Method)。比如“撤消(&U)Ctral+Z”菜单,可以使用Undo方法,即在该菜单的OnClick事件处理函数中输入“Memo1->Undo();”。同理有:<br>
“剪切(&T)\tCtrl+X”项,输入:“Memo1->CutToClipboard();”<br>
“复制(&C)\tCtrl+C”项,输入:“Memo1->CopyToClipboard();”<br>
“粘贴(&P)\tCtrl+V”项,输入:“Memo1->PasteFromClipboard();”<br>
“删除(&L)\tDel”项,输入:“Memo1->ClearSelection();”<br>
“全部选定(&A)”项,输入:“Memo1->SelectAll();”<br>
下面是“时间/日期(&D)F5”项,我们必须先取得当前的日期和时间。有两种方法,一种是用getdate和<br>
gettime函数,一种是用C++ Builder3中的TDateTime类。这里选择后一种,但有时使用getdate和gettime函数会更简便。下面给出该菜单项的处理代码:<br>
TDateTime * Current_DateTime =newTDateTime; //生成TDateTime对象<br>
* Current_DateTime=Current_DateTime->CurrentDateTime(); //获取当前日期和时间<br>
Memo1->SetselTextBuf(Current_DateTime->DateTimeString().c_str());//将当前日期和时间转换成字符串,并用SetSelTextBuf方法插入当前光标位置<br>
接着是处理‘自动换行(&W)”的代码:<br>
//W1是“自动换行(&W)”菜单项的名字(Name)属性,如果你不是W1,请做相应的改动<br>
if(W1->Checked) //该菜单已经检取(Checked)<br>
{W1->Checked=false; //取消检取<br>
Memo1->ScrollBars=ssBoth; //Memo1两根滚动条都要<br>
} else<br>
{ W1->Checked=true; //设置检取<br>
Memo1->ScrollBars = ssVertical; //Memo1只设垂直滚动条,效果就是自动换行<br>
}<br>
接下来处理“设置字体(&F)...”菜单,我们首先需要一个设置字体的公用对话框。从Dialogs组件条中选FontDialog组件放入表单中。下面是处理“设置字体(&F)...”的代码:<br>
if(FontDialog1->Execute())Memo1->Font=FontDialog1->Font; <br>
至此,“编辑(E)”菜单的功能都处理完了,下面将是处理“搜索(S)”菜单的工作。其中,我们又将用到两个公用对话框。C++
Builder3只提供了用来获取用户欲查我的字符串的对话框,并未提供具体查找的函数,所以我们得自己写处理函数。下面我给出修改的Win32 SDK的范例代码,你需要将这些代码插在程序的首部,即定义全局变量的地方。<br>
typedef enum {<br>
frtFind<br>
frtReplace,<br>
frtRepAll<br>
} FRT<br>
#define GETSEL(ichS,ichE) \ SendMessage(MainForm - > Memo1 - > Handle,<br>
EM_GETSEL,(WPARAM) & ichs, (LPARAM) & ichE)<br>
#define SETSEL(ichS,ichE) \SendMessage(MainForm - > Memo1 - > Handle,<br>
EM_SETSEL, (WPARAM) ichS, (LPARAAM) ichE)<br>
BOOL FWholeWord(char * sz, char * szStart, char * szEnd,<br>
int cch) {<br>
if ( sz! = szStart & &<br>
* (sz - 1 ) ! = ' ' & &<br>
* (sz - 1 ) ! = '\t' & &<br>
* (sz - 1 ) ! = ',' & &<br>
* (sz - 1 ) ! = '.' & &<br>
* (sz - 1 ) ! = '\r'<br>
) { return FALSE;<br>
}<br>
if ( sz + cch! = szEnd & &<br>
* (sz + cch) ! = ' ' & &<br>
* (sz +cch) ! = '\t' & &<br>
* (sz + cch) ! = ',' & &<br>
* (sz + cch) ! = '.' & &<br>
* (sz + cch) ! = '\r'<br>
) { return FALSE;<br>
}<br>
return TRUE;<br>
}<br>
BOOL Find(char * szFind, BOOL fDown, BOOL fMatchCase, BOOL fWholeWord, BOOL
fNoScroll)<br>
{ char * szText;<br>
UINT ichStart;<br>
UINT ichEnd;<br>
UINT cch;<br>
int dch;<br>
int dchComp;<br>
char * szTerm;<br>
char * sz;<br>
UINT cchFind;<br>
BOOL fFound = FALSE;<br>
int dcbOnFind;<br>
szText = MainForm - > Memo1 - > Lines - > GetText();<br>
cchFind = strlen (szFind);<br>
GETSEL(ichStart, ichEnd);<br>
cch = strlen(szText);<br>
if (<br>
ichEnd - ichStart = = cchFind
& &<br>
!strnicmp(szText + ichStart,
szFind, cchFind)<br>
)<br>
dchOnFind = 1;<br>
else<br>
dchOnFind = 0;<br>
if (fDown)<br>
{ dch = 1;<br>
dchComp = 0;<br>
sz = szText + ichStart + dchOnFind;<br>
szTerm = szText + cch;<br>
}<br>
else<br>
{ dch = -1;<br>
dchComp = 1;<br>
sz = szText + ichStart - dchOnFind;<br>
szTerm = szText;<br>
}<br>
for (; sz + dchComp! = szTerm; sz + = dch)<br>
{<br>
if (<br>
tolower(* sz) = = tolower( *
szFind) & &<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -