bc使用技巧(转载)

一、ListView的运用。
1,使ListView支持排序功能
使用步骤:
a,添加ListView的OnColumnClick事件的处理函数(代码随后奉上)
b,添加ListView的OnCompare事件的处理函数(代码随后奉上)
c,为各列设置好合适的Tag属性即可。

//listview的Tag属性用于做为排序标志使用
//值为0时,表示listview未进行排序,否则其值为进行排序的列的地址,
//负值为降序,正值为升序
void __fastcall TfrmMain::ListViewColumnClick(TObject *Sender, TListColumn *Column)
{
        TListView* lpListView = dynamic_cast<TListView*>(Sender);
        if(!lpListView)
                return;
        int newTag = reinterpret_cast<int>(Column);
        if(abs(lpListView->Tag) == newTag)  //点击已用于排序的列,反序该列
                newTag = -lpListView->Tag;

        lpListView->Tag = newTag;        //表示对第Tag列进行排序
        lpListView->AlphaSort();

}

/
//列的Tag用于表示该列将按什么类型的数据进行排序:
//1,整型;2,字符串型;3,日期时间型;4,字符串长度;其它,无须排序。
void __fastcall TfrmMain::ListViewCompare(TObject *Sender,TListItem *Item1, TListItem *Item2, int Data, int &Compare)
{
       TListView* lpListView = dynamic_cast<TListView*>(Sender);
        if(!lpListView)
                return;
        try
        {
                assert(reinterpret_cast<int>(lpListView->Tag));
                TListColumn *Column = reinterpret_cast<TListColumn *>(abs(lpListView->Tag));
                AnsiString str1, str2;
                if(0 == Column->Index)
                {
                        str1 = Item1->Caption;
                        str2 = Item2->Caption;
                }
                else
                {
                        str1 = Item1->SubItems->Strings[Column->Index-1];
                        str2 = Item2->SubItems->Strings[Column->Index-1];
                }
                if(str1 == str2)
                {
                        Compare =  0;
                        return;
                }
                ///
                //在switch内部增加一些try...catch语句用以处理当相应项为空或为非法字符时,比较结果仍可接受。
                //如果你可以确保listview中以整型方式及日期方式比较的项不会为空项或格式非法,你就可以去掉以
                //try...catch语句以提高效率。
                switch(Column->Tag)      //对第一列进行排序
                {
                case 1: //该列化为整型变量进行排序
                        try{StrToInt(str1);}catch(...){Compare = -1; return;}
                        try{StrToInt(str2);}catch(...){Compare = 1; return;}
                        Compare = CompareValue(StrToInt(str1),StrToInt(str2));
                        break;
                case 2: //该列以字符串方式排序
                        Compare = CompareText(str1, str2);
                        break;
                case 3: //该列以日期时间型进行排序
                        try{TDateTime(str1);}catch(...){Compare = -1; return;}
                        try{TDateTime(str2);}catch(...){Compare = 1; return;}
                        Compare = CompareDateTime(TDateTime(str1), TDateTime(str2));
                        break;
                case 4: //该列以字符串长度进行排序
                        Compare = CompareValue(str1.Length(),str2.Length());
                        break;
                default: //该列无须排序
                        Compare = 0;
                        break;
                }
                if(lvSecInfo->Tag < 0)     //已经是正序,现在反序
                        Compare = -Compare;
        }catch(...)
        {
                lpListView->Tag = 0;             //清除排序标志
                throw AnsiString("排序过程中出现异常");
        }

}

2,设置行高
为ListView设置SmallImages属性,对这个SmallImages属性的高、宽进行设置即可。

二、处理因用户输入非法数据(如:不匹配EditMask)而导致的异常
a,写一个异常处理器函数,如:
void __fastcall TfrmMain::MyException(TObject* Sender,Exception* E);
void __fastcall MyException(TObject* Sender,Exception* E)
{
 if(E是我要处理的异常类型)
 {
  //进行我的处理
  return;
 }

 Application->ShowException(E); //调用缺省的异常处理
}
b,设置我的异常处理函数为应用程序的异常处理函数
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
        Application->OnException = MyException;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值