ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲综合久久久,91精彩在线视频,99riav视频在线观看http://www.aygfsteel.com/WshmAndLily/category/10980.htmlzh-cnTue, 24 Apr 2007 23:12:15 GMTTue, 24 Apr 2007 23:12:15 GMT60ACCESS中的分页解决æ–ÒŽ¡ˆhttp://www.aygfsteel.com/WshmAndLily/articles/113165.htmlsemovysemovyTue, 24 Apr 2007 06:11:00 GMThttp://www.aygfsteel.com/WshmAndLily/articles/113165.htmlhttp://www.aygfsteel.com/WshmAndLily/comments/113165.htmlhttp://www.aygfsteel.com/WshmAndLily/articles/113165.html#Feedback0http://www.aygfsteel.com/WshmAndLily/comments/commentRss/113165.htmlhttp://www.aygfsteel.com/WshmAndLily/services/trackbacks/113165.html{
    int middleIndex = pageCount/2;
    int firstIndex = 0;
    int lastIndex = pageCount - 1;
    String SQLStr = "";
    if( pageIndex <= firstIndex )
    {
        SQLStr = "select top " + IntToStr(pageSize) + " " + queryFields + " from " + tableName;
        if( condition != "")
        SQLStr += " where " + condition ;
        SQLStr += " order by " + primaryKey + " " + ascending;
    }
    else if( pageIndex > firstIndex && pageIndex <= middleIndex )
    {
        SQLStr = "select top " + IntToStr(pageSize) + " " + queryFields + " from " + tableName + " where " + primaryKey ;
        if( ascending == "asc" )
        SQLStr +=  ">(select max(";
        else
        SQLStr += "<(select min(";
        SQLStr += primaryKey + ") from (select top " + IntToStr(pageSize*pageIndex) + " " + primaryKey + " from " + tableName;
        if( condition != "" )
        SQLStr += " where " + condition;
        SQLStr += " order by " + primaryKey + " " + ascending + ") TableA )";
        if( condition != "" )
        SQLStr += " and " + condition;
        SQLStr += " order by " + primaryKey + " " + ascending;
    }
    else if( pageIndex > middleIndex && pageIndex < lastIndex)
    {
        SQLStr = "select " + queryFields + " from (select top " + IntToStr(pageSize) + " " + queryFields + " from " + tableName;
        SQLStr += " where " + primaryKey ;
        if( ascending == "asc" )
        SQLStr += " < ( select min(";
        else
        SQLStr += " > ( select max(";
        SQLStr += primaryKey + ") from (select top " +  IntToStr( recordCount - pageSize * (pageIndex + 1)) + " " + primaryKey + " from " + tableName;
        if( condition != "" )
        SQLStr += " where " + condition;
        SQLStr += " order by " + primaryKey + " desc) TableA)" ;
        if( condition != "" )
        SQLStr += " and " + condition;
        SQLStr += " order by " + primaryKey + " desc) TableB order by )" + primaryKey + " " + ascending ;  
    }
    else
    {
        SQLStr = "select " + queryFields + " from (select top " + IntToStr(recordCount - pageSize*lastIndex) + " " + queryFields + " from " + tableName;
        if( condition != "" )
        SQLStr += " where " + condition;
        SQLStr += " order by " + primaryKey + " desc " + " )TableA order by " + primaryKey + " " + ascending;
    }
    return SQLStr;
}

]]>
输出jpg是来自TImage控äšg的图å½?/title><link>http://www.aygfsteel.com/WshmAndLily/articles/112647.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Sun, 22 Apr 2007 09:46:00 GMT</pubDate><guid>http://www.aygfsteel.com/WshmAndLily/articles/112647.html</guid><wfw:comment>http://www.aygfsteel.com/WshmAndLily/comments/112647.html</wfw:comment><comments>http://www.aygfsteel.com/WshmAndLily/articles/112647.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/WshmAndLily/comments/commentRss/112647.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/WshmAndLily/services/trackbacks/112647.html</trackback:ping><description><![CDATA[       <br><br>       Graphics::TBitmap *bmp = new Graphics::TBitmap;<br>        bmp->Width = (int)newWidth;<br>        bmp->Height = (int)newHeight;<br>        bmp->Canvas->StretchDraw(Rect(0,0,bmp->Width,bmp->Height),Image1->Picture->Graphic);<br>        TJPEGImage *MyJPEG = new TJPEGImage;<br>        MyJPEG->Assign(bmp);<br>        MyJPEG->SaveToFile("c:\\newbmp.jpg");<br>        delete MyJPEG;<br>        delete bmp; <img src ="http://www.aygfsteel.com/WshmAndLily/aggbug/112647.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/WshmAndLily/" target="_blank">semovy</a> 2007-04-22 17:46 <a href="http://www.aygfsteel.com/WshmAndLily/articles/112647.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bcb jpeg转成bmphttp://www.aygfsteel.com/WshmAndLily/articles/59654.htmlsemovysemovySun, 23 Jul 2006 07:35:00 GMThttp://www.aygfsteel.com/WshmAndLily/articles/59654.htmlhttp://www.aygfsteel.com/WshmAndLily/comments/59654.htmlhttp://www.aygfsteel.com/WshmAndLily/articles/59654.html#Feedback0http://www.aygfsteel.com/WshmAndLily/comments/commentRss/59654.htmlhttp://www.aygfsteel.com/WshmAndLily/services/trackbacks/59654.html
  Graphics::TBitmap  *b=  new  Graphics::TBitmap();
  TJPEGImage  *j=new  TJPEGImage();
   j->JPEGNeeded();
   if(OpenDialog1->Execute())
   j->LoadFromFile(OpenDialog1->FileName);

  b->Assign(j);


  if(SaveDialog1->Execute())
  b->SaveToFile(SaveDialog1->FileName);
  delete  b;
  delete  j;


]]>
BCB杂记http://www.aygfsteel.com/WshmAndLily/articles/50096.htmlsemovysemovySat, 03 Jun 2006 01:11:00 GMThttp://www.aygfsteel.com/WshmAndLily/articles/50096.htmlhttp://www.aygfsteel.com/WshmAndLily/comments/50096.htmlhttp://www.aygfsteel.com/WshmAndLily/articles/50096.html#Feedback0http://www.aygfsteel.com/WshmAndLily/comments/commentRss/50096.htmlhttp://www.aygfsteel.com/WshmAndLily/services/trackbacks/50096.html1.调用Windows的计½Ž—器
WinExec("CALC.EXE",0);
2.调用Windowsè®îCº‹æœ?br />ShellExecute(Application->Handle,"open","notepad.exe",NULL,NULL,SW_SHOWNORMAL);

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
      );
    }



]]>
用C++Builder存取Excelæ–‡äšg[转蝲]http://www.aygfsteel.com/WshmAndLily/articles/45844.htmlsemovysemovyFri, 12 May 2006 07:05:00 GMThttp://www.aygfsteel.com/WshmAndLily/articles/45844.htmlhttp://www.aygfsteel.com/WshmAndLily/comments/45844.htmlhttp://www.aygfsteel.com/WshmAndLily/articles/45844.html#Feedback0http://www.aygfsteel.com/WshmAndLily/comments/commentRss/45844.htmlhttp://www.aygfsteel.com/WshmAndLily/services/trackbacks/45844.html
å…ꐠ键 字:Excel,OLE技æœ?Variant,ODBC,CreateObject,Cells

本文转自 C++Builder 研究 - http://www.ccrun.com/article/go.asp?i=20&d=8d0grf
---- C++Builder是Borland公司¾l§Delphi之后又一成功的äñ”å“?奚w›†VB、VC++ 及 Delphi 的优点于一体而深得C语言爱好者的青睐。由于多数操作者爱用 MicroSoft公司的Excel¾l„织数据åQŒäؓ此本文介¾läº†ç”¨C++Builder存取Excel 文äšg的两¿Uæ–¹æ³•。Â?br />
---- 一.用OLE技术操¾UµExcel 

---- OLE(对象链接与嵌å…?是微软提出的标准åQŒæ˜¯åº”用½E‹åºé—´äº¤æ¢æ•°æ®ã€ç›¸äº’操作的一¿Uæ–¹å¼ï¼ŒMS OFFICE 提供了很强的 OLE 服务功能åQŒVB、Delphi 及C++Builder½{‰è¯­­a€éƒ½å¯ä»¥ä»¥å®¢æˆ·æ–¹å¼å‘Excel提交命ä×o,以存取其数据,其中VBå’ŒDelphi最为简单,在语法上ž®±é‡‡ç”¨ç±»VBA的语å?本报九九òq´ç¬¬48期的《在Delphi中操作Excel》一文曾介绍了Delphiçš„åšæ³•ã€‚æˆ‘ä»¬åŽŸä»¥äØ“C++Builder照搬DelphiåQŒç»“果语法编译都未能通过åQŒæŸ¥ä¸åˆ°˜q™æ–¹é¢å…·ä½“介¾lçš„资料。经反复试验方知åQšåŽŸæ¥C++Builder采用间接的办法,利用变体¾c»Variant所提供的四个“方法”向OLE服务½E‹åºæäº¤æ“çºµå‘½ä×oåQšÂ?br />
 Variant Variant::OlePropertyGet(属性名,参数�);
// 取对象属�br /> Void  Variant::OlePropertySet(属性名,参数�);
// 讄¡½®å¯¹è±¡å±žæ€?
 Variant Variant::OleFunction(函数名,参数�);
// ˜qè¡Œå¯¹è±¡çš„函æ•?br /> void  Variant::OleProcedure(˜q‡ç¨‹åï¼Œå‚æ•°â€?);
 // ˜qè¡Œå¯¹è±¡çš„过½E?br />
其头文äšg“vcl\\\\utilcls.h”必™åÕdµŒåœ¨ç”¨æˆïL¨‹åºä¸­åQ?br />对于˜q™å››ä¸ªé•¿é•¿çš„æ–ÒŽ³•名可在程序中用宏语句重新定义一下: 
 #define  PG  OlePropertyGet
 #define  PS  OlePropertySet
 #define  FN  OleFunction
 #define  PR  OleProcedure

例如对于VB的提交语�
Ex.ActiveWorkBook.ActiveSheet.Cells(1,2).Value=3
ä¸ÞZ¾¿äºŽç†è§£åœ¨C++Builder对应的语句可分解为如下四句:
Variant t1=Ex.OlePropertyGet(\\\"ActiveWorkBook\\\");
Variant t2=t1.OlePropertyGet(\\\"ActiveSheet\\\");
Variant t3=t2.OlePropertyGet(\\\"Cells,1,2);
 t3.OlePropertySet(\\\"Value\\\",3);
可去掉中间变量将˜q™å››å¥åˆä¸ÞZ¸€å¥ï¼Œž®±æ˜¯:
 Ex.PG(\\\"ActiveWorkBook\\\").PG(\\\"ActiveSheet\\\").
PG(\\\"Cells\\\",1,2).PS(\\\"Value\\\",3);
我们ž®†ä¸‹é¢çš„VB½E‹åºç‰‡æ®µæ”ÒŽˆå¯¹åº”çš„C++Builder½E‹åºä»¥ä¾›å‚è€?
Private Sub Command1_Click()  \\\' Visual Basic½E‹åºç‰‡æ®µ
Dim Ex As Object,Wb As Object, Sh1 As Object
Set Ex = CreateObject(\\\"Excel.Application\\\")
Ex.WorkBooks.Open(\\\"c:\\\\book1.xls\\\")
Set Wb = Ex.Activeworkbook
Set Sh1 = Wb.ActiveSheet
Text1.Text = Sh1.Cells(1, 1).Value
For i = 1 To 10: For j = 1 To 10
Sh1.Cells(i, j).Value = i * 100 + j
Next j: Next i
Wb.save: Wb.Close: Ex.Quit
End Sub \\\' - - - - - -- - - - - - - - - - - 

#include \\\"Unit1.h\\\" // C++Builder½E‹åºç‰‡æ®µ
#include \\\"vcl\\\\utilcls.h\\\" // util classes实用¾c»è¯´æ˜?br />// …省写此处原一ŒDµä»£ç ?br />// 请在此处插入上面提及的四个宏定义语句
void __fastcall TForm1::Button1Click(TObject *Sender)
{ Variant Ex,Wb,Sh1;
 Ex=Variant::CreateObject(\\\"Excel.Application\\\");
 Ex.PG(\\\"WorkBooks\\\").PR(\\\"Open\\\",\\\"c:\\\\\\\\book1.xls\\\");
 Wb=Ex.PG(\\\"ActiveWorkBook\\\"); Sh1=Wb.PG(\\\"ActiveSheet\\\");
 Edit1->Text=Sh1.PG(\\\"Cells\\\",1,1).PG(\\\"Value\\\");
 for (int i=1;i<=10;i++)
for (int j=1;j<=10;j++)
 Sh1.PG(\\\"Cells\\\",i,j).PS(\\\"Value\\\",i*100+j);
 Wb.PR(\\\"Save\\\"); Wb.PR(\\\"Close\\\");
}

---- 使用˜q™ç§æ–ÒŽ³•的程序运行时åQŒå¿…™åÖM¿è¯ç³»¾lŸä¸­åŒæ—¶æœ‰MS OFFICEåQ›ä¸‹é¢æˆ‘们再介绍另一¿Uè„±¼›»MS OFFICE也能存取Excel表格的方法。Â?br />---- äº?用ODBC数据库技术存取Excel 

---- ODBCž®±æ˜¯å¼€æ”‘Ö¼æ•°æ®åº“链接标准,不同¿Uç±»çš„æ•°æ®åº“只需提供各自的ODBC 驱动½E‹åºž®±å¯æŒ‰ç›¸åŒçš„命ä×o操纵åQŒå¾®è½¯åŒæ ·äØ“Excel提供了ODBC驱动½E‹åºåQŒæˆ‘们可在程序中象数据库一样存取Excel表格。定义好ODBC数据源后åQŒå®žé™…试验中òq¶æ²¡æœ‰å¦‚惌™±¡çš„é‚£æ ïL®€å•,在控件Table的属性TableName中æ€ÀL˜¯‹‚€ç´¢ä¸åˆ°è¡¨åï¼ŒåŒæ ·ä¹Ÿæ²¡æœ‰ç›¸å…³çš„资料可供查阅。通过对Excel的分析,¾lˆäºŽå‘现了问题的关键所在:ODBCçš„è¡¨ååÆˆä¸å°±æ˜¯Excel的工作表å?如Sheet1),在Excel 表格中必™åÕd¯¹è¦æ±‚操作的行列区域定义一个“名¿U°â€ä½œä¸ºæ•°æ®åº“的表名,该区域的首行各列必须是字ŒDµå(否则首行数据会当成字ŒDµå),可以定义多个表名。具体操作步骤如下: 

---- 1.在Excel上定义“表名� 

---- ˜qè¡ŒExcel½E‹åºåQŒæ‰“开或新å»ÞZ¸€è¡¨æ ¼åQŒæŒ‰ä¸‹é¼ æ ‡å·¦é”®é€‰æ‹©ä¸€ç‰‡åŒºåŸŸï¼ˆèµ·å§‹è¡Œå…ˆå¡«ä¸Šå­—段名)åQŒå†ž®†é¼ æ ‡ä½¾|®ç‚¹åˆ°å·¦ä¸Šè§’的地址栏,输入一表名如ABC,或者在菜单上é€?“插å…?I)â€?“名¿U?N)â€?“定ä¹?D)”,再输入表名(若已定义, 可在此处删除掉),存盘退出(假定文äšg名取为c:\\\\Book.xlsåQ‰ï¼Œè‹¥å«Œå­—段名行多余åQŒå­˜ç›˜å‰å¯éšè—æŽ‰åQ›Â?br />
---- 2.定义ODBC数据� 

---- 从Windows桌面“我的电脑\\\"˜q›å…¥â€œæŽ§åˆ‰™¢æŽì€ï¼ŒåŒå‡»â€?2位ODBC”图标,˜qè¡Œâ€œç”¨æˆ·DSN”中的“添åŠ?D)\\\"后选“Excel Driver(*.xls)\\\", 再点“完成”便弹出对话框,在“数据源å?N)\\\"双™¾¹å¡«ä¸€åç§°åQŒå¦‚åQšexcel01,在“版æœ?V)\\\"上选“Excel97\\\", 点中“选项”取消“只诠Z€ï¼Œåœ¨â€œé€‰å®šå·¥ä½œç›®å½•”中åQŒé€‰å®šExcelæ–‡äšgå?本例 c:\\\\Book1.xls)åQŒå†ç‚¹â€œç¡®å®šâ€ç›´è‡³é€€å‡ºï¼›Â 

---- 3.讄¡½®Database控äšg避免ç™Õd½•‹‚€æŸ¥ï¼šÂ 

---- ˜qè¡ŒC++BuilderåQŒåœ¨Form1中加上Data Access的三个控ä»Óž¼šDatabase1、 DataSource1、Table1,加入Database1的目的是ä¸ÞZº†é¿å…æ‰“开数据库时出现ç™Õd½•框,为此双击此控件弹å‡ÞZ¸€å¯¹è¯æ¡†ï¼Œåœ¨Alias name中选ODBC数据源名(本例为Excel01),在Name中填上一新的别名(本例取Excel02)åQŒå†ç‚¹â€œDefaults” 出çŽîC¸€æ‰¹å‚数缺省å€û|¼Œæœ€åŽå–消Options中的两项“Login prompt\\\"与\\\"Keep inactive connectâ€?点OK退出; 

---- 4.讄¡½®å…¶å®ƒæŽ§äšg属æ€? 

---- ž®†Table1的属性DatabaseNameé€‰äØ“æ­¥éª¤3中的新别名Excel02,再将另一属性TableNameé€‰äØ“æ­¥éª¤1的表å?本例为ABC);ž®†æŽ§ä»¶DataSource1的属性 DataSet选䨓Table1åQ›åŒå‡»Form1,在FormCreate事äšg子程序内加上一句 Table1- >Open( )åQ›Â?br />
---- 5åQŽæŸ¥çœ‹æ•°æ®åº“内容åQšÂ?br />
---- ä¸ÞZº†ç›´æŽ¥çœ‹åˆ°Excel数据åQŒåœ¨Form1中再加上Data Controls的控件DBGrid1 和DBNavigator1åQŒå°†ä¸¤è€…的属性DataSourceéƒ½é€‰äØ“DataSource1,双击Table1 的属性Activež®†å€¼æ”¹ä¸ºtrue,½{‰å¾…æ•°ç§’ž®±å¯çœ‹åˆ°DBGrid1中出现数æ?最后恢复Tabel1- >Active为falseåQ›Â?br />
---- 注意åQšç¨‹åºç¼–译前,å¿…é¡»ž®†åˆšæ‰“开的表关闭,å?使Table1- >Active为false, 否则½E‹åº˜qè¡Œæ—¶æŠ¥å‘Šå‡ºé”™ï¼Œå› äØ“Excel表æ€ÀL˜¯è¢«ODBC以“独占”方式打开åQ›Â?br />
---- 我们使用的是C++ Builder 4.0专业版,电子表格为Excel 97。Â?br />---- ¾lè€å¦–试验åQŒåœ¨win2000,Excel 2000,C++ Builder 6.0中ä‹É用正常ã€?br /> 

]]>
用OLE操作Excel(目前最全的资料)http://www.aygfsteel.com/WshmAndLily/articles/45843.htmlsemovysemovyFri, 12 May 2006 07:03:00 GMThttp://www.aygfsteel.com/WshmAndLily/articles/45843.htmlhttp://www.aygfsteel.com/WshmAndLily/comments/45843.htmlhttp://www.aygfsteel.com/WshmAndLily/articles/45843.html#Feedback0http://www.aygfsteel.com/WshmAndLily/comments/commentRss/45843.htmlhttp://www.aygfsteel.com/WshmAndLily/services/trackbacks/45843.html用OLE操作Excel(目前最全的资料)(04.2.19更新)  作者: ccrun

å…ꐠ键 字:Office,Excel,Sheet,Cell,OLE,CreateObject,Merge,工作½?工作è¡?单元æ ?åˆåÆˆ,自动åŒ?br />
本文转自 C++Builder 研究 - http://www.ccrun.com/article/go.asp?i=529&d=0iezy5
用OLE操作Excel(目前最全的资料)(04.2.19更新)
本文档部分资料来自互联网,大部分是ccrun(老妖)在Excel中通过录制å®?->察看宏代ç ?->è½¬äØ“CB代码而来.本文档不断更æ–îC¸­.‹Æ¢è¿Žå¤§å®¶å…Ïx³¨.

要在应用½E‹åºä¸­æŽ§åˆ¶Excel的运è¡?首先必须在编制自动化客户½E‹åºæ—¶åŒ…含Comobj.hpp
#include \\\"Comobj.hpp\\\"

C++ Builder把Excel自动化对象的功能包装在下面的四个Ole Object Class函数ä¸?应用人员可以很方便地˜q›è¡Œè°ƒç”¨ã€?br />讄¡½®å¯¹è±¡å±žæ€?void OlePropertySet(属性名,参数…â€?;
获得对象属�Variant  OlePropertyGet(属性名,参数…�;
调用对象æ–ÒŽ³•:1) Variant OleFunction(函数å?参数…â€?;
 2) void  OleProcedure(˜q‡ç¨‹å?参数…â€?;

在程序中可以用宏定义来节省时é—ß_¼š

#define  PG  OlePropertyGet
#define  PS  OlePropertySet
#define  FN  OleFunction
#define  PR  OleProcedure

举例åQ?br />ExcelApp.OlePropertyGet(\\\"workbooks\\\").OleFunction(\\\"Add\\\");
可写�br />ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\");

C++ Builder中ä‹É用OLE控制Excel2000,必须掌握Excel2000的自动化对象及Microsoft Word Visual Basic帮助文äšg中的关于Excel的对象、方法和属性。对象是一个Excel元素,属性是对象的一个特性或操作的一个方é?æ–ÒŽ³•是对象可以进行的动作ã€?br />首先定义以下几个变量åQ?br />Variant ExcelApp,Workbook1,Sheet1,Range1;

1、Excel中常用的对象æ˜?Application,Workbooks,Worksheets½{‰ã€?br />
★创建应用对象★
 Variant ExcelApp;
 ExcelApp = Variant::CreateObject (\\\"Excel.Application\\\");
 或�br /> ExcelApp = CreateOleObject (\\\"Excel.Application\\\");

★创建工作簿对象�br /> Variant WorkBook1;
 WorkBook1 = ExcelApp.PG(\\\"ActiveWorkBook\\\");

★创建工作表对象�br /> Variant Sheet1;
 Sheet1 = WorkBook1.PG(\\\"ActiveSheet\\\");

★创建区域对象★
 Variant Range;
 Range = Sheet1.PG(\\\"Range\\\",\\\"A1:A10\\\");
 或者ä‹Éç”?br /> Excel.Exec(PropertyGet(\\\"Range\\\")<<\\\"A1:C1\\\").Exec(Procedure(\\\"Select\\\"));

2、常用的属性操�

★ä‹ÉExcel½E‹åºä¸å¯è§â˜…
 ExcelApp.PS(\\\"Visible\\\", (Variant)false);

★新建EXCELæ–‡äšgâ˜?br />
◎ 新建系¾lŸæ¨¡æ¿çš„工作½?br /> ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\") //默认工作½?br /> ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\", 1)  //单工作表
 ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\", 2)  //图表
 ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\", 3)  //宏表 
 ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\", 4)  //国际通用宏表
 ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\", 5)  //与默认的相同
 ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\", 6)  //工作½¿ä¸”只有一个表
 或者ä‹É用ExcelAppçš„Execæ–ÒŽ³•
 Excel.Exec(PropertyGet(\\\"Workbooks\\\")).Exec(Procedure(\\\"Add\\\"));
â—ŽÂ æ–°å»ø™‡ªå·±åˆ›å»ºçš„æ¨¡æ¿çš„工作簿
 ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\", \\\"C:\\\\\\\\Temp\\\\\\\\result.xlt\\\");

★打开工作½Žì˜…
 ExcelApp.PG(\\\"workbooks\\\").FN(\\\"open\\\", \\\"路径�xls\\\")

★保存工作簿â˜?br /> WorkBook1.FN(\\\"Save\\\"); //保存工作½?br /> WorkBook1.FN(\\\"SaveAs\\\", \\\"æ–‡äšg名\\\");//工作½¿ä¿å­˜äØ“,路径注意用\\\"\\\\\\\\\\\"

★退出EXCEL�br /> ExcelApp.FN (\\\"Quit\\\");
 ExcelApp = Unassigned;
 或�br /> ExcelApp.Exec(Procedure(\\\"Quit\\\"));

★操作工作表�br />
◎ 选择选择工作表中½W¬ä¸€ä¸ªå·¥ä½œè¡¨
 Workbook1.PG(\\\"Sheets\\\", 1).PR(\\\"Select\\\");
 Sheet1 = Workbook1.PG(\\\"ActiveSheet\\\");

◎ 重命名工作�br /> Sheet1.PS(\\\"Name\\\", \\\"Sheet的新名字\\\");

◎ 当前工作簿中的工作表æ€ÀL•°
 int nSheetCount=Workbook1.PG(\\\"Sheets\\\").PG(\\\"Count\\\");  

★操作行和列�br /> 
◎ 获取当前工作表中有多少行和多少列:
 Sheet1.PG(\\\"UsedRange\\\").PG(\\\"Columns\\\").PG(\\\"Count\\\"); //列数
 Sheet1.PG(\\\"UsedRange\\\").PG(\\\"Rows\\\").PG(\\\"Count\\\"); //行数

◎ 设¾|®åˆ—å®?br /> ExcelApp.PG(\\\"Columns\\\", 1).PS(\\\"ColumnWidth\\\", 22);
 或�br /> Range = ExcelApp.PG(\\\"Cells\\\", 1, 3);
 Range.PS(\\\"ColumnWidth\\\", 22);

◎ 设¾|®è¡Œé«?br /> ExcelApp.PG(\\\"Rows\\\", 2).PS(\\\"RowHeight\\\", 25);
 或�br /> Range = ExcelApp.PG(\\\"Cells\\\", 2, 1);
 Range.PS(\\\"RowHeight\\\", 25);  

◎ 在工作表最前面插入一�br /> Sheet1.PG(\\\"Rows\\\", 1).PR(\\\"Insert\\\");

◎ 删除一è¡?br /> ExcelApp.PG(\\\"Rows\\\", 2).PR(\\\"Delete\\\"); //ž®†ç¬¬2行删é™?br />
 // 本文作者:ccrun åQŒå¦‚转蝲请保证本文档的完整性,òq¶æ³¨æ˜Žå‡ºå¤„ã€?br /> // ‹Æ¢è¿Žå…‰äÍ C++ Builder 研究 www.ccrun.com
 // 摘自:http://www.ccrun.com/doc/go.asp?id=529

★操作单元格�br />
◎ 设¾|®å•元格字体
Sheet1.PG(\\\"Cells\\\", 1, 1).PG(\\\"Font\\\").PS(\\\"Name\\\", \\\"隶书\\\"); //字体
Sheet1.PG(\\\"Cells\\\", 2, 3).PG(\\\"Font\\\").PS(\\\"size\\\", 28);  //大小

◎ 设¾|®æ‰€é€‰åŒºåŸŸå­—ä½?br /> Range.PG(\\\"Cells\\\").PG(\\\"Font\\\").PS(\\\"Size\\\", 28);
 Range.PG(\\\"Cells\\\").PG(\\\"Font\\\").PS(\\\"Color\\\", RGB(0, 0, 255));
 其中参数的设¾|?
 Font  Name : \\\"隶书\\\"  //字体名称
Size : 12  //字体大小
 Color : RGB(*,*,*)  //颜色
 Underline : true/false  //下划¾U?br /> Italic: true/false  //斜体

◎ 设¾|®å•元格格式为小数百分比
 Sheet1.PG(\\\"Cells\\\", 1, 1).PS(\\\"NumberFormatLocal\\\", \\\"0.00%\\\");

◎ 设定单元格的垂直对齐方�br /> Range = ExcelApp.PG(\\\"Cells\\\", 3, 4);
 // 1=靠上 2=居中 3=靠下寚w½Â 4=两端寚w½Â 5=分散寚w½
 Range.PS(\\\"VerticalAlignment\\\", 2);  

â—ŽÂ è®¾å®šå•å…ƒæ ¼çš„æ–‡æœ¬äØ“è‡ªåŠ¨æ¢è¡Œ
 Range = ExcelApp.PG(\\\"Cells\\\", 3, 4);
 Range.PS(\\\"WrapText\\\", true);
 
★单元格的合òq¶â˜…

◎ Range = Sheet1.PG(\\\"Range\\\", \\\"A1:A2\\\"); //A1å’ŒA2单元格合òq?br /> String strRange = \\\"A\\\" + IntToStr(j) + \\\":\\\" + \\\"C\\\" + IntToStr(j); //比如åQšA1:C5
 Range1=Sheet1.PG(\\\"Range\\\", strRange.c_str()); //å¯ä»¥ç”¨å˜é‡æŽ§åˆ¶å•å…ƒæ ¼åˆåÆˆ
 Range1.FN(\\\"Merge\\\", false);

★读写单元格�br />
◎ 指定单元格赋�br /> String strValue = \\\"abcdefg\\\";
 Sheet1.PG(\\\"Cells\\\", 3, 6).PS(\\\"Value\\\", strValue.c_str()); 
 Sheet1.PG(\\\"Cells\\\", j, 1).PS(\\\"Value\\\", \\\"总记�\\\" + String(j-6));
 或者ä‹Éç”?br /> Excel.Exec(PropertyGet(\\\"Cells\\\")<<1<<3).Exec(PropertySet(\\\"Value\\\")<<15);

◎ 所选区域单元格赋�br /> Range.PG(\\\"Cells\\\").PS(\\\"Value\\\", 10);  

◎ 所选区域行赋�br /> Range.PG(\\\"Rows\\\",1).PS(\\\"Value\\\", 1234);

◎ 工作表列赋�br /> Sheet1.PG(\\\"Columns\\\",1).PS(\\\"Value\\\", 1234); 

â—ŽÂ è¯»å–å–å€ÆD¯­å?
 String strValue = Sheet1.PG(\\\"Cells\\\", 3, 5).PG(\\\"Value\\\");

★窗口属性★

◎ 显½Cºå±žæ€?br /> ExcelApp.PS(\\\"Windowstate\\\", 3);  //最大化昄¡¤º
1---------xlNormal //正常昄¡¤º
2---------xlMinimized  //最ž®åŒ–昄¡¤º
3---------xlMaximized  //最大化昄¡¤º

◎ 状态栏属æ€?br /> ExcelApp.PS(\\\"StatusBar\\\", \\\"您好,è¯äh‚¨½Eç­‰ã€‚正在查询!\\\");
 ExcelApp.PS(\\\"StatusBar\\\", false);  //˜q˜åŽŸæˆé»˜è®¤å€?br />
◎ 标题属�
 ExcelApp.PS(\\\"Caption\\\", \\\"查询¾pȝ»Ÿ\\\");
 
3、操作图�br />
★添加图�br /> 
 Variant Chart;
 Chart = ExcelApp.Exec(PropertyGet(\\\"Charts\\\")).Exec(Function(\\\"Add\\\"));
 ExcelApp.Exec(PropertySet(\\\"Visible\\\") << true);
 Chart.Exec(PropertySet(\\\"Type\\\") << -4100);

★滚动图�br />
 for(int nRotate=5; nRotate <= 180; nRotate += 5)
 {
Chart.Exec(PropertySet(\\\"Rotation\\\") << nRotate);
 }
 for (int nRotate = 175; nRotate >= 0; nRotate -= 5)
 {
Chart.Exec(PropertySet(\\\"Rotation\\\") << nRotate);
 }
 
另外åQŒäؓ保证½E‹åºèƒ½æ­£å¸¸è¿è¡Œï¼Œéœ€è¦åœ¨½E‹åºä¸­åˆ¤æ–­ç›®æ ‡æœºå™¨æ˜¯å¦å®‰è£…了Office;
try
{
ExcelApp = Variant::CreateObject (\\\"Excel.Application\\\");
}
catch(...)
{
ShowMessage(\\\"˜qè¡ŒExcel出错,è¯ïL¡®è®¤å®‰è£…了Office\\\");
return;
} 


#include \\\"comobj.hpp\\\"
//---------------------------------------------------------------------------
// å¯ÒŽŒ‡å®šExcelæ–‡äšg中的指定列进行排åº?br />// strExcelFileName : excelæ–‡äšgå?br />// nCol : 指定的列å?br />// nSortStyle : 1:升序åQ?:降序
void SortExcelColumn(String strExcelFileName, int nCol, int nSortStyle)
{
Variant vExcelApp, vWorkbook, vRange;
vExcelApp = Variant::CreateObject(\\\"Excel.Application\\\");
vExcelApp.OlePropertySet(\\\"Visible\\\", false);
vExcelApp.OlePropertyGet(\\\"WorkBooks\\\").OleProcedure(\\\"Open\\\", strExcelFileName.c_str());
vWorkbook = vExcelApp.OlePropertyGet(\\\"ActiveWorkbook\\\");
vExcelApp.OlePropertyGet(\\\"Columns\\\", nCol).OleProcedure(\\\"Select\\\");
vExcelApp.OlePropertyGet(\\\"ActiveSheet\\\").OlePropertyGet(\\\"Cells\\\", 1, nCol).OleProcedure(\\\"Select\\\");
vRange = vExcelApp.OlePropertyGet(\\\"Selection\\\");
vRange.Exec(Function(\\\"Sort\\\")<<vExcelApp.OlePropertyGet(\\\"Selection\\\")<<nSortStyle);
vWorkbook.OleProcedure(\\\"Save\\\");
vWorkbook.OleProcedure(\\\"Close\\\");
vExcelApp.OleFunction(\\\"Quit\\\");
vWorkbook = Unassigned;
vExcelApp = Unassigned;
ShowMessage(\\\"ok\\\");
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 对C:\\\\123\\\\123.xlsæ–‡äšg中第一个Sheet的第四列˜q›è¡Œå‡åºæŽ’序
SortExcelColumn(\\\"C:\\\\\\\\123\\\\\\\\123.xls\\\", 4, 1);
}
//---------------------------------------------------------------------------

 

]]>
BCB写文本文ä»?/title><link>http://www.aygfsteel.com/WshmAndLily/articles/45842.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Fri, 12 May 2006 07:02:00 GMT</pubDate><guid>http://www.aygfsteel.com/WshmAndLily/articles/45842.html</guid><wfw:comment>http://www.aygfsteel.com/WshmAndLily/comments/45842.html</wfw:comment><comments>http://www.aygfsteel.com/WshmAndLily/articles/45842.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/WshmAndLily/comments/commentRss/45842.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/WshmAndLily/services/trackbacks/45842.html</trackback:ping><description><![CDATA[void __fastcall TForm1::BitBtn2Click(TObject *Sender)<br />{<br /><br />int fileHandle = 0;<br />if(SaveDialog1->Execute())<br />{<br />if(FileExists(SaveDialog1->FileName))<br />{<br /> if(Application->MessageBoxA(\\\"该文件已¾lå­˜åœ?是否替换åQŸ\\\",\\\"信息提示框\\\",MB_YESNO) == 6)<br /> {<br />fileHandle = FileCreate(SaveDialog1->FileName);<br />String str = \\\"½W¬ä¸€åˆ—\\\\t\\\\t½W¬äºŒåˆ—\\\\t\\\\t½W¬ä¸‰åˆ—\\\\t\\\\t½W¬å››åˆ—\\\\t\\\\t½W¬äº”列\\\\r\\\\n\\\";<br />FileWrite(fileHandle,str.c_str(), str.Length());<br />for(int i=0;i<10;i++)<br />FileWrite(fileHandle,str.c_str(), str.Length());<br />FileClose(fileHandle);<br />ShowMessage(\\\"OK\\\");<br /> }<br />else<br />{<br /> return;<br />}<br /> }<br /> else<br /> {<br /> fileHandle = FileCreate(SaveDialog1->FileName);<br />String str = \\\"½W¬ä¸€åˆ—\\\\t\\\\t½W¬äºŒåˆ—\\\\t\\\\t½W¬ä¸‰åˆ—\\\\t\\\\t½W¬å››åˆ—\\\\t\\\\t½W¬äº”列\\\\r\\\\n\\\";<br />FileWrite(fileHandle,str.c_str(), str.Length());<br />for(int i=0;i<10;i++)<br />FileWrite(fileHandle,str.c_str(), str.Length());<br />FileClose(fileHandle);<br />ShowMessage(\\\"OK\\\");<br /> }<br /><br />}<br /><br />} <img src ="http://www.aygfsteel.com/WshmAndLily/aggbug/45842.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/WshmAndLily/" target="_blank">semovy</a> 2006-05-12 15:02 <a href="http://www.aygfsteel.com/WshmAndLily/articles/45842.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ž®†æ•°æ®åˆ°Excelæ–‡äšghttp://www.aygfsteel.com/WshmAndLily/articles/45841.htmlsemovysemovyFri, 12 May 2006 07:00:00 GMThttp://www.aygfsteel.com/WshmAndLily/articles/45841.htmlhttp://www.aygfsteel.com/WshmAndLily/comments/45841.htmlhttp://www.aygfsteel.com/WshmAndLily/articles/45841.html#Feedback0http://www.aygfsteel.com/WshmAndLily/comments/commentRss/45841.htmlhttp://www.aygfsteel.com/WshmAndLily/services/trackbacks/45841.html#pragma hdrstop
#include \\\"Comobj.hpp\\\" //必须包含的头文äšg

#include \\\"Unit1.h\\\"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource \\\"*.dfm\\\"
#define  PG  OlePropertyGet //主要用到的便于编写的四个宏定�br />#define  PS  OlePropertySet
#define  FN  OleFunction
#define  PR  OleProcedure

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
 Variant ExcelApp = CreateOleObject (\\\"Excel.Application\\\"); //创徏一个工作簿对象
 SaveDialog1->Execute(); //执行保存对话æ¡?br /> ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\", 6);// 向工作簿对象æ·ÕdŠ ä¸€å¼ å·¥ä½œè¡¨
 Variant WorkBook1;
 WorkBook1 = ExcelApp.PG(\\\"ActiveWorkBook\\\");//获取‹zÕdŠ¨å·¥ä½œè–?br />Variant Sheet1;
 Sheet1 = WorkBook1.PG(\\\"ActiveSheet\\\");//获取‹zÕdŠ¨çš„å·¥ä½œè¡¨
 for (int i=1;i<=10;i++)
for (int j=1;j<=10;j++)
 Sheet1.PG(\\\"Cells\\\",i,j).PS(\\\"Value\\\",i*100+j);//循环向工作表中添加数æ?br /> Sheet1.PS(\\\"Name\\\", \\\"Sheet的新名字\\\"); //工作½‰K‡å‘½å
 WorkBook1.PR(\\\"SaveAs\\\", SaveDialog1->FileName.c_str());//存储在指定的保存对话框文件名的文件上
 WorkBook1.PR(\\\"Close\\\");//关闭工作½?br /> ExcelApp.FN(\\\"Quit\\\");//关闭Excel½E‹åº
}
//--------------------------------------------------------------------------- 

]]>
Delphi BCB提示信息框(MessageBoxåQ‰çš„应用http://www.aygfsteel.com/WshmAndLily/articles/45839.htmlsemovysemovyFri, 12 May 2006 06:59:00 GMThttp://www.aygfsteel.com/WshmAndLily/articles/45839.htmlhttp://www.aygfsteel.com/WshmAndLily/comments/45839.htmlhttp://www.aygfsteel.com/WshmAndLily/articles/45839.html#Feedback0http://www.aygfsteel.com/WshmAndLily/comments/commentRss/45839.htmlhttp://www.aygfsteel.com/WshmAndLily/services/trackbacks/45839.html作者:
 

 应用½E‹åºä¸­çš„æç¤ºä¿¡æ¯å¤„理½E‹åºæ˜¯éžå¸¸å‡ºé‡è¦çš„部分,用户要知道他输入的资料到底正不正¼‹?br />
åQŒæˆ–者是应用½E‹åºæœ‰ä¸€äº›æ½CÞZ¿¡æ¯è¦å‘Šè¯‰ç”¨æˆ·åQŒéƒ½å¿…须通过提示信息处理½E‹åºæ¥æ˜¾½Cºé€‚当的信息,

让用户了解下一步该如何配置。提½CÞZ¿¡æ¯æœ‰å¾ˆå¤š¿Uç±»åQŒåŒ…括警告,错误åQŒæ½Cºï¼Œ¼‹®è®¤åQŒé‡è¯•等。不

同种¾cÈš„æç¤ºä¿¡æ¯æ¡†é€‚合用在各种不同的情å†üc€?br />
  在C++Builder中开发提½CÞZ¿¡æ¯æ¡†åªé¡»è°ƒç”¨MessageBox˜q™ä¸ªä¿¡æ¯æç¤ºæ¡†å‡½æ•°å°±è¡Œï¼Œä¸‹é¢ž®±æ˜¯˜q™ä¸ª

函数说明åQ?br />
int __fastcall MessageBox(const char * Text,//提示信息框的内容

const char * Caption, //提示信息框的标题

int Flags); //提示信息框的¾cÕdˆ«

  参数Flags的值是用来标志提示信息框的¾cÕdˆ«çš„,下面是一些常用的¾cÕdˆ«åQ?br />
参数值 样式 意�br />MB_ICONWARNING 含图标、固定按钮 警告信息框
MB_ICONQUESTION 含图标、固定按钮 疑问信息框
MB_IConERROR 含图标、固定按钮 错误信息框
MB_ICONASTERISK 含图标、固定按钮 提½CÞZ¿¡æ¯æ¡†
MB_HELP 不含图标、可改变按钮 说明信息æ¡?br />MB_OK 不含图标、可改变按钮 提示信息æ¡?br />MB_OKCANCEL 不含图标、可改变按钮 ¼‹®è®¤ä¿¡æ¯æ¡?br />MB_RETRYCANCEL 不含图标、可改变按钮 重试信息æ¡?br />MB_YESNO 不含图标、可改变按钮 是否信息æ¡?br />MB_YESNOCANCEL 不含图标、可改变按钮 是否取消信息æ¡?br />
  从上表可以看出来åQŒæ½CÞZ¿¡æ¯æ¡†çš„类别可以分成含图标和不含图标,含图标的意思就是指提示

信息框上会有代表意义的图形,不过˜q™ç±»åž‹çš„æç¤ºä¿¡æ¯æ¡†çš„æŒ‰é’®éƒ½æ˜¯å›ºå®šçš„,都是【确定】按钮,

不能增加也不能省略;不含图标的提½CÞZ¿¡æ¯æ¡†åQŒè™½ç„¶æ²¡æœ‰å¯¹åº”的囑ÖŞ昄¡¤ºåœ¨æ½CÞZ¿¡æ¯æ¡†ä¸Šï¼Œå¯æ˜¯ä½?br />
却可以在˜q™ç§¾cÕdž‹çš„æ½CÞZ¿¡æ¯æ¡†å†…,加入各种¾l„合的按钮,用于各种不同的情å†üc€?br />

MessageBox函数会返回一个整数å€û|¼Œ˜q™ä¸ªæ•´æ•°å€ég»£è¡¨ç”¨æˆ·åˆšåˆšç‚¹å‡ÀL½CÞZ¿¡æ¯æ¡†ä¸Šçš„哪个按钮åQŒæ¯ä¸?br />
˜q”回值的代表意义在下表:

˜q”回值 数值 意ä¹?br />IDOK 1 ¼‹®å®š
IDCANCEL 2 取消
IDABORT 3 中断
IDRETRY 4 重试
IDIGNORE 5 忽略
IDYES 6 �br />IDNO 7 �br />

下面是提½CÞZ¿¡æ¯æ¡†çš„示范程序:

1åQŽÂ è­¦å‘Šä¿¡æ¯æ¡†

Application->MessageBox(\\\"警告信息框\\\",\\\"警告信息框\\\",MB_ICONWARNING);

2åQŽç–‘问信息框

Application->MessageBox(\\\"疑问信息框\\\",\\\"疑问信息框\\\",MB_ICONQUESTION);

3åQŽé”™è¯¯æ½Cºæ¡†

Application->MessageBox(\\\"错误信息框\\\",\\\"错误信息框\\\",MB_IConERROR);

4åQŽæ½CÞZ¿¡æ¯æ¡†

Application->MessageBox(\\\"提示信息框\\\",\\\"提示信息框\\\",MB_ICONASTERISK);

5åQŽè¯´æ˜Žä¿¡æ¯æ¡†

Application->MessageBox(\\\"说明信息框\\\",\\\"说明信息框\\\",MB_HELP);

6åQŽæ½CÞZ¿¡æ¯æ¡†

Application->MessageBox(\\\"提示信息框\\\",\\\"提示信息框\\\",MB_OK);

7åQŽç¡®è®¤ä¿¡æ¯æ¡†

Application->MessageBox(\\\"¼‹®è®¤ä¿¡æ¯æ¡†\\\",\\\"¼‹®è®¤ä¿¡æ¯æ¡†\\\",MB_OKCANCEL);

8åQŽé‡è¯•信息框

Application->MessageBox(\\\"重试信息框\\\",\\\"重试信息框\\\",MB_RETRYCANCEL);

9åQŽæ˜¯å¦ä¿¡æ¯æ¡†

Application->MessageBox(\\\"是否信息框\\\",\\\"是否信息框\\\",MB_YESNO);

10åQŽæ˜¯å¦å–消信息框

Application->MessageBox(\\\"是否取消信息框\\\",\\\"是否取消信息框\\\",MB_YESNOCANCEL);

  在C++Builder中,˜q˜æä¾›äº†ä¸€ä¸ªå¾ˆ½Ž€å•的信息提示框函敎ͼŒé‚£å°±æ˜¯ShowMessage。这个函数只

有一个字½W¦ä¸²å‚æ•°åQŒä½ å¯ä»¥æŠŠè¦æ˜„¡¤ºçš„å­—½W¦ä¸²æ”‘Öˆ°˜q™ä¸ªå­—符串参数里面,ShowMessagež®±å›žæ˜„¡¤ºå‡?br />
该信息,但是没有图标åQŒä¹Ÿæ²¡æœ‰æŒ‰é’®åQŒåªæœ‰å•¾U¯çš„字符串信息而已ã€?br />
下面是ShowMessage函数的说明:

extern PACKAGE void __fastcall ShowMessage(const AnsiString Msg);

例子åQ?br />
ShowMessage(\\\"˜q™ä¸ªž®±æ˜¯ShowMessage函数生成的信息提½Cºæ¡†åQ\\\");
Application->MessageBox(\\\"AA\\\", \\\"BB\\\", MB_OK | MB_ICONSTOP);
�br />MessageBox(Application->Handle,\\\"AA\\\", \\\"BB\\\", MB_OK | MB_ICONSTOP);
˜q™ç§å†™æ³•“çñ”别”最高:如果弹出˜q™æ ·çš„对话框åQŒä¸ç‚ÒŽŽ‰åQŒApplication下所有的Forméƒ?br />不能“动”的ã€?br />
MessageBox(Form1->Handle,\\\"AA\\\", \\\"BB\\\", MB_OK | MB_ICONSTOP);
˜q™ç§å†™æ³•“çñ”别”其‹Æ¡ï¼šå¦‚果弹出˜q™æ ·çš„对话框åQŒä¸ç‚ÒŽŽ‰åQŒåªæœ‰From1不能“动”,其他
Show()çš„From˜q˜å¯ä»¥ç‚¹ã€?br />
MessageBox(NULL,\\\"AA\\\", \\\"BB\\\", MB_OK | MB_ICONSTOP);
˜q™ç§å†™æ³•“çñ”别”最低:如果弹出˜q™æ ·çš„对话框åQŒä¸ç‚ÒŽŽ‰åQŒFrom1也能“动”,其他
Show()的From也可以点�br />

]]>
一些关于BCB的文档资料链æŽ?/title><link>http://www.aygfsteel.com/WshmAndLily/articles/45463.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Wed, 10 May 2006 07:10:00 GMT</pubDate><guid>http://www.aygfsteel.com/WshmAndLily/articles/45463.html</guid><wfw:comment>http://www.aygfsteel.com/WshmAndLily/comments/45463.html</wfw:comment><comments>http://www.aygfsteel.com/WshmAndLily/articles/45463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/WshmAndLily/comments/commentRss/45463.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/WshmAndLily/services/trackbacks/45463.html</trackback:ping><description><![CDATA[1.<a >http://nemolog.cnblogs.com/</a><img src ="http://www.aygfsteel.com/WshmAndLily/aggbug/45463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/WshmAndLily/" target="_blank">semovy</a> 2006-05-10 15:10 <a href="http://www.aygfsteel.com/WshmAndLily/articles/45463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++Builder实现人民币小写è{大写http://www.aygfsteel.com/WshmAndLily/articles/45453.htmlsemovysemovyWed, 10 May 2006 06:47:00 GMThttp://www.aygfsteel.com/WshmAndLily/articles/45453.htmlhttp://www.aygfsteel.com/WshmAndLily/comments/45453.htmlhttp://www.aygfsteel.com/WshmAndLily/articles/45453.html#Feedback0http://www.aygfsteel.com/WshmAndLily/comments/commentRss/45453.htmlhttp://www.aygfsteel.com/WshmAndLily/services/trackbacks/45453.html1、rmb.h


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

 



]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ¹ãÄþÏØ| ºÓ±±Çø| ÒÁÎáÏØ| º½¿Õ| ʯ¾°É½Çø| ÂåÂ¡ÏØ| ÑØºÓ| ¾¸ÓîÏØ| °ö²ºÊÐ| Äϰ¶Çø| Öн­ÏØ| ²ßÀÕÏØ| ÄþÉÂÏØ| ׯºÓÊÐ| ÐËÂ¡ÏØ| ¸·Æ½ÏØ| ÇåÔ·ÏØ| Í¼Ä¾Êæ¿ËÊÐ| ÁijÇÊÐ| Æ½Ò£ÏØ| ÄþÝõ| άÎ÷| Ñ®ÒØÏØ| ´óÆÒÏØ| ËçÀâÏØ| ÁÙä¬ÏØ| µÃÈÙÏØ| ÄÛ½­ÏØ| ÎÂËÞÏØ| ¹þ¶û±õÊÐ| »ù¡ÊÐ| °¢³ÇÊÐ| Çø¡£| ¶«¸ÛÊÐ| ÆîÃÅÏØ| ³¤ÊÙÇø| Îâ±¤ÏØ| ÓÑÒêÏØ| ÖÜÄþÏØ| ÇàÖÝÊÐ| ÑγÇÊÐ|