C++Builder常用代码片断

    技术2022-05-11  131

    C++Builder代码片断

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

    删除别名中所有的表纯虚函数虚函数启动页面指针
    为指针解除引用表的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; }  BACK 纯虚函数 //纯虚函数只在基类中出现,而在子类中必须有 //与其匹配的成员函数。程序中申明的子类的实例 file://必须为基类中的每一个纯虚函数提供一个重载的成员函数。 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 = ≻    bc->Display(); // "From Second Derived"  }  BACK 虚函数 //虚函数作为其他类的父类的成员函数。 //如果继承子类成员函数中存在与父类成员函数完全相同的函数, //子类中的成员函数永远有效。 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();  BACK 启动页面 USEDATAMODULE("Datamod.cpp", DataModule); USEFORM("about.cpp", AboutBox); USEFORM("main.cpp", MainForm); USEFORM("splash.cpp", SplashForm); file://---------------------------------------------------------------------------  #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; } BACK 指针 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  BACK 为指针解除引用 int x = 32; int* ptr = &x;  //解除指针的引用 file://以获得内存位置的内容 int y = *ptr; // y = 32  BACK 表的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);  };  }  BACK 变量与常量的声明 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'  BACK 检查表是否存在 #include "io.h"  if (access(Table1->TableName.c_str(),0)) file://检查表是否存在  { // 若不存在就创建 ...   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;  BACK 组件的类名 //找出丢失的组件类名 for(int i=0; i < ComponentCount; i++)  {  if(String(dynamic_cast<TComponent&>(*Components[i]).Name) == "")     ShowMessage(Components[i]->ClassName());  } }  BACK 剪贴板中的文字 #include "memory.h" // 包含 auto_ptr<>  #include "clipbrd.hpp" file://包含 TClipboard & Clipboard() // 范例程序,包含了一个memo控件  __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { file://创建 TStringList对象  auto_ptr ClipText(new TStringList); file://得到剪贴板中的文字的拷贝  ClipText->Text = Clipboard()->AsText; file://然后加工一下...  Memo1->Lines->AddStrings(ClipText.get());  }  BACK 字符流 //范例一 #include "sstream"  const char *name = "cker"; const char *email = "cker@sina.com"; // 生成 "cker"[SMTP:cker@sina.com]    ostringstream ost; ost << "/"" << name << "/"[SMTP:" << email << "]"; Edit1->Text = ost.str().c_str();   file://范例二 void TDataModuleEmployee::FullReport(const char *title) { Report.header(title); Report << sformat( "Employee #-: %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(); }  BACK 检查表是否已打开 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();    }   }  } }  BACK 表的状态操作 //关闭已打开的表并将他们恢复成初始状态。 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(...) {}; file://异常应该只来自于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) file://若希望的话,这样允许用户重试!       {        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 (...) {}; file://异常应该只来自于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; }  BACK 改变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 = "";       }       break;   } }  BACK 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;  BACK 日期属性 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;   } }  BACK 绘制状态条 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;      }   } }  BACK


    最新回复(0)