bc使用技巧[txf日記]

一、ListView的運用。
1,使ListView支持排序功能
使用步驟:
a,添加ListView的OnColumnClick事件的處理函數(代碼隨後奉上)
b,添加ListView的OnCompare事件的處理函數(代碼隨後奉上)
c,爲各列設置好合適的Tag屬性即可。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//listview的Tag屬性用於做爲排序標誌使用
//值爲0時,表示listview未進行排序,否則其值爲進行排序的列的地址,
//負值爲降序,正值爲升序
void __fastcall TfrmMain::ListViewColumnClick(TObject *Sender, TListColumn *Column)
{
        TCustomListView* lpListView = dynamic_cast<TCustomListView*>(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)
{
       TCustomListView* lpListView = dynamic_cast<TCustomListView*>(Sender);
        if(!lpListView)
                return;
        try
        {
                assert(reinterpret_cast<TCustomListView*>(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(lpListView->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;
}

三、安裝控件的時候可能會出現的問題的解決辦法
1,安裝控件時出現以下編譯錯誤:
/*說明:本知識自接來自以下網頁http://tomore.com/topic.php?tid=1123,我只做了中文化,並適當做了精簡*/
[Pascal Fatal Error] : File not found: 'DesignIntf.dcu'
[Pascal Fatal Error] : File not found: 'DesignEditors.dcu'
解決方法:
a. 在安裝包時顯示的包管理器窗口的樹控件中選擇Requires結點,右擊後顯示的菜單中選ADD,在ADD窗口中輸入DesignIDE.bpi,按OK關閉窗口.
b. Project->Edit Option Source.
c. 在顯示的編輯窗口中,修改PFLAGS結點:添加-LU開關,值爲DesignIde,大概如下:
<PFLAGS value="-$YD -$W -$O- -v -JPHNE -M -LUDesignIde"/>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章