程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++ Builder常用代碼片斷

C++ Builder常用代碼片斷

編輯:關於C++

本文中包含了一些常用的代碼片斷,看看想想或許有他山之石可以攻玉的可能。

刪除別名中所有的表、純虛函數、虛函數、啟動頁面、指針、為指針解除引用、表的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[i]->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[i]).Name) == "")
  {
   ShowMessage(Components[i]->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%s\n", 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[i]))
   {
    if(((TTable*)Components[i])->State == dsEdit)
    {
     String s = "Table " + Components[i]->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[i])->Post();
     else
      ((TTable*)Components[i])->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[i])) != NULL)
    {
     active[i] = Table->Active;
     Table->Active = false;
    }
   }
   catch(...) {}; //異常應該只來自於dynamic cast...
  }
  for(i = 0; i < MyClass->ComponentCount; i++)
  {
   try
   {
    if((Table = dynamic_cast(MyClass->Components[i])) != 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[i])) != NULL)
     Table->Active = active[i];
   }
   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[i]))
      dynamic_cast(Components[i])->Enabled = false;
    }
    Data->tbDetail->Cancel();
    break;
   case 2:
    for (i=0; i < ComponentCount; i++)
    {
     if (dynamic_cast(Components[i]))
      dynamic_cast(Components[i])->Enabled = false;
    }
    Data->tbDetail->Cancel();
    break;
   case 3:
    for (i=0; i < ComponentCount; i++)
    {
     if (dynamic_cast(Components[i]))
      dynamic_cast(Components[i])->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;
   }
  }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved