delphi入门笔记

源码资源 : http://subsimple.com/delphi.asp
《从入门到精通》 文档中有备份
《从入门到精通》
一般应该重写free方法而不是destroy方法, D不提供垃圾回收机制,需要自己回收内存。
接口方法用静态方法绑定实现生成代码比虚方法实现要小。
except和finally不能同时使用。
子类隐藏父类虚方法不会起到滞后联编的效果,但是覆盖接口的方法却是可以并且是提倡的。
program pt;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
IT = interface
['{A2E180BC-7372-4894-9FB9-9AD286B700CF}']
procedure M1;
end;
type
TA = class(TInterfacedObject,IT)
public
procedure M1();
end;
procedure TA.M1();
begin
Writeln('Am');
end;
type
TB = class(TA,IT) //重新声明继承IT接口,如果不这样,不会起到滞后联编的效果
public
procedure M1();
end ;
procedure TB.M1() ;
begin
Writeln('Bm');
end;
var t:IT;
begin
t := TB.Create;
t.M1;
Readln;
end.

使用delphi7 lite集成了cnpack,但是代码提示快捷键无法修改(ctrl+space),其他快捷键可在

快捷键:
格式化:ctrl+shift+F
----------------------------------------------------------------------------------------构造函数
每个应用程序将分配给其运行的内存分为四个区域: 

代码区(Code area)
全局数据区(data area)
堆区(heap area)
栈区(stack area)

图2 程序内存空间
代码区:存储程序中程序代码,包括所有的函数代码
全局数据区:存储全局数据。
堆区:又叫“自由存储区”,存储动态数据(在Delphi中包括对象和字符串)。作用域为整个应用程序的整个生命周期直到调用了析构方法。
栈区:又叫“自动存储区”存储程序中的局部数据,在C 中,局部变量实际上是auto类型的变量。作用域为函数内部,函数调用完系统就立即回收栈空间。
在C 中,对象既可创建在堆(heap)上,也可以创建在栈(stack)中,还可以在全局数据中创建对象,故C 有全局对象、局部对象、静态对象和堆对象四种对象之说。而在Delphi中,所有的对象都是建立堆(heap)存储区上,所以Delphi构造函数不能自 动被调用,而必须由程序员自己调用(在设计器拖动组件,此时对象由Delphi创建)。下面的程序说明Delphi和C 中创建对象的区别:
在Delphi中:
Procedure CreateObject(var FooObjRef:TFooObject);
begin
FooObjRef:=TfooObject.create;
//由程序员调用,过程调用完之后,对象依然存在.不需要进行拷贝
FooObject.caption=’I am created in stack of CreateObject()’;
End;
在做popupmanager时
EnumWindows(@popwatcher.ProcessFun, LPARAM(self));//一定要这样写@popwatcher.ProcessFun,网上的都没搞清楚,而且这个函数不能是类的函数(静态和对象都不行),否则虽然会调用但是会抛内存访问错误。
另外LPARAM(self)和LPARAM(@self)都能work,偶不懂。尝试自己转指针,没有成功,直接在参数定义上与传入参数一致就可以了:function ProcessFun(hwnd: HWND; pw:TPopWatcher): boolean; stdcall; 

 

Vista提供的UAC机制,是Vista的新增功能之一。它的主要目的是防止对于操作系统本身的恶意修改。如果想对于Vista的系统设置进行改动,必须通过UAC的验证才能够进行。通过这样的手段,大大提供了系统的安全性。 

关于UAC的利弊,网络上的说法褒贬不一,在这里就不具体讨论了。

对于Delphi程序的影响,UAC主要在于以下几点:

1、由于UAC机制,Delphi对于系统的操作可能无声的失败,而同样的程序,在2000/X下面可能运行正常。譬如注册表的改动。。。

2、为了避免这样的情况,Delphi程序必须支持Vista UAC标注,也就是说,在UAC程序的图标下面显示盾牌标志。这样可以在需要系统更高权限的时候,提醒用户。

为了让程序显示UAC标志,现在看来Vista是通过读取程序的资源(Resource)里面的MANIFEST资源,来决定是否显示“UAC盾牌”。

为了支持Vista,Delphi程序必须在资源里面嵌入MANIFEST信息。

1、首先编辑一个文件,内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

保持为UAC.manifest,这里文件是随意的。特别注意红色的“requireAdministrator”,这个表示程序需要管理员(Administrator)才能正常运行。

2、然后编辑一个RC文件,名为uac.rc

1 24 UAC.manifest

其中:

1-代表资源编号

24-资源类型为RTMAINIFEST

UAC.manifest-前面的文件名称

3、用brcc32编译这个rc文件为res文件

brcc32 uac.rc -fouac.res

4、在程序里面加入

{$R uac.res}  //注意这一步,必须添加。不要以为{$R *.res}中的*是包含所有,它是指对应的意思,对你程序中包含的文件会包含其对应的.res,例如abc.pas会包含abc.res(如果有)

让Delphi编译的时候,把uac.res编译进exe文件

5、把文件放到vista里面运行,就会看程序图标下面显示UAC盾牌标志了。

 


Total views.

© 2013 - 2018. All rights reserved.

Powered by Hydejack v6.6.1