好容易的!!!!!!!!(50分)

  • 主题发起人 主题发起人 linglingfa
  • 开始时间 开始时间
L

linglingfa

Unregistered / Unconfirmed
GUEST, unregistred user!
各位:
在delphi里有一段语句如何把它转成C++BUILDER中的语法???
1:delphi: TLineHandleArray = array[Low(THandlePosition)..High(THandlePosition)] of TLineHandle;fHandles: TLineHandleArray;
C++BUILDER呢????????

2:Low和High在C++BUILDER中是用什么替代的?

3:下面一段又如何转换呢?
procedure TLine.Assign(Source: TPersistent);
begin
fStartPoint:=TLine(Source).StartP;
fEndPoint:=TLine(Source).EndP;
fArrow:=TLine(Source).Arrow;
fArrowWidth:=TLine(Source).ArrowWidth;
fArrowLength:=TLine(Source).ArrowLength;
Canvas.Pen.Color:=TLine(Source).Canvas.Pen.Color;
Canvas.Pen.Width:=TLine(Source).Canvas.Pen.Width;
end;
 
1, 2. Low 和 high要根据变量不同而定的, THandlePosition是什么类型的?
C++中是不是可以这样写: TLineHandle fHandles[sizeof(THandlePosition)];

 
THandlePosition 是一个自定义类型TLineHandle
 
不好意思上面搞错了:
THandlePosition是一个自定义的枚举类型
 
顺便问一下:nil的使用
delphi中有一段:if (fLineHandles==nil) then
fLineHandles := TLineHandles.Create(this);
然后我在BCB中用如下来代替:
if (fLineHandles==nil)
fLineHandles = new TLineHandles(this);//这里要用new
结果报错:说没有定义nil,所以我想问:如何在bcb中判决一个对象有没有创建??
 
第一个问题可以这样来:typedef TLineHandle* TLineHandleArray[num];其中num应该是
THandlePosition的维数。
第三个问题则用:fStartPoint=dynamic_cast<TLine*>(Source)->StartP;即可
 
BTW:Iknow和dearchen对第一个问题的解答似乎不太正确。
其中,Iknow的sizeof(THandlePosition)通常等于sizeof(int),在32位系统中等于
4,如果你的THandlePosition定义的枚举常量不是4个,则会有问题。
dearchen的
typedef TLineHandle* TLineHandleArray[num];
得到的TLineHandleArray实际等效类型为TLineHandle**,与原来不同。但如果
TLineHandle是一个DELPHI的VCL类或PASCAL的动态类,则很多时候在C++中需要
用TLineHandle*代替TLineHandle。如果是这种情况,则dearchen的写法可用。
 
1,2: C++中数组下标总是从0开始,所以该语句没有等效的C++语句。
如果THandlePosition的最小值为0(如果你不给枚举常量赋初值,则缺省
从0开始),最大值设为hpMax(应该是你的枚举的最后一个变量),则可以这样写:

typedef TLineHandle TLineHandleArray[hpMax+1];
TLineHandleArray fHandle;

3: 直接用强制类型转换就可以了:
fStartPoint=((TLine*)Source)->StartP;

4: 如果如上面的typedef,则不要再判断fHandle是否为空,因为它是数组,不可能为空。
如果要完全符合DELPHI的习惯,则:

typedef TLineHandle *TLineHandleArray;
TLineHandleArray fHandle;

...

if(fHandle==NULL)
fHandle = new TLineHandle[hpMax];

 
接受答案了.
 
后退
顶部