您的位置:首页 > 编程语言 > Delphi

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

2006-02-09 10:20 169 查看
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: