3.BarTenderæ¡åÅžç 设计èÊYä»?br />4.调用*.chm帮助文äšg:
String sHelpFilePath = GetCurrentDir() + "\\help\\help.CHM"; //æ–‡äšg路径
   if(FileExists(sHelpFilePath))
   {
     ShellExecute(
     Handle,
     "open",
     sHelpFilePath.c_str(),
     NULL,
     NULL,
     SW_SHOWNORMAL
     );
   }
#ifndef rmbH
#define rmbH
// for AnsiString def
// #include
// æ•°å€ÆD{大写人民å¸å‡½æ•?br />AnsiString NumToRMBStr(double val);
// æ£æ•´æ•°å—½W¦ä¸²è½¬æ±‰å—函敎ͼŒä¸å¾è®®å•独ä‹Éç”?br />// 输入å—符串必™åÀL£æ•´æ•°åQŒåªå…许å‰å¯¼½Iºæ ¼(å¿…é¡»å›_¯¹é½?åQŒä¸å®œæœ‰å‰å¯¼é›?br />// AnsiString PositiveIntegerToHanStr(const AnsiString &NumStr);
#endif
2ã€rmb.cpp
#include        // must define AnsiString before rmb.h
#pragma hdrstop        // only for C++ Builder
#include
#include "rmb.h"
//---------------------------------------------------------------------------
// 帔R‡å—符串定义,如修改也å¯å˜ä¸ø™{æ¢æ™®é€šæ±‰å—函敎ͼˆå¦‚:一二三åQŒå癑փåQ?br />const char *HanDigiStr[] = {"é›?,"å£?,"è´?,"å?,"è‚?,"ä¼?,"é™?,"æŸ?,"æ?,"çŽ?};
const char *HanDiviStr[] = { "","�,"�,"�,"�,"�,"�,"�,"�,
    "�,"�,"�,"�,"�,"�,"�,"�,
    "�,"�,"�,"�,"�,"�,"� };
AnsiString PositiveIntegerToHanStr(const AnsiString &NumStr)
{     // 输入å—符串必™åÀL£æ•´æ•°åQŒåªå…许å‰å¯¼½Iºæ ¼(å¿…é¡»å›_¯¹é½?åQŒä¸å®œæœ‰å‰å¯¼é›?br /> AnsiString RMBStr;
 int len,n,lastzero=0;
 int hasvalue=0;   // äºÑ€ä¸‡˜q›ä½å‰æœ‰æ•°å€¼æ ‡è®?/p>
 len = NumStr.Length();
 if( len > 24 ) return "æ•°å€ÆD¿‡å¤?";
 for(int i=len-1;i>=0;i--) {
  if( NumStr[len-i]==' ' ) continue;     // AnsiString[] base is 1
  n = NumStr[len-i] - '0';
  if( n<0 || n>9 ) return "输入å«éžæ•°å—å—符!";
  if( n!=0 ) {
   if( lastzero ) RMBStr += HanDigiStr[0];  // 若干零åŽè‹¥è·Ÿéžé›¶å€û|¼Œåªæ˜¾½CÞZ¸€ä¸ªé›¶
                                                                       // 除了亿万å‰çš„é›¶ä¸å¸¦åˆ°åŽé¢
//   if( !( n==1 && (i%4)==1 && (lastzero || i==len-1) ) )  // 如å˜q›ä½å‰æœ‰é›¶ä¹Ÿä¸å‘壚wŸ³ç”¨æ¤è¡?br />//   if( !( n==1 && (i%4)==1 && i==len-1 ) )        // åè¿›ä½å¤„于第一ä½ä¸å‘壹éŸ?br />    RMBStr += HanDigiStr[n];
   RMBStr += HanDiviStr[i];   // éžé›¶å€¼åŽåŠ è¿›ä½ï¼Œä¸ªä½ä¸ºç©º
   hasvalue = 1;                                  // ¾|®ä¸‡˜q›ä½å‰æœ‰å€¼æ ‡è®?br />  }
  else {
   if( (i%8)==0 || ((i%8)==4 && hasvalue) )  // 亿万之间必须有éžé›¶å€¼æ–¹æ˜„¡¤ºä¸?br />    RMBStr += HanDiviStr[i];  // "äº?æˆ?ä¸?
  }
               if( i%8==0 ) hasvalue = 0;    // 万进ä½å‰æœ‰å€¼æ ‡è®°é€¢äº¿å¤ä½
  lastzero = (n==0) && (i%4!=0);                 // äº¿ä¸‡å‰æœ‰é›¶åŽä¸åŠ é›Óž¼Œå¦‚:拾万è´îC»Ÿ
 }
 if( RMBStr.Length()==0 ) return HanDigiStr[0];        // 输入½Iºå—½W¦æˆ–"0"åQŒè¿”å›?é›?
 return RMBStr;
}
AnsiString NumToRMBStr(double val)
{
 AnsiString SignStr,TailStr;
 double fraction, integer;
 int jiao,fen;
 if( val<0 ) {
  val = -val;
  SignStr = "�;
 }
 fraction = modf(val+0.005, &integer);          // å››èˆäº”入到分
 jiao = int(fraction*10);
 fen = int(fraction*100)-jiao*10;
 if( jiao==0 && fen==0 ) {
  TailStr = "�;
 }
 else {
  TailStr = HanDigiStr[jiao];
  if( jiao!=0 )
   TailStr += "�;
               if( integer==0 && jiao==0 )            // é›¶å…ƒåŽä¸å†™é›¶å‡ 分
                       TailStr = "";
  if( fen!=0 )
   TailStr += HanDigiStr[fen] + AnsiString("�);
 }
// 下一行å¯ç”¨äºŽéžæ£è§„金èžåœºåˆï¼Œ0.03åªæ˜¾½C?å分"è€Œä¸æ˜?é›¶å…ƒå分"
//       if( integer==0 ) return SignStr+TailStr;
 return SignStr+PositiveIntegerToHanStr( AnsiString(integer) )+"�+TailStr;
}
//-----------------------------------------------------------
// 基本考虑
// 人民å¸å¤§å†™å•ä½é“¶è¡Œè§„定用"å…?
// æ— é›¶å¤´é‡‘é¢åŽè·?æ•?åQŒæœ‰åˆ™ä¸è·?br />// è§’äØ“é›¶æ—¶ä¸å†™è§’(如:零å分)
// å››èˆäº”入到分
// 为凞®‘判è¯È–‘惑(一般对大写金é¢é¢„期较高åQ‰å’Œ
// 体现人民å¸åŸºæœ¬å•ä½äؓ元,金é¢ä½ŽäºŽå£¹åœ†å‰ä»åŠ?é›¶å…ƒ"
// 整数转æ¢
// 若干零åŽè‹¥è·Ÿéžé›¶å€û|¼Œåªæ˜¾½CÞZ¸€ä¸ªé›¶åQŒå¦åˆ™ä¸æ˜„¡¤º
// ä¸?äº?剿œ‰é›¶åŽä¸åŠ é›Óž¼Œå› 亿ã€ä¸‡ä¸ÞZ¸€å®Œæ•´å•ä½åQ?br />// åQˆå¦‚åQšæ‹¾ä¸‡è´°ä»?æ¯?拾万零贰ä»?更顺些)
// äº¿äØ“æ±‰è¯è®¡æ•°æœ€å¤§å•ä½ï¼Œåªè¦˜q›ä½åˆ°æ€ÀL˜¯æ˜„¡¤ºåQˆå¦‚åQšå£¹äº¿äº¿åQ?br />// 䏇䨓‹Æ¡æœ€å¤§å•ä½ï¼Œäº¿ä¸‡ä¹‹é—´å¿…须有éžé›¶å€¼æ–¹æ˜„¡¤ºä¸?br />// åQˆå¦‚"壹亿"ä¸å¯æ˜„¡¤ºä¸?壹亿ä¸?åQ?br />//
// 为凞®‘被½Hœæ”¹çš„å¯èƒ½æ€§ï¼Œåè¿›ä½æ€Õd‘壚wŸ³åQŒè¿™å’Œä¸‹é¢çš„ä¹ æƒ¯è¯ÀL³•ä¸ä¸€æ ?br />//     åQˆå˜q›ä½å¤„于½W¬ä¸€ä½ä¸å‘壹韻I¼Œå¦?æ‹‘Ö…ƒ"é?å£ÒŽ‹¾å…?åQ?br />//       åè¿›ä½å¤„剿œ‰é›¶æ˜¯å¦ä¸å‘壹音ä¸å¤ªç¡®å®šï¼Œ
//       å¦?å仟零壹拑օƒ"˜q˜æ˜¯"å仟零拾å…?åQŸï¼‰
// ç”?拾万"ä¸ç”¨"å£ÒŽ‹¾ä¸?åQŒå› 为æ¯ä¸ªæ•´æ•°è¿›ä½åŽéƒ½æœ‰˜q›ä½å•ä½åQˆæ‹¾ä½îC»Ÿä¸‡äº¿åQ?br />// ˜q™æ ·å³ä‹É金é¢å‰æ²¡æœ‰é™„防窜改的å‰ç¼€å¦?人民å¸?å—æ ·ä¹Ÿéš¾½Hœæ”¹äº?br />// å› äØ“è‡›_°‘è¦åŠ æ·ÖM¸¤ä¸ªæ±‰å—åÆˆä¸”æ”¹åŠ¨åŽæ•°å—å¿…é¡»˜q›ä½æ‰èƒ½½Hœæ”¹æˆ?br />// åQˆå¦‚"拾万"坿”¹æˆ?åæ‹¾ä¸?åQŒè€?å£ÒŽ‹¾ä¸?臛_°‘è¦æ”¹æˆ?壹䘪å£ÒŽ‹¾ä¸?åQ?/p>
// æ¤å‡½æ•îCØ“Borland C++ Builder¾~–写åQŒå·²å……分考虑到跨òq›_°å…¼å®¹æ€?br />// 如需转æ¢åˆ°å…¶å®ƒåœºåˆï¼Œ
// åªéœ€ä¿®æ”¹å—符串类型从AnsiString到对应的¾cÕdž‹ã€åŠŸèƒ½åŠå‡½æ•°
// åQˆæ³¨æ„两个char*型嗽W¦ä¸²ä¸å¯ä»¥ç›´æŽ¥ç›¸åŠ ï¼Œéœ€æœ‰ä¸€ä¸ªå…ˆè½¬æ¢åQ?/p>
Â