delphi语言转为bcb语言的注意事项

delphi 转 bcb 常用语法转换及注意事项


----------------------------
delphi不区分大小写,bcb区分大小写
----------------------------
interger  转int
string  转String
----------------------------
if then  转if ()
else  转else
----------------------------
case  of  转switch ()
1:  转case 1:
 转break;
end  
----------------------------
for i=1 to 2 do  转for(int i=1; i<=2; i++)
----------------------------
while do  转while()
----------------------------
result  转return(立即返回)
----------------------------
inc(i)  转i++
dec(i)  转i--
----------------------------
动态数组aa
setlength(aa,6)  转aa.length=6;

----------------------------
create  转new
free  转delete
button1 is Tbutton  转button1->ClassNameIs("TButton")
Tbutton(button1)  转(TButton*)(button1)
----------------------------


.  转->
:=  转=
=  转==
<>  转!=
not  转!
and  转&&  &(运算)  //在if,while等判断语句中,大部分的情况都是&&或||
or  转||  |(运算) //在赋值语句中,大部分都是&或者|,特别是int类型的
'  转"  字符串操作
----------------------------
delphi to bcb消息转换的处理
对于必须要继承父类消息的子类来说,因为bcb严格支持c++的私有成员的可见性,所以对于delphi中很容易实现的消息继承,
对于bcb来说变成了不可能,必须通过父类的保护对象wndproc来进行消息的继承,而不是通过消息映射。
比如对窗体大小的改变的消息处理
    BEGIN_MESSAGE_MAP
        VCL_MESSAGE_HANDLER(WM_WINDOWPOSCHANGED, TWMWindowPosMsg, WMWindowPosChanged)
    END_MESSAGE_MAP(Controls::TCustomControl)
因为无法继承父类的消息,所以对于运行中窗体大小的改变,将无法实现。解决的办法就是通过WndProc函数进行处理
class TBaseList : public Controls::TCustomControl
void __fastcall TBaseList::WndProc(Messages::TMessage &Message)
{
     TCustomControl::WndProc(Message);
     switch (Message.Msg)
     {
            case CM_DRAG:
                 doCMDrag(*(Controls::TCMDrag *)(&Message));  
            break;
            case WM_WINDOWPOSCHANGED:
                 doWindowPosChanged(Message);  
            break;
            case WM_LBUTTONDOWN:
                doWMLBUTTONDOWN(*(Messages::TWMMouse *)(&Message));
            break;
            case WM_KEYDOWN:
                doWMKeyDown(*(Messages::TWMKey *)(&Message));
            break;
            case CM_WANTSPECIALKEY:
                doCMWANTSPECIALKEY(*(Messages::TWMKey *)(&Message));
            break;
            case WM_KILLFOCUS:
                doWMKillFocus(*(Messages::TWMSetFocus *)(&Message));
            break;
            case CM_FONTCHANGED:
                doCMFontChanged(*(Messages::TMessage *)(&Message));
            break;
     }
}
void __fastcall TBaseList::doCMDrag(Controls::TCMDrag &Message)
void __fastcall TBaseList::doWMRBUTTONDOWN(Messages::TWMMouse &Message)

----------------------------


注意事项:
1,判断语句if (a=2)对应if (a==2),最常见错误if (a=2)
2,与或运算a:=b or 1对应a=b | 1,最常见错误a=b||1
3,bcb中case每条都要有对应的break;
4,result在delphi中并不返回,但是bcb,return就立刻返回了,注意return放置的位置
5,delphi中同一单元中定义的类可以互相访问其它类的私有成员,但是bcb很严格,不可以
6, delphi中的整除用div,bcb中/的左右两边如果是整数就代表整除了,delphi中的/代表浮点数运算而bcb中则要强制转换,比如4/12在delphi和bcb中是不同的结果
7, 区域赋值的问题要注意lpRect.BottomRight的赋值是points[1] = Point(lpRect.Right, TreeRect.Bottom); 而不是points[1] = Point(TreeRect.Bottom, lpRect.Right);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值