关于delphi Assigned
关于delphi Assigned
1.根据 Delphi 指令参考手册中
说明:
Assigned 函式在参数不为nil时传回True,表示指针已经指到某个内存地址,这个内存地址可能是一个对象地首地址,也可能在函数或过程中,声明一个指针变量,没有赋值为nil ,无乱的指向某处,这两个种情况,Assigned(指针变量)都不为nil , 函数放回True;
而参数为nil时则传回False。
Assigned 并不是一个真正的函数。
技巧:
用呼叫 Assigned 的方式来取代直接把参数拿来和nil比较,效率会更好。
2.这个问题要从内存方面来解释
当你建构一个物件 SomeComponet.Create(Owner);
系统会有一个指针指向这个对象
当你解构一个物件 SomeComponet.Free;
系统会将指针指到的东西杀掉,但是指标还是指在相同的位置
请注意计算机的资源是有限的,
所以可能下一步你的程序要跟系统要资源,
刚才的指针位置,就出现了其它的数据
If Assigned(SomeComponet) then SomeComponet := nil;
先检查这个对象有没有在其它地方被设成 nil,
然后再将它设成 nil 。
当我们无法预测使用者会如何操爆他的计算机,
程序员必须留意内存的管理。 小弟浅见...
3
function Assigned(var P): Boolean;
Description
Use Assigned to determine whether the pointer or procedure referenced by P is nil. P must be a variable reference of a pointer or procedural type. Assigned(P) corresponds to the test P<> nil for a pointer variable, and @P <> nil for a procedural variable.
Assigned returns False if P is nil, True otherwise.
检查指针指向的参考变量或过程是否为nil
每次我通常的处理方法都是:
if assigned(frm) then frm.close; 但是当下次调用时就会出错。为什么呢,直到咋天我才知道原因
frm.close;frm.free; 只是指定这块内存可以重写,并未释放为NIL 因此当下次调用时即使frm.free已经
执行过assigned(frm)仍为TRUE,再次释放 frm.Close 或者 frm.free 肯定会报错;应为frm.Close或frm.free 是释放 对象指针frm 指向的内存空间,在上次已经释放调了,但是 frm 本身并没有 初始化为 nil ,相反它还是指向被释放的内存地址;东西已经没有了,没有地东西去释放,不报错错才怪。
正确的处理方法:
if assigned(frm) then
begin
frm.close;
frm:=nil;
end;
或:
if assigned(frm) then
begin
frm
相关文档:
本文最早在编程论坛上发表,文章地址:http://programbbs.com/bbs/view12-21351-1.htm,相关文件可以在上述地址的页面中下载。转载时请注明出处。
一、前言
通配符就是指“*”和“?”两个字符,“*”表示当前位置可以没有或者有多个任意字符;“?”表示当前位置有一个任意字符。 ......
方法1:可写为函数,再调用
Application.CreateForm(TForm1, Form1);
Form1.ShowModal;
Form1.Free;
方法2:
Form1:= TForm1.Create(Application);
try
Form1.ShowModal;
finally
  ......
实际上这个名字叫[SDL & Delphi]也不成问题, 因为除了Delphi似乎也没有哪个流行的开发工具用的是Pascal语言。
SDL其实我也只学了不到两星期而已。刚开始我想试图用VC,因为这样资料最全,也很好找,但太久没用VC现在看C的代码有点困难(->这个算符是干吗的来着……)。其实作为一个专业不是计算机的人 ......
技术交流,DH讲解.
明天去坐火车,回家,今天就没有事做,本来在弄一个跨进程获取其他程序里面组件,如ListView,ListBox,Button等的信息,突然有个想法自己写个Timer,不用SetTimer函数,我们自己用个多线程也正好实现这个.反正前段时间多线程也弄得比较多,本来想单独讲讲的,现在就用个例子来说明吧.
写成一个控件:utTimer.pas
v ......
Delphi使用资源文件全攻略
在通常情况下使用delphi设计程序,都是将字符串、图像等资源直接使用delphi提供的vcl控件加到*.dfm中,这样做会合修改这些资源时带来不便,如果资源被多次引用,这些资源在程序启动时都被加载到内存中,非常耗费系统资源。因此,这就需要一种新的引用资源的文件:资源文件。资源 ......