BCB部分功能实现

删除别名中所有的表、检查表是否存在、组件的类名、剪贴板中的文字、字符流、检查表是否已打开
表的状态操作、改变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;
}


检查表是否存在
#include "io.h"
if (access(Table1->TableName.c_str(),0)) //检查表是否存在
{ // 若不存在就创建 ...
  Table1->Active = false;
  Table1->TableType = ttParadox;
// 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=275&d=53h7o6
  Table1->FieldDefs->Clear();
  Table1->FieldDefs->Add("Myfield", ftString, 15, false);
  Table1->IndexDefs->Clear();
  Table1->CreateTable();
  Table1->Active = true;
}
else
  Table1->Active = true;


剪贴板中的文字
#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 = "cker@sina.com";
// 生成 "cker"[SMTP:cker@sina.com]
 
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;
}


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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值