在ocx中用指针,会有问题吗?

blackdtj 2005-01-31 04:51:17
声明一个指向panel的指针,用来存储当前的panel对象,然后实现panel间的切换(通过panel.visble)
建一个全局变量
curpanel:^TPanel;

主要程序如下

procedure TActiveFormX.ActiveFormCreate(Sender: TObject);
begin
new(curpanel);
end;

procedure TActiveFormX.ActiveFormDestroy(Sender: TObject);
begin
dispose(curpanel);
end;



procedure TActiveFormX.showpanel(var panelx:TPanel);
var TempPanel:^TPanel;
begin
try
if CurPanel=nil then
begin
TempPanel:=@panelx;
CurPanel^ := TempPanel^;
curpanel^.Visible:=true;
end
else
begin
curpanel^.Visible:=false;
TempPanel:=@panelx;
CurPanel^:= TempPanel^;
curpanel^.Visible:=true;
end;
except
exit;
end;

end;




问题:在ocx使用时经常会出现panel无法正常切换的问题,不知道是什么问题,大家帮我看看程序是不是有bug,或着说在ocx下面这样做是不是有什么局限性?

...全文
78 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackdtj 2005-02-01
  • 打赏
  • 举报
回复
谢谢各位的帮忙,结贴
blackdtj 2005-02-01
  • 打赏
  • 举报
回复
明白了,delphi中的声明也相当于一个隐性的指针,
那各位大大能不能说说delphi中什么时候需要用到真正的指针,因为有了隐性的指针了呀
gemouzhi 2005-01-31
  • 打赏
  • 举报
回复
>>var
>> curpanel:TPanel; //这样定义,curpanel已经相当于指针了。。

是啊,你在这里声明指针就在给自己找麻烦。不用指针,直接curpanel:TPanel;就可以了


>>声明一个指向panel的指针,用来存储当前的panel对象,然后实现panel间的切换(通过panel.visble)

实现panel的切换不是判断指针是不是nil 而是判断panel的visible.
还有curpanel:TPanel;这个声明的curpanel就已经指向了堆上了内存.而你再生命指针等于栈上的元素指栈上的元素,呵呵,自己找麻烦.

halfdream 2005-01-31
  • 打赏
  • 举报
回复
应该是代码问题,
OCX同普通EXE是有些不同,但不会直接造成你那现象.
blackdtj 2005-01-31
  • 打赏
  • 举报
回复
我是从java刚转到delphi这边来的
刚接触到指针,确实有点头痛,
上面这个程序是我先学现写的,
在普通的app下没有问题,
可是在ocx下,偶尔会出现无法实现效果的情况,
想知道这是不是ocx中的问题,
望能指点一二
谢谢
halfdream 2005-01-31
  • 打赏
  • 举报
回复

var
curpanel:TPanel; //这样定义,curpanel已经相当于指针了。。

curpanel:^TPanel;//你这样定义是把curpanel定义成指针的指针....

干嘛不好好学学PASCAL语法?

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧