首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>cc++>正文

C++Builder代码片断

http://www.oklinux.cn  2003-05-01  来源: 互联网  本站整理   会员收藏  游客收藏  【 】 
本文中包含了一些常用的代码片断,看看想想或许有他山之石可以攻玉的可能。

删除别名中所有的表、纯虚函数、虚函数、启动页面、指针、为指针解除引用、表的For循环
变量与常量的声明、检查表是否存在、组件的类名、剪贴板中的文字、字符流、检查表是否已打开
表的状态操作、改变PageControl的标签、向Query传递参数 日期属性 绘制状态条

删除别名中所有的表
void TData::CleanTemp()
{
TStringList *myTables = new TStringList();
TTable *Table = new TTable(this);
try
{
Session->GetTableNames("Temp", "", True, False, myTables);
}
catch (...) {}
// AnsiString str = myTables->GetText();
// ShowMessage(str);
for(int count=0; count <myTables->Count; count++)
{
Table->DatabaseName = "Temp";
Table->TableName = myTables->Strings[count];
Table->Close();
Table->DeleteTable();
}
delete myTables;
delete Table;
}

纯虚函数
//纯虚函数只在基类中出现,而在子类中必须有
//与其匹配的成员函数。程序中申明的子类的实例
//必须为基类中的每一个纯虚函数提供一个重载的成员函数。
class TBaseClass
{
public:
virtual void Display() = 0;
};
class TDerivedClass : public TBaseClass
{
public:
void Display() { ShowMessage("From Derived"); }
};
 
class TSecondDerivedClass : public TDerivedClass
{
public:
void Display() { ShowMessage("From Second Derived"); }
};
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TDerivedClass dc; dc.Display();// "From Derived"
TSecondDerivedClass sc; TBaseClass* bc = &sc;
bc->Display(); // "From Second Derived"
}

虚函数
//虚函数作为其他类的父类的成员函数。
//如果继承子类成员函数中存在与父类成员函数完全相同的函数,
//子类中的成员函数永远有效。
class Base
{
public:
virtual void Display() { ShowMessage("Base Class"); }
};
 
class DerivedOne : public Base
{
public:
void Display() { ShowMessage("DerivedOne"); }
};
 
class DerivedTwo : public Base
{
public:
void Display() { ShowMessage("DerivedTwo"); }
};
 
Base* pBases[10];
int count = 0;
DerivedOne aDerOne;
DerivedTwo aDerTwo;
pBases[count++] = &aDerOne;
pBases[count++] = &aDerTwo;
for( int i=0; i <count; i++ )
pBases->Display();

启动页面
USEDATAMODULE("Datamod.cpp", DataModule);
USEFORM("about.cpp", AboutBox);
USEFORM("main.cpp", MainForm);
USEFORM("splash.cpp", SplashForm);
//---------------------------------------------------------------------------
#include "splash.h"
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
SplashForm = new TSplashForm(Application);
SplashForm->Show();
SplashForm->Update();
Application->Initialize();
Application->Title = "Example of Loading Splash Form";
Application->HelpFile = "SplashHelp.hlp";
Application->CreateForm(__classid(TMainForm), &MainForm);
Application->CreateForm(__classid(TDataModule), &DataModule);
Application->CreateForm(__classid(TAboutBox), &AboutBox);
SplashForm->Hide();
SplashForm->Close();
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}

指针
int array[] = { 2, 4, 6, 8, 10}
int myInteger = array[3]; // 值为 8
 
// ----使用指针可以实现同样的功能 -----
int array[] = { 2, 4, 6, 8, 10}
int* myPtr = array;
int myInteger = myPtr[3]; // 值为8

为指针解除引用
int x = 32;
int* ptr = &x;
//解除指针的引用
//以获得内存位置的内容
int y = *ptr; // y = 32

表的For循环
void TDataModuleEmployee::ListNames( TStrings *Items )
{
try
{
for ( TableAll->First(); !TableAll->Eof; TableAll->Next() )
if ( TableAll->FieldByName("Deleted")->AsBoolean == false )
Items->AddObject( TableAll->FieldByName("Name")->AsString, (TObject *)TableAll->FieldByName("Refnum")->AsInteger );
}
catch (Exception &e)
{
Application->ShowException(&e);
};
}

变量与常量的声明
char ch;
int count = 1;
char* name = "csdn.net";
struct complex { float my, his;};
float real(complex* p) {return p->my};
const double pi = 3.1415926535897932385;
templetate abc(T a) { return a <0 ? -a : a; };
enum WebSite { one, two, three, four};
int* a; // * 指针
char* p[20]; // [ ] 数组
void myFunction(int); // ( )函数
struct str { short length; char* p; };
char ch1 = 'a';
char* p = &ch1; // &引用 ,p保持着ch1的地址
char ch2 = *p; // ch2 = 'a'

检查表是否存在
#include "io.h"
if (access(Table1->TableName.c_str(),0)) //检查表是否存在
{ // 若不存在就创建 ...
Table1->Active = false;
Table1->TableType = ttParadox;
Table1->FieldDefs->Clear();
Table1->FieldDefs->Add("Myfield", ftString, 15, false);
Table1->IndexDefs->Clear();
Table1->CreateTable();
Table1->Active = true;
}
else
Table1->Active = true;

组件的类名
//找出丢失的组件类名
for(int i=0; i <ComponentCount; i++)
{
if(String(dynamic_cast<TComponent&>(*Components).Name) == "")
{
ShowMessage(Components->ClassName());
}
}

剪贴板中的文字
#include "memory.h" // 包含 auto_ptr<>
#include "clipbrd.hpp" //包含 TClipboard & Clipboard()
// 范例程序,包含了一个memo控件
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{ //创建 TStringList对象
auto_ptr ClipText(new TStringList); //得到剪贴板中的文字的拷贝
ClipText->Text = Clipboard()->AsText; //然后加工一下...
Memo1->Lines->AddStrings(ClipText.get());
}

字符流
//范例一
#include "sstream"
const char *name = "cker";
const char *email = "[email protected]";
// 生成 "cker"[SMTP:[email protected]]
 
ostringstream ost;
ost <<""" <<name <<""[SMTP:" <<email <<"]";
Edit1->Text = ost.str().c_str();
 
//范例二
void TDataModuleEmployee::FullReport(const char *title)
{
Report.header(title);
Report <<sformat( "Employee #%2d: %s%sn", TableAllRefnum->Value, TableAllName->Text.c_str(),
TableAllManagerFlag->Value ?"(Manager)" : "" ) <<" Address: " <<
TableAllAddress->Text.c_str() <<endl <<" " <<TableAllCityProvZip->Text.c_str() <<
endl <<" " <<NameCountry(TableAllCanada->Value) <<endl;
Report.footer();
}

检查表是否已打开
void TData::CheckEdit()
{
for(int i=0; i <ComponentCount; i++)
{
if(dynamic_cast(Components))
{
if(((TTable*)Components)->State == dsEdit)
{
String s = "Table " + Components->Name + " is in edit mode" "rWould you like to post it before entering new task?";
if(MessageBox(NULL,s.c_str(),"Table in Edit Mode",MB_YESNO | MB_ICONINFORMATION) == IDYES)
((TTable*)Components)->Post();
else
((TTable*)Components)->Cancel();
}
}
}
}

表的状态操作
//关闭已打开的表并将他们恢复成初始状态。
void TData::MyTables(TForm * sender)
{
int i;
TTable * Table;
bool *active = new bool[MyClass->ComponentCount];//在动态数组中存放每个表的初始状态,然后关闭所有的表
for(i = 0; i <MyClass->ComponentCount; i++)
{
try
{
if((Table = dynamic_cast(MyClass->Components)) != NULL)
{
active = Table->Active;
Table->Active = false;
}
}
catch(...) {}; //异常应该只来自于dynamic cast...
}
for(i = 0; i <MyClass->ComponentCount; i++)
{
try
{
if((Table = dynamic_cast(MyClass->Components)) != NULL)
{
if(Table->DatabaseName != OPTARDatabase->DatabaseName)
continue;
DBIResult result = DBIERR_NONE + 1;
while(result != DBIERR_NONE) //若希望的话,这样允许用户重试!
{
result = DbiPackTable (OPTARDatabase->Handle,NULL,Table->TableName.c_str(),NULL, true);
if(result != DBIERR_NONE)
{
AnsiString rsltText = "Unable to pack " + Table->TableName + "." ;
char rslt[DBIMAXMSGLEN + 1];
DbiGetErrorString(result, rslt) rsltText += ". Try again?";
if(Application->MessageBox(rsltText.c_str(), "Error!",MB_YESNO) != IDYES)
break;
}
}
}
}
catch (...) {}; //异常应该只来自于dynamic cast...
}
// 将所有的表设回初始状态。
for(i = 0; i <MyClass->ComponentCount; i++)
{
try
{
if((Table = dynamic_cast(MyClass->Components)) != NULL)
Table->Active = active;
}
catch(...) {};
}
delete []active;
}

改变PageControl的标签
void __fastcall TfmMainForm::Cancel1Click(TObject *Sender)
{
int i;
switch (PageControl1->ActivePage->Tag))
{
case 1:
for (i=0; i <ComponentCount; i++)
{
if (dynamic_cast(Components))
dynamic_cast(Components)->Enabled = false;
}
Data->tbDetail->Cancel();
break;
case 2:
for (i=0; i <ComponentCount; i++)
{
if (dynamic_cast(Components))
dynamic_cast(Components)->Enabled = false;
}
Data->tbDetail->Cancel();
break;
case 3:
for (i=0; i <ComponentCount; i++)
{
if (dynamic_cast(Components))
dynamic_cast(Components)->Text = "";
}
default:
break;
}
}

向Query传递参数
// 直接从表向Query传递参数的一种方法
TQuery *Query = new TQuery(this);
Query->DatabaseName = "dbServer";
Query->SQL->Clear();
Query->SQL->Add("DELETE FROM 'Events.DB' WHERE (TicketNo = " + Data->tbProblem->FieldByName("TicketNo")->AsString + ")" );
Query->ExecSQL();
Query->Close();
delete Query;

日期属性
TMaskEdit *meOpen;
TLabel *lbCount1;
TDateTime Date2;
void __fastcall TfmMainForm::CountOpen(TObject *Sender)
{
switch(dynamic_cast<TComponent&>(*Sender).Tag)
{
case 1:
count1 = StrToInt(lbCount1->Caption);
count1 += 1;
Date2 = Now() + count1;
meOpen->Text = Date2.DateString();
lbCount1->Caption = IntToStr(count1);
break;
case 2:
count1 = StrToInt(lbCount1->Caption);
count1 -= 1;
Date2 = Now() + count1;
meOpen->Text = Date2.DateString();
lbCount1->Caption = IntToStr(count1);
break;
}
}

绘制状态条
void __fastcall TForm1::StatusBar1DrawPanel(TStatusBar *StatusBar, TStatusPanel *Panel, const TRect &Rect)
{
TCanvas& c = *StatusBar->Canvas;
switch (Panel->Index)
{
case 0 :
{
StatusBar1->Panels->Items[0]->Text = "Hello C++";
c.Brush->Style = bsClear;
TRect temp = Rect;
temp.Top += 1;
temp.Left += 1;
c.Font->Color = clWhite;
DrawText(c.Handle,Panel->Text.c_str(),-1,(RECT*)&temp,DT_SINGLELINE|DT_CENTER);
c.Font->Color = clBlack;
DrawText(c.Handle,Panel->Text.c_str(),-1,(RECT*)&Rect,DT_SINGLELINE|DT_CENTER);
break;
}
case 1:
{
c.Brush->Color = clYellow;
c.FillRect(Rect);
c.Font->Color = clRed;
DrawText(c.Handle,"clYellow Color", -1, (RECT*)&Rect, DT_SINGLELINE | DT_CENTER);
break;
}
case 2:
{
Graphics::TBitmap* bm = new Graphics::TBitmap;
bm->Handle = LoadBitmap(NULL, MAKEINTRESOURCE(32760));
c.Draw(Rect.Left, Rect.Top, bm);
delete bm;
break;
}
}
}



上一篇:C++Builder的多线程编程中一些体会   下一篇:C++Builder 编程指南2


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·C++Builder的多线程编程中一些体会
·C++Builder 编程指南2
·C++Builder 编程指南1
·C++Builder与Matlab混合编程的实现
·C++Builder制作闹钟
·C++Builder IDE使用技巧
·C++Builder中的复活节彩蛋
·C++ Builder开发经验几则
·C++Builder中动态库的链接问题
·C++ Builder编写文本编辑器
·C++中union的应用剖析
·C++ Builder:全新的RAD工具
·C++ Builder 下编译含有 MFC 的程式
·CB vs Delphi
·BCB中Corba Name Service使用方法
·CB生成的程序需要哪些文件
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·用Eclipse平台进行C/C 开发
·在 Linux 中使用共享对象
·VS:针对Java开发人员的C#编程语言
·使用智能设备扩展在C#中开发自定义控件
·Visual C# 常见问题
·二级C语言实例解答
·一种被忽视的构造和整数溢出重现
·轻轻松松C to C
·与用于 C 的ISO标准保持一致
·用C 的托管扩展针对Windows编程
·运行时和编译时的安全性检查
·轻轻松松C to C (二)
  阅读排行
·c/c++ 学习-read 函数和 write 函数
·程序员眼中的qmail(qmail源代码分析)
·Awk 基础入门:Awk 实例编程
·autoconf 和automake生成Makefile文件
·Linux下的多进程编程
·入门文章:教你学会编写Linux设备驱动
·使用 GDB 调试多进程程序
·C++自动化(模板元)编程基础与应用
·Qt 不规则窗体的实现
·嵌入式程序员应知道的几个基本问题
·Linux操作系统中GCC的应用介绍
·C语言中的指针和内存泄漏
·用GNU profiler提高代码运行速度
·vi 中的正则表达式 (Regular Expressio
·Linux 套接字编程中的 5 个隐患
网摘收藏: