⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 o22.htm

📁 C++Builder教学大全
💻 HTM
📖 第 1 页 / 共 2 页
字号:
 

<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> 

      &nbsp;&nbsp; 先双击MainMenu1菜单组件,进入菜单编辑器,选中“编辑(E)”中的“撤消(U)Ctrl+Z”项。接着将Caption属性改为“撤消(U)”(即把“\tCtrl+Z”删去),并在shortCut瞩性中选择Ctrl+Z。这样,该项的快捷键就设完了。接着是编辑菜单里的各个项。首先是“撤消(&amp;U)Ctrl+Z”到“全部选定(&amp;A)”六项(必须先将他们的Enabled属性都设为true),C++  

      Builder3为这些功能提供了现成的方法(Method)。比如“撤消(&amp;U)Ctral+Z”菜单,可以使用Undo方法,即在该菜单的OnClick事件处理函数中输入“Memo1-&gt;Undo();”。同理有:<br> 

      &nbsp;&nbsp;&nbsp; “剪切(&amp;T)\tCtrl+X”项,输入:“Memo1-&gt;CutToClipboard();”<br> 

      &nbsp;&nbsp;&nbsp; “复制(&amp;C)\tCtrl+C”项,输入:“Memo1-&gt;CopyToClipboard();”<br> 

      &nbsp;&nbsp;&nbsp; “粘贴(&amp;P)\tCtrl+V”项,输入:“Memo1-&gt;PasteFromClipboard();”<br> 

      &nbsp;&nbsp;&nbsp; “删除(&amp;L)\tDel”项,输入:“Memo1-&gt;ClearSelection();”<br> 

      &nbsp;&nbsp;&nbsp; “全部选定(&amp;A)”项,输入:“Memo1-&gt;SelectAll();”<br> 

      &nbsp;&nbsp; 下面是“时间/日期(&amp;D)F5”项,我们必须先取得当前的日期和时间。有两种方法,一种是用getdate和<br> 

      gettime函数,一种是用C++ Builder3中的TDateTime类。这里选择后一种,但有时使用getdate和gettime函数会更简便。下面给出该菜单项的处理代码:<br> 

      TDateTime * Current_DateTime =newTDateTime; //生成TDateTime对象<br> 

      * Current_DateTime=Current_DateTime-&gt;CurrentDateTime(); //获取当前日期和时间<br> 

      Memo1-&gt;SetselTextBuf(Current_DateTime-&gt;DateTimeString().c_str());//将当前日期和时间转换成字符串,并用SetSelTextBuf方法插入当前光标位置<br> 

      &nbsp;&nbsp; 接着是处理‘自动换行(&amp;W)”的代码:<br> 

      //W1是“自动换行(&amp;W)”菜单项的名字(Name)属性,如果你不是W1,请做相应的改动<br> 

      if(W1-&gt;Checked) //该菜单已经检取(Checked)<br> 

      {W1-&gt;Checked=false; //取消检取<br> 

      Memo1-&gt;ScrollBars=ssBoth; //Memo1两根滚动条都要<br> 

      } else<br> 

      { W1-&gt;Checked=true; //设置检取<br> 

      Memo1-&gt;ScrollBars = ssVertical; //Memo1只设垂直滚动条,效果就是自动换行<br> 

      }<br> 

      &nbsp;&nbsp; 接下来处理“设置字体(&amp;F)...”菜单,我们首先需要一个设置字体的公用对话框。从Dialogs组件条中选FontDialog组件放入表单中。下面是处理“设置字体(&amp;F)...”的代码:<br> 

      if(FontDialog1-&gt;Execute())Memo1-&gt;Font=FontDialog1-&gt;Font; <br> 

      &nbsp;&nbsp; 至此,“编辑(E)”菜单的功能都处理完了,下面将是处理“搜索(S)”菜单的工作。其中,我们又将用到两个公用对话框。C++  

      Builder3只提供了用来获取用户欲查我的字符串的对话框,并未提供具体查找的函数,所以我们得自己写处理函数。下面我给出修改的Win32 SDK的范例代码,你需要将这些代码插在程序的首部,即定义全局变量的地方。<br> 

      typedef enum {<br> 

      &nbsp;&nbsp;&nbsp; frtFind<br> 

      &nbsp;&nbsp;&nbsp; frtReplace,<br> 

      &nbsp;&nbsp;&nbsp; frtRepAll<br> 

      } FRT<br> 

      #define GETSEL(ichS,ichE) \ SendMessage(MainForm - &gt; Memo1 - &gt; Handle,<br> 

      EM_GETSEL,(WPARAM) &amp; ichs, (LPARAM) &amp; ichE)<br> 

      #define SETSEL(ichS,ichE) \SendMessage(MainForm - &gt; Memo1 - &gt; Handle,<br> 

      EM_SETSEL, (WPARAM) ichS, (LPARAAM) ichE)<br> 

      BOOL FWholeWord(char * sz, char * szStart, char * szEnd,<br> 

      int cch) {<br> 

      &nbsp;&nbsp;&nbsp; if ( sz! = szStart &amp; &amp;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * (sz - 1 ) ! = ' ' &amp; &amp;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * (sz - 1 ) ! = '\t' &amp; &amp;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * (sz - 1 ) ! = ',' &amp; &amp;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * (sz - 1 ) ! = '.' &amp; &amp;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * (sz - 1 ) ! = '\r'<br> 

      &nbsp;&nbsp;&nbsp; ) { return FALSE;<br> 

      &nbsp;&nbsp;&nbsp; }<br> 

      &nbsp;&nbsp;&nbsp; if ( sz + cch! = szEnd &amp; &amp;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * (sz + cch) ! = ' ' &amp; &amp;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * (sz +cch) ! = '\t' &amp; &amp;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * (sz + cch) ! = ',' &amp; &amp;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * (sz + cch) ! = '.' &amp; &amp;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * (sz + cch) ! = '\r'<br> 

      &nbsp;&nbsp;&nbsp; ) { return FALSE;<br> 

      &nbsp;&nbsp;&nbsp; }<br> 

      &nbsp;&nbsp;&nbsp; return TRUE;<br> 

      }<br> 

      BOOL Find(char * szFind, BOOL fDown, BOOL fMatchCase, BOOL fWholeWord, BOOL  

      fNoScroll)<br> 

      { char * szText;<br> 

      &nbsp;&nbsp;&nbsp; UINT ichStart;<br> 

      &nbsp;&nbsp;&nbsp; UINT ichEnd;<br> 

      &nbsp;&nbsp;&nbsp; UINT cch;<br> 

      &nbsp;&nbsp;&nbsp; int dch;<br> 

      &nbsp;&nbsp;&nbsp; int dchComp;<br> 

      &nbsp;&nbsp;&nbsp; char * szTerm;<br> 

      &nbsp;&nbsp;&nbsp; char * sz;<br> 

      &nbsp;&nbsp;&nbsp; UINT cchFind;<br> 

      &nbsp;&nbsp;&nbsp; BOOL fFound = FALSE;<br> 

      &nbsp;&nbsp;&nbsp; int dcbOnFind;<br> 

      &nbsp;&nbsp;&nbsp; szText = MainForm - &gt; Memo1 - &gt; Lines - &gt; GetText();<br> 

      &nbsp;&nbsp;&nbsp; cchFind = strlen (szFind);<br> 

      &nbsp;&nbsp;&nbsp; GETSEL(ichStart, ichEnd);<br> 

      &nbsp;&nbsp;&nbsp; cch = strlen(szText);<br> 

      &nbsp;&nbsp;&nbsp; if (<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ichEnd - ichStart = = cchFind  

      &amp; &amp;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !strnicmp(szText + ichStart,  

      szFind, cchFind)<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dchOnFind = 1;<br> 

      &nbsp;&nbsp;&nbsp; else<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dchOnFind = 0;<br> 

      &nbsp;&nbsp;&nbsp; if (fDown)<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { dch = 1;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dchComp = 0;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sz = szText + ichStart + dchOnFind;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; szTerm = szText + cch;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br> 

      &nbsp;&nbsp;&nbsp; else<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { dch = -1;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dchComp = 1;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sz = szText + ichStart - dchOnFind;<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; szTerm = szText;<br> 

      &nbsp;&nbsp;&nbsp; }<br> 

      &nbsp;&nbsp;&nbsp; for (; sz + dchComp! = szTerm; sz + = dch)<br> 

      &nbsp;&nbsp;&nbsp; {<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (<br> 

      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tolower(* sz) = = tolower( *  

      szFind) &amp; &amp;<br> 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -