📄 00000011.htm
字号:
使用方式如下: <BR> // TreeView.H <BR> class TForm1 : public TForm <BR> { <BR> __published: // IDE-managed Components <BR> TTreeView *TreeView1; <BR> TListView *ListView1; <BR> TButton *Button1; <BR> TButton *Button2; <BR> void __fastcall Button1Click(TObject *Sender); <BR> void __fastcall Button2Click(TObject *Sender); <BR> public: // User declarations <BR> __fastcall TForm1(TComponent* Owner); <BR> }; <BR> int __stdcall TreeView1Sort( int lParam1, int lParam2, <BR> int lParamSort); <BR> (请注意: TreeView 参数是三个 int, 别的型态都不行喔!) <BR> int __stdcall ListView1Sort( LPARAM lParam1, LPARAM lParam2, <BR> LPARAM lParamSort); <BR> (请注意: ListView 参数是三个 LPARAM, 如您要设为 int <BR> 或 long 都可, 奇怪吧!) <BR> extern PACKAGE TForm1 *Form1; <BR> // ^^^^^^^ <BR> // 看到上面有个 PACKAGE 的保留字了吧! <BR> // TreeView.Cpp <BR> void __fastcall TForm1::Button1Click(TObject *Sender) <BR> { <BR> // 原为 TreeView1->CustomSort( (PFNTVCOMPARE)TreeView1Sort, 0); <BR> TreeView1->CustomSort((MYPFNTVCOMPARE)TreeView1Sort, 0); <BR> // ^^^^^^^^^^^^^^^^ 差别在这里 <BR> } <BR> int __stdcall TreeView1Sort( int lParam1, int lParam2, <BR> int lParamSort) <BR> { <BR> int nResult; <BR> TTreeNode *Node1=( TTreeNode *) lParam1; <BR> TTreeNode *Node2=( TTreeNode *) lParam2; <BR> if( memcmp( Node1->Text.c_str(), ".",1) ==0) <BR> { <BR> if( Node1->Text == "." ) <BR> nResult = -1; <BR> else if( Node2->Text == "." ) <BR> nResult = 1; <BR> else <BR> nResult = -1; <BR> } <BR> else if( memcmp( Node2->Text.c_str(), ".",1) ==0 ) <BR> nResult = 1; <BR> else <BR> nResult = lstrcmpi( Node1->Text.c_str(), Node2->Text.c_str()); <BR> return(nResult); <BR> } <BR> <BR> <BR> <BR>ListView->Customsort 的用法 (使用方式不变) <BR> <BR> <BR> void __fastcall TForm1::Button2Click(TObject *Sender) <BR> { <BR> ListView1->CustomSort( ListView1Sort, 0); <BR> } <BR> int __stdcall ListView1Sort( LPARAM lParam1, LPARAM lParam2, LPARAM <BR> lParamSort) <BR> { <BR> // 同 TreeView的做法 <BR> return nResult; <BR> } <BR> <BR> <BR> <BR>网路上有个 HETreeView 也是要同理修改 <BR>上述的解决方式不是很全, 我个人就有好几种突发现象 <BR>如有任何疑问请可 E-Mail 给我. <BR> <BR> 十二: <BR> 大家如在我在 ListView1Sort 的函数内 <BR> AnsiSting S1 = ListItem1->SubItems->Strings[0]; <BR> 这行设一个BreakPoint <BR> (就是在Edit Form时游标行按F5), Debug Mode执行到这行会暂停 <BR> 这时您把 ListItem1->SubItems->Strings[0] 加入 Watch List这观看变数的视窗 <BR> 哇! 竟然无法观看 Node1->Text 变数, <BR> 我还发现Bcb 3.0的Debug工具还不是普通的差 <BR> 我写个Sample好了 <BR> FunctionA() <BR> { <BR> char cBuf[100]; <BR> FunctionB(cBuf); <BR> } <BR> FunctionB(char *cFbBuf) <BR> { <BR> for(int i=0; i Run -> Inspect 她会记忆您上次打的,且可跨Class <BR> 我测不出上述原因为何, 如您可解决, 请一定要告诉我. 感谢您 <BR> 现已知道了, 她是承袭Delphi 3的方式, 没救了 <BR> 不过我个人认为这会增加程式开发者不少的时间. <BR> 我很讶异Borland竟会把开发工具走回头路, (Ps. 还是MS-VC的Debug工具比较强) <BR> 以後Debug程式有的累了 <BR> 十三: <BR> Bcb 3.0与Windows 98有另一个Bug,但使用者碰到机率满小的 <BR> 1. 在 TFrom 上加一个TEdit 元件 <BR> 2. 把 TEdit 的 ImeMode设为 imChinese <BR> 3. 把 TEdit 的 ImeName设为 新注音 <BR> 此时执行此程式, Bcb 程式会当掉 <BR> 如您Run Time 在用键盘改变为新注音就不会有问题了 <BR> 故现暂时不要用此方式写程式, 待宝兰修正此Bug後再行使用. <BR> 十四: <BR> Resource DLL Wizard 为开发多国语言的利器 <BR> 但为何使用时会当呢? <BR> 请检查 "我的电脑"->控制台->国别设定-> <BR> 如这时您显示的为英文字 "Chinese(Taiwan)" <BR> //咱们当然是Chinese(??) <BR> BCB 使用 File->New->Resource DLL Wizard 就会当的原因. <BR> 国别设定为英文通常是因您安装了MS英文版的软体,(如MS-VC, ForntPages...等等 ) <BR> Windwos 重新安装後就好了.(原则上不可再把国别设定变为英文了.) <BR> 十六: <BR> 这部份主要是讲 Project->Options <BR> 如您想要Debug VCL 的Pascal Source Code , 请选取 Linker-> Use debug <BR> libraries <BR> 另因 Packages -> Rutime packages 内定为使用Rutime packages, 但建议您不要 <BR>选取 原因在Run PC 二月及三月号有写 <BR> 我曾碰到一个Rutime packages 的错误,原因为何我也不知 <BR> 只要我在程式中某些From 中使用了 Samples 这组下的VCL Componment,程式就会当, <BR> 最後我在 MDI Main Windows中加入 #include "cspin.h"及#pragma link "cspin" , <BR>一切就好了. <BR> 奇怪的问题. <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -