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

delphi的一些常用操作技巧,持续更新中。。。

2014-06-28 16:20 253 查看
1、设置控件堆叠显示的层次。

  右键send to back,右键bring to front。

2、窗体关闭时释放内存对象。

  对于动态生成的窗体,一旦不再使用,一定要手动释放资源,不然你会看到程序占有内存疯狂上涨,然后就被任务管理器干掉了~手动释放主要有两种方式,第一种是显示调用Form.Free这个方法。对于上面用的例子Form2来说:

Form2.Free;
Form2 := nil;


至于为什么要将变量Form2赋值为nil,是为了防止此后的代码通过Form2变量访问已经被释放的TForm2实例。
另一种方法是在窗体的OnClose事件中将变量Action设置为caFree。

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree; // TCloseAction = (caNone, caHide, caFree, caMinimize);
Form2 := nil;
end;


这两种方法没有什么本质区别,可以根据实际情况来使用,但是一定不要忘记在释放资源后将变量指向空,不然很容易出现非法访问的情况。实际上在TForm2的FormClose中写Form2 := nil 是无用的,应该写在创建Form2的单元中,因为这两个Form2变量是不同的,TForm2所在单元的Form2变量是一个私有变量,别人是访问不到的,别人可以访问到的,也就是可能触发非法访问的是在TForm2所在单元外的Form2变量(有点绕口令了,不知道大家看懂没有……)。

3、delphi编译提示 circular unit reference

解决方法: 在implementation后面uses ,不要在interface 后面 uses

interface 中的uses和implementation 的uses不同在于:
interface中uses的所有单元在编译该单元时必须已编译而implementation中uses的单元
没这个必要。所以你自己编写的程序中的单元引用都放在implementation中,如果你在
unit1中的interface中引用unit2,而在unit2中的interface中引用unit1,编译程序在编译
unit1时发现unit2还没有编译,就编译unit2,而unit2又引用unit1,编译程序就会报循环
引用的错误,而在implenentation中引用就没问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: