C++ Builder控件版

2016-02-19 16:59 15 1 收藏

下面,图老师小编带您去了解一下C++ Builder控件版,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - 编程语言 】

  **************************************************************************************

  * [翻文转字]C++ Builder控件版 *

  * V1.0 正式版 使用说明 *

  * 2000-04-30 *

  **************************************************************************************

  版权说明:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  -------------

  作者:周鹏飞(莫高软件工作室)

  Email: mogao@371.net

  URL: http://mogao.126.com

  教育网:http://home.gbsource.net/mogao

  本控件为开放源代码的自由软件,版权由作者:周鹏飞和[莫高软件工作室]所有。

  功能简介:

  -------------

  本控件主要作用是: 可编码和解码目前常见的各种乱码。有我在手,乱码不愁!

  可以使汉字在Gb码、Big5码和HZ码和之间进行自由的转换。

  可以把任意文字和文件转换为UUencode、XXencode、Base64

  和QP码这四种在Email中常用的编码方案,同时还支持解码。

  升级介绍:

  -------------

  V1.0正式版(2000-04-30) 增加三种在Email中常用的编码方案:UUencode、XXencode和Base64,

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  可以把任意文字和文件转换为这三种编码,同时还支持解码。

  V1.0 beta(1999-12-05) 可以使汉字在Gb码、Big5码、HZ码和QP码之间进行自由的转换。

  使用授权:

  -------------

  见License.txt文件。

  使用环境:

  -------------

  本控件是用C++ Builder4.0开发而成,现在只能在C++ Builder4.0下使用,

  BCB3因手头没有所以没法测试,请安装BCB3的朋友帮忙测试,谢谢。同时

  For Delphi的版本、DLL版本和ActiveX版本也将在近期推出。

  技术支持与反馈:

  -------------

  本控件为自由软件,不用注册但同样可以得到技术支持。如果您想得到本控件的技

  术支持和更新通知,请访问我的Homepage,加入邮递列表或直接给我写信,Email的

  主题(Subject)应写为:订阅邮件列表。

  如果您对本控件有什么想法、建议或者您使用了本控件,请来信告知。谢谢您的支持。

  使用说明:

  -------------

  1. [安装控件]

  在BCB4的IDE中选择Component菜单下Install Component项,在Unit file name、

  Package file name中指定gbbig.cpp文件的路径和所使用的包。包可以是已经

  存在的,例如D:borlandcbuilder4Libdclusr40.bpk,也可以创建新包,例如

  D:BorlandCBuilder4Projectsgb.bpk。单击OK,然后BCB会提示要编译,当编

  译完成后单击Install。至此,控件安装成功,应能在构件面板[莫高软件]页上看

  到控件图标,如果没有,选择Component菜单下Install Package项,单击Add,选

  定刚才编译的.bpl文件(如gb.bpl),单击确定,单击OK。

  2. [使用控件]

  请先将下面3个文件

  gbbig.h (控件头文件)

  gbbig.res (控件资源文件)

  gbbig.dcr (控件图标文件)

  拷贝到和您的程序同一个目录下,然后您就可以象使用BCB自带的控件一样使用本

  控件了^_^

  3. [函数说明]

  请参看源程序。

  

/*************************************************************************
*       [翻文转字]C++ Builder控件版            *
*           V1.0 正式版                *
*               2000-04-30                 *
*                                    *
*作者:周鹏飞(莫高软件工作室)                     *
*Email: mogao@371.net                          *
*URL: http://mogao.126.com                        *
*教育网:http://home.gbsource.net/mogao                 *
*本控件为开放源代码的自由软件,版权由作者:周鹏飞和[莫高软件工作室]所有。*
*************************************************************************/
//---------------------------------------------------------------------------
#include vcl.h
#pragma hdrstop
#include "GbBig.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TGbBig *)
{
    new TGbBig(NULL);
}
//---------------------------------------------------------------------------
__fastcall TGbBig::TGbBig(TComponent* Owner)
    : TComponent(Owner)
{
 FInputText=NULL;
 FOutputText=NULL;
 temp=NULL;
 FInput='';
 FOutput='';
}
//---------------------------------------------------------------------------
__fastcall TGbBig::~TGbBig(void)
{
 FInputText=NULL;
 delete FOutputText;
 FOutputText=NULL;
 delete temp;
 temp=NULL;
 FInput='';
 FOutput='';
}
//---------------------------------------------------------------------------
//编码函数
void __fastcall TGbBig::Encode(void)
{
if(FInputText)
{
  delete FOutputText;
  FOutputText=NULL;
  switch(Code)
  {
   case 0 :
       FOutputText=new char[Num+1];
       Res=LoadResource(HInstance,FindResource(HInstance,"GB_BIG5","TEXT"));
       FontLib=(char*)LockResource(Res);
       GbToBig5();
       break;
   case 1 :
       FOutputText=new char[Num+1];
       Res=LoadResource(HInstance,FindResource(HInstance,"BIG5_GB","TEXT"));
       FontLib=(char*)LockResource(Res);
       Big5ToGb();
       break;
   case 2 :
       FOutputText=new char[Num*3+1];
       EncodeHZ();
       break;
   case 3 :
       FOutputText=new char[Num+1];
       DecodeHZ();
       break;
   case 4 :
       FOutputText=new char[Num*3+1];
       EncodeQP();
       break;
   case 5 :
       FOutputText=new char[Num+1];
       DecodeQP();
       break;
   case 6 :
       FOutputText=new char[Num/57+Num*4/3+5];
       EncodeBase64();
       break;
   case 7 :
       FOutputText=new char[Num*3/4+1];
       DecodeBase64();
       break;
   case 8 :
       FOutputText=new char[Num*2/45+Num*4/3+5];
       EncodeUue();
       break;
   case 9 :
       FOutputText=new char[Num*3/4+1];
       DecodeUue();
       break;
   case 10 :
       FOutputText=new char[Num*2/45+Num*4/3+5];
       EncodeXxe();
       break;
   case 11 :
       FOutputText=new char[Num*3/4+1];
       DecodeXxe();
       break;
  }
}
}
//---------------------------------------------------------------------------
//GB码转换为Big5码
void __fastcall TGbBig::GbToBig5(void)
{
 unsigned char gx,gy,bx,by;
 unsigned int xx,yy,i=0;
 while((gx=*FInputText++)!='')
 {
  if(gx=161)
  {
   gy=*FInputText++;
   xx=(gx-161)*190;
   yy=(gy-161)*2;
   bx=*(FontLib+xx+yy);
   by=*(FontLib+xx+yy+1);
   if(gy161) {bx=gx;by=gy;}
   *(FOutputText+i)=bx;
   i++;
   *(FOutputText+i)=by;
   i++;
  }
  else {*(FOutputText+i)=gx;i++;}
 }
 *(FOutputText+i)='';
 FOutput=(AnsiString)FOutputText;
}
//---------------------------------------------------------------------------
//Big5码转换为GB码
void __fastcall TGbBig::Big5ToGb(void)
{
 unsigned char gx,gy,bx,by;
 unsigned int xx,yy,i=0;
 while((bx=*FInputText++)!='')
 {
  if(bx=161)
  {
   by=*FInputText++;
   xx=(bx-161)*316;
   if(by=126) yy=(by-64)*2;
   else yy=(by-98)*2;
   gx=*(FontLib+xx+yy);
   gy=*(FontLib+xx+yy+1);
   if(by64) {gx=bx;gy=by;}
   *(FOutputText+i)=gx;
   i++;
   *(FOutputText+i)=gy;
   i++;
  }
  else {*(FOutputText+i)=bx;i++;}
 }
 *(FOutputText+i)='';
 FOutput=(AnsiString)FOutputText;
}
//---------------------------------------------------------------------------
//用HZ进行编码
void __fastcall TGbBig::EncodeHZ(void)
{
 unsigned int x=0,i=0;
 unsigned char hz;
 while((hz=*FInputText++)!='')
 {
  if(hz=161)
  {
   if(!x)
   {
    *(FOutputText+i)='~';
    i++;
    *(FOutputText+i)='{';
    i++;
    x=1;
   }
   else x=1;
   *(FOutputText+i)=(char)(hz-128);
   i++;
  }
  else
  {
   if(x)
   {
    *(FOutputText+i)='~';
    i++;
    *(FOutputText+i)='}';
    i++;
    x=0;
   }
   else x=0;
   *(FOutputText+i)=hz;
   i++;
  }
 }
 if(x)
 {
  *(FOutputText+i)='~';
  i++;
  *(FOutputText+i)='}';
  i++;
  x=0;
 }
 *(FOutputText+i)='';
 FOutput=(AnsiString)FOutputText;
}
//---------------------------------------------------------------------------
//对HZ进行解码
void __fastcall TGbBig::DecodeHZ(void)
{
 unsigned i=0;
 unsigned char hz;
 while((hz=*FInputText++)!='')
 {
  loop2:
  if(hz==126)
   if((hz=*FInputText++)!='')
    if(hz==123)
     while((hz=*FInputText++)!='')
     {
      loop3:
      if(hz==126)
      {
       if((hz=*FInputText++)!='')
        if(hz==125) goto loop;
        else {*(FOutputText+i)=(char)254;i++;goto loop3;}
      }
      else {*(FOutputText+i)=(char)(hz+128);i++;}
     }
    else {*(FOutputText+i)='~';i++;goto loop2;}
   else {*(FOutputText+i)='~';i++;goto end;}
  else {*(FOutputText+i)=hz;i++;}
  loop:;
 }
 end:;
 *(FOutputText+i)='';
 FOutput=(AnsiString)FOutputText;
}
//---------------------------------------------------------------------------
//用QP进行编码
void __fastcall TGbBig::EncodeQP(void)
{
 unsigned char first,second,sour;
 unsigned int i=0;
 while((sour=*FInputText++)!='')
 {
  if(sour==61)
  {
   *(FOutputText+i)='=';
   i++;
   *(FOutputText+i)='3';
   i++;
   *(FOutputText+i)='D';
   i++;
  }
  else
  {
   if(sour127)
   {
    first=sour4;
    second=sour&15;
    if(first9) first+=55;
    else first+=48;
    if(second9) second+=55;
    else second+=48;
    *(FOutputText+i)='=';
    i++;
    *(FOutputText+i)=first;
    i++;
    *(FOutputText+i)=second;
    i++;
   }
   else {*(FOutputText+i)=sour;i++;}
  }
 }
 *(FOutputText+i)='';
 FOutput=(AnsiString)FOutputText;
}
//---------------------------------------------------------------------------
//对QP进行解码
void __fastcall TGbBig::DecodeQP(void)
{
 unsigned char first,second,sour;
 unsigned int i=0;
 while((sour=*FInputText++)!='')
 {
  if(sour==61)
  {
   if((first=*FInputText++)=='') {*(FOutputText+i)=sour;i++;break;}
   else if((first48)||((first57)&&(first65))||(first70))
   {
    *(FOutputText+i)=sour;
    i++;
    *(FOutputText+i)=first;
    i++;
    continue;
   }
   else if((second=*FInputText++)=='')
   {
    *(FOutputText+i)=sour;
    i++;
    *(FOutputText+i)=first;
    i++;
    break;
   }
   else if((second48)||((second57)&&(second65))||(second70))
   {
    *(FOutputText+i)=sour;
    i++;
    *(FOutputText+i)=first;
    i++;
    *(FOutputText+i)=second;
    i++;
    continue;
   }
   if(first=65) first-=55;
   else first-=48;
   if(second=65) second-=55;
   else second-=48;
   sour=NULL;
   sour=first4;
   sour|=second;
  }
  *(FOutputText+i)=sour;
  i++;
 }
 *(FOutputText+i)='';
 FOutput=(AnsiString)FOutputText;
}
//---------------------------------------------------------------------------
//用Base64进行编码
void __fastcall TGbBig::EncodeBase64(void)
{
 unsigned char *sour,*obje,*inputtext;
 unsigned int i,j=0,m=57,n=57;
 inputtext=FInputText;
 sour=new char[57];
 obje=new char[76];
 while(m==57)
 {
  m=strlen(inputtext);
  if(m57)
  {
   if(m==0) break;
   n=m;
   strncpy(sour,inputtext,m);
   if(n%3) n=n-n%3+3;
   for(i=m;in;i++)
    *(sour+i)=NULL;
  }
  else
  {
   m=57;
   strncpy(sour,inputtext,m);
  }
  inputtext+=m;
  for(i=0;in/3;i++)
   Base64(sour+i*3,obje+i*4);
  strncpy(FOutputText+j,obje,n/3+m);         //n/3*4-(n-m)
  j+=n/3+m;
  for(i=0;i(n-m);i++,j++)
   *(FOutputText+j)='=';
  *(FOutputText+j++)='n';
 }
 *(FOutputText+j)='';
 FOutput=(AnsiString)FOutputText;
 delete []sour;
 delete []obje;
}
//---------------------------------------------------------------------------
void __fastcall TGbBig::Base64(unsigned char chasc[3],unsigned char chuue[4])
/*
 chasc:未编码的二进制代码
 chuue:编码过的Base64代码
*/
{
 unsigned int i,k=2;
 unsigned char t=NULL;
 for(i=0;i3;i++)
 {
  *(chuue+i)=*(chasc+i)k;
  *(chuue+i)|=t;
  t=*(chasc+i)(8-k);
  t=2;
  k+=2;
 }
 *(chuue+3)=*(chasc+2)&63;
 for(i=0;i4;i++)
  if((*(chuue+i)=0)&&(*(chuue+i)=25)) *(chuue+i)+=65;
  else if((*(chuue+i)=26)&&(*(chuue+i)=51)) *(chuue+i)+=71;
  else if((*(chuue+i)=52)&&(*(chuue+i)=61)) *(chuue+i)-=4;
  else if(*(chuue+i)==62) *(chuue+i)=43;
  else if(*(chuue+i)==63) *(chuue+i)=47;
}
//---------------------------------------------------------------------------
//对Base64解码
void __fastcall TGbBig::DecodeBase64(void)
{
 unsigned char *sour,*obje,*inputtext;
 unsigned int i,j=0,m=57,n=76;
 sour=new char[76];
 obje=new char[57];
 inputtext=FInputText;
 while(m==57)
 {
  while(*inputtext=='r'||*inputtext=='n')
   inputtext++;
  m=strlen(inputtext);
  if(m76)
  {
   if(m==0) break;
   n=m;
  }
  m=n/4*3;
  strncpy(sour,inputtext,n);
  inputtext+=n;
  for(i=0;in/4;i++)
   unBase64(sour+i*4,obje+i*3);
  strncpy(FOutputText+j,obje,m);
  j+=m;
 }
 *(FOutputText+j)='';
 FOutput=(AnsiString)FOutputText;
 delete []sour;
 delete []obje;
}
//---------------------------------------------------------------------------
/*Base64解码*/
void __fastcall TGbBig::unBase64(unsigned char chuue[4],unsigned char chasc[3])
/*
chuue:未解码的Base64代码
chasc:解码过的二进制代码
*/
{
 int i,k=2;
 unsigned char t=NULL;
 for(i=0;i4;i++)
  if((*(chuue+i)=65)&&(*(chuue+i)=90)) *(chuue+i)-=65;
  else if((*(chuue+i)=97)&&(*(chuue+i)=122)) *(chuue+i)-=71;
  else if((*(chuue+i)=48)&&(*(chuue+i)=57)) *(chuue+i)+=4;
  else if(*(chuue+i)==43) *(chuue+i)=62;
  else if(*(chuue+i)==47) *(chuue+i)=63;
  else if(*(chuue+i)==61) *(chuue+i)=0;
 for(i=0;i3;i++)
 {
  *(chasc+i)=*(chuue+i)k;
  k+=2;
  t=*(chuue+i+1)8-k;
  *(chasc+i)|=t;
 }
}
//---------------------------------------------------------------------------
//用UUenCode进行编码
void __fastcall TGbBig::EncodeUue(void)
{
 unsigned char *sour,*obje,*inputtext;
 unsigned int i,j=0,m=45,n=45,num;
 inputtext=FInputText;
 sour=new char[45];
 obje=new char[60];
 while(m==45)
 {
  m=strlen(inputtext);
  if(m45)
  {
   if(m==0) break;
   n=m;
   strncpy(sour,inputtext,m);
   if(n%3) n=n-n%3+3;
   for(i=m;in;i++)
    *(sour+i)=NULL;
  }
  else
  {
   m=45;
   strncpy(sour,inputtext,m);
  }
  inputtext+=m;
  for(i=0;in/3;i++)
   Uue(sour+i*3,obje+i*4);
  *(FOutputText+j++)=m+32;
  strncpy(FOutputText+j,obje,n/3*4);
  j+=n/3*4;
  *(FOutputText+j++)='n';
 }
 *(FOutputText+j++)='`';
 *(FOutputText+j++)='n';
 *(FOutputText+j)='';
 FOutput=(AnsiString)FOutputText;
 delete []sour;
 delete []obje;
}
//---------------------------------------------------------------------------
/*Uuencode编码*/
void __fastcall TGbBig::Uue(unsigned char chasc[3],unsigned char chuue[4])
/*
chasc:未编码的二进制代码
chuue:编码过的Uue代码
*/
{
 int i,k=2;
 unsigned char t=NULL;
 for(i=0;i3;i++)
 {
  *(chuue+i)=*(chasc+i)k;
  *(chuue+i)|=t;
  if(*(chuue+i)==NULL) *(chuue+i)+=96;
  else *(chuue+i)+=32;
  t=*(chasc+i)(8-k);
  t=2;
  k+=2;
 }
 *(chuue+3)=*(chasc+2)&63;
 if(*(chuue+3)==NULL) *(chuue+3)+=96;
 else *(chuue+3)+=32;
}
//---------------------------------------------------------------------------
//对UUenCode解码
void __fastcall TGbBig::DecodeUue(void)
{
 unsigned char *sour,*obje,*inputtext;
 unsigned int i,j=0,m=45,n;
 sour=new char[60];
 obje=new char[45];
 inputtext=FInputText;
 while(m==45)
 {
  while(*inputtext=='r'||*inputtext=='n')
   inputtext++;
  if((m=*inputtext)!=96||m=='')
  {
   n=m-32;
   m=n;
   inputtext++;
  }
  else break;
  if(n45)
  {
   if(n%3) n=(n-n%3+3)/3*4;
   else n=n/3*4;
  }
  else
   n=n/3*4;
  strncpy(sour,inputtext,n);
  inputtext+=n;
  for(i=0;in/4;i++)
   unUue(sour+i*4,obje+i*3);
  strncpy(FOutputText+j,obje,m);
  j+=m;
 }
 *(FOutputText+j)='';
 FOutput=(AnsiString)FOutputText;
 delete []sour;
 delete []obje;
}
//---------------------------------------------------------------------------
/*Uuencode解码*/
void __fastcall TGbBig::unUue(unsigned char chuue[4],unsigned char chasc[3])
/*
chuue:未解码的Uue代码
chasc:解码过的二进制代码
*/
{
 int i,k=2;
 unsigned char t=NULL;
 if(*chuue==96) *chuue=NULL;
 else *chuue-=32;
 for(i=0;i3;i++)
 {
  *(chasc+i)=*(chuue+i)k;
  k+=2;
  if(*(chuue+i+1)==96) *(chuue+i+1)=NULL;
  else *(chuue+i+1)-=32;
  t=*(chuue+i+1)8-k;
  *(chasc+i)|=t;
 }
}
//---------------------------------------------------------------------------
//用XXenCode进行编码
void __fastcall TGbBig::EncodeXxe(void)
{
 unsigned char *sour,*obje,*inputtext;
 unsigned int i,j=0,m=45,n=45;
 char set[]="+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 inputtext=FInputText;
 sour=new char[45];
 obje=new char[60];
 while(m==45)
 {
  m=strlen(inputtext);
  if(m45)
  {
   if(m==0) break;
   n=m;
   strncpy(sour,inputtext,m);
   if(n%3) n=n-n%3+3;
   for(i=m;in;i++)
    *(sour+i)=NULL;
  }
  else
  {
   m=45;
   strncpy(sour,inputtext,m);
  }
  inputtext+=m;
  for(i=0;in/3;i++)
   Xxe(sour+i*3,obje+i*4);
  *(FOutputText+j++)=set[m&63];
  strncpy(FOutputText+j,obje,n/3*4);
  j+=n/3*4;
  *(FOutputText+j++)='n';
 }
 *(FOutputText+j++)='+';
 *(FOutputText+j++)='n';
 *(FOutputText+j)='';
 FOutput=(AnsiString)FOutputText;
 delete []sour;
 delete []obje;
}
//---------------------------------------------------------------------------
/*Xxencode编码*/
void __fastcall TGbBig::Xxe(unsigned char chasc[3],unsigned char chxxe[4])
/*
chasc:未编码的二进制代码
chxxe:编码过的Xxe代码
*/
{
 int i;
 char set[]="+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 chxxe[0]=chasc[0]2;
 chxxe[1]=(chasc[0]4)&48|(chasc[1]4)&15;
 chxxe[2]=(chasc[1]2)&60|(chasc[2]6)&3;
 chxxe[3]=chasc[2]&63;
 for(i=0;i4;i++) chxxe[i]=set[chxxe[i]];     /*查表*/
}
/*需注意的是,Xxencode文件正文部分中每一行的第一个字母是:从源文件中实际         读取的字符数的ASCII值取后六位后用set[]查表得到的。*/
//---------------------------------------------------------------------------
//对XXenCode解码
void __fastcall TGbBig::DecodeXxe(void)
{
 unsigned char *sour,*obje,*inputtext;
 unsigned int i,j=0,m=45,n;
 sour=new char[60];
 obje=new char[45];
 inputtext=FInputText;
 while(m==45)
 {
  while(*inputtext=='r'||*inputtext=='n')
   inputtext++;
  if((m=*inputtext)!='+'||m=='')
  {
   n=set(m);
   m=n;
   inputtext++;
  }
  else break;
  if(n45)
  {
   if(n%3) n=(n-n%3+3)/3*4;
   else n=n/3*4;
  }
  else n=n/3*4;
  strncpy(sour,inputtext,n);
  inputtext+=n;
  for(i=0;in/4;i++)
   unXxe(sour+i*4,obje+i*3);
  strncpy(FOutputText+j,obje,m);
  j+=m;
 }
 *(FOutputText+j)='';
 FOutput=(AnsiString)FOutputText;
 delete []sour;
 delete []obje;
}
//---------------------------------------------------------------------------
/*Xxencode解码*/
unsigned char __fastcall TGbBig::set(unsigned char ch)      /*查表函数*/
{
 if(ch==43) ch=0;
 else if(ch==45) ch=1;
 else if(ch=48&&ch=57) ch-=46;
 else if(ch=65&&ch=90) ch-=53;
 else if(ch=97&&ch=122) ch-=59;
 return ch;
}
//---------------------------------------------------------------------------
void __fastcall TGbBig::unXxe(unsigned char chxxe[4],unsigned char chasc[3])
/*
chxxe:未解码的Xxe代码
chasc:解码过的二进制代码
*/
{
 int k=2 ,i;
 unsigned char t;
 t=NULL;
 *chxxe=set(*chxxe);
 for(i=0;i3;i++)
 {
  *(chxxe+i+1)=set(*(chxxe+i+1));
  *(chasc+i)=*(chxxe+i)k;
  k+=2;
  t=*(chxxe+i+1)8-k;
  *(chasc+i)|=t;
 }
}
//---------------------------------------------------------------------------
void __fastcall TGbBig::Input(AnsiString FInput)
{
 delete temp;
 temp=NULL;
 Num=FInput.Length();
 FInputText=new char[Num+1];
 strncpy(FInputText,FInput.c_str(),Num);
 FInputText[Num]='';
 temp=FInputText;
}
//---------------------------------------------------------------------------
void __fastcall TGbBig::InputText(char* Text)
{
 delete temp;
 temp=NULL;
 Num=StrLen(Text);
 FInputText=new char[Num+1];
 strncpy(FInputText,Text,Num);
 FInputText[Num]='';
 temp=FInputText;
}
//---------------------------------------------------------------------------
namespace Gbbig
{
    void __fastcall PACKAGE Register()
    {
         TComponentClass classes[1] = {__classid(TGbBig)};
         RegisterComponents("莫高软件", classes, 0);
    }
}
//---------------------------------------------------------------------------

来源:https://www.tulaoshi.com/n/20160219/1613795.html

延伸阅读
13.对话框组件 96)问:怎样编写文件打开、保存等对话框? 答:C++Builder为我们提供了许多常用的对话框组件,这些对话框组件都放在组件模板的Dialogs选项卡中,例如Font,Color,Open和Print对话框。其中OpenDialog对话框组件最具有代表性,只要掌握了它的用法,那么你也就会使用其他的对话框组件了。 97)问:对话框组件...
53)问:能介绍一下TTreeNodes与TTreeNode? 答:在BCB中,树状视图的节点是通过TTreeNodes对象来管理的,通过这个对象可以对树状视图进行动态的增加、删除、插入、移动节点等操作。而每一个节点都是一个TTreeNode对象。 TTreeNode的主要属性和函数: Count:这个属性用来返回某个节点所拥有的子节点的数目。它不包括其子节...
  38)问:事件OnChange和OnScorll都可以描述滚动条的滚动事件,他们有什么区别吗?  答:事件OnChange和OnScorll是有区别的。只要属性Position的值发生改变,那么无论这个值是用户操作滚动条引起的还是通过程序修改的,都会产生OnChange事件。而OnScorll事件只有在用户操作滚动条时才发生。当用户操作滚动条时,首先发生OnScorll事件...
一直以来都想写一点为BCB初学者快速入门的东西,前不久写了几篇《闲谈BCB》想把自己学习BCB中如何来解决难点的方法说给大家,没想到被骂得不成样子。本想不写了,但觉得这些东西留下来能做什么呢?还是用另一种方法来重新演译我的思维吧,最近有些忙,那几篇没有写完的文章,我也会尽快写完的,至于《深入QR》,我想我一定会用另一种手法来...
4.列表类组件 31)问:当我需要使用多个选项的时候,使用单选按钮或复选框来进行选择不是很恰当,因为在窗体上放置大量的按钮既不利于布局的美观,又会消耗大量的系统资源,C++Builder有什么解决办法吗? 答:可以使用列表框(ListBox、CheckListBox)或组合框(ComboBox)这两类最常用的列表组件。 32)问:列表框有那些主要属...

经验教程

862

收藏

21
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部