1.在function前加class是什么意思啊,就像TObject的ClassName方法,加class和不加class有什么区别啊?
2.用Type library 给一个COM对象添加方法,怎样添加函数啊,按那个添加方法按钮添加的都是procedure??
初学delphi,望高手指点.
2.用Type library 给一个COM对象添加方法,怎样添加函数啊,按那个添加方法按钮添加的都是procedure??
初学delphi,望高手指点.
解决方案 »
- 如何获取当前行或上一跳转代码行的相关信息
- 怎样判断MaskEdit中输入的格式是否正确??
- 各位大哥请问改为ADO连接数据库怎么写?
- 在线给分.........................................谁知道类似pagecontrol的第三方,并告知下载地址...................................
- 打印发票时,怎样让打印机打印完一张后,自动走纸到第二张,准备打印下一张,马上给分
- DELPHI控件数组
- 急:spcomm与TADOQuery
- 希望大家客观的讨论一下!! 客观 !!发言有分!!!
- 有关检查sql server的服务状态跟检查映射的硬盘空间的问题,急……
- 怎样知道是否连接到Internet?
- 快来人啊!简单的问题!强分(50)!!!!!
- 系统栏显示问题。。。
首先参数必须是指针型。
其次modifier必须为[out, retval]
to lxpbuaa
2. 就是直接去编辑DELPHI自动生成的*_TLB.pas文件是吗??
>>>首先参数必须是指针型。
我定义一个参数类型是VARIANT *
modifier为[out, retval]
他怎么生成的还是procedure啊.
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
C++的静态方法由静态变量啊,
可是delphi哪有静态变量这个东西啊
continue啊
所谓类的静态方法是不需要依赖类的实例
而且不能调用类中任何非静态方法delphi也有静态变量
如
const i:integer=0;
是啊,我就是这样做的,我点那个...按钮,就弹了个小窗框出来,然后勾上out, retval
最后按刷新,没有变化啊.
1。举个例子
O.ClassName, 表示是这个O对象的成员变量或方法或函数等
ClassName 实际有个隐含的Self 也就是 Self.Class指当前对象
2。选择一个接口, 选择New Method就是那个绿色的像飘带一样的按按
function ***: your_type
begin
end;
嗯,我对静态方法的理解是:在类里,静态方法就是用来改变静态变量的,而静态变量对于类的所有对象是全局的,调用类的静态方法就可以改变静态变量的值.const i:integer=0; 和 const i=0; 有什么区别啊??
不好意思有多了一个问题,呵呵
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
那类方法和一般的方法有什么区别啊,我为什么要把一个方法申明为类方法啊?
const i=0相当于define
i的值不能更改
先谢过了,刚才看了看帮助,说retval是函数的返回值,Parameters页的Return Type 是作什么用的啊?
在C++中,我们可以用static来声明一个属于类而不是类的某个具体实例的函数。许多人以为Object Pascal没有类似的功能,其实是有的,只要将函数声明为类方法(class procedure或者class function)就可以了。例如:TForm1=class(TForm)publicclass procedure T;end;implementationclass procedure TFomr1.T;beginend;你可以在项目文件中验证它是不是真的static:beginTForm1.T;Application.Initialzie;Application.CreateForm(TForm1,Form1);Application.Run;end;class procedure/class function在VCL中也是相当重要的一类特殊方法。TObject的ClassName,ClassNameIs,ClassPoint,ClassInfo这四个方法全都是class function。虽然你在实际的编程中99.99999999999%的时间都不会用到它们,不过这四个函数堪称构筑整个VCL的基石。 值得一提的是,与C++中的static member function不同,Object Pascal中的class method能够具有多态的性质。例如,ClassName是TObject的一个class method,但是你调用TForm.ClassName得到的就是'TForm',调用TButton.ClassName得到的就是'TButton',等等。静态方法能够做到多态,岂不是非常神奇?这一切都是通过RTTI才做到的。你可以想象,如果ClassName用一般的virtual method来声明的话,就必须在每个派生类中都必须重载它才能实现类名称的正确映射,那将是多么痛苦的一件事情。Class Reference是Object Pascal中不太为人所知晓的概念。它的语法很简单,比如,TClass=class of TObject;Class Reference有什么用呢?用一个小例子来说明。在Form上面放一个RadioGroup,其中包括Radio Button, Check Box, Button三项。代码如下:typeTForm1=class(TForm)...privateControlRef:TControlClass;Counter : integer;...end;implementationprocedure TForm1.FormCreate(Sender:TObject);beginCounter := 0;end;procedure TForm1.RadioGroup1Click(Sender:TObject);begincase RadioGroup1.ItemIndex of0: ControlRef:=TRadioButton;1: ControlRef:=TCheckBox;2: ControlRef:=TButton;end;end;procedure TForm1.FormMouseDown(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:integer);varControl : TControl;ControlName : string;beginif Button=mbLeft then beginControl := TControlRef.Create(Self);with Control do beginVisible := False;Parent := Self;Left := X;Top := Y;ControlName := Control.ClassName + IntToStr(Counter);Delete(ControlName,1,1);Name := ControlName;visible := True;end;end;end; Class Reference揭示了Object Pascal的一个令人惊讶的能力。在OO语言的一般概念中,Constructor不可能是virtual,我们调用TButton.Create建立的就是Button,TForm.Create建立的就是TForm,依此类推。但是,籍由Class Reference,VCL就拥有了virtual Construction的能力,在上面的代码中,通过单独的一个ControlRef.Create,我们建立起来的可以是任何TControl的派生对象。正是由于这种能力,Form Designer和Object Inspector才有办法操作各种各样不同类型的构件,而不管这些构件是Delphi内置的,还是我们从其他地方得到的,或者是我们自己编写的。Class Reference的概念在其他地方也被称作meta-class,是用来描述类信息的特殊类型。 实际上,真正的幕后英雄是RTTI,通过RTTI,不仅使得类拥有了virtual construction的功能,而且类中的class method也有了virtual的性质。例如,TObject中的ClassName方法声明为class function ClassName:string,按道理说static method是不可能做到多态的,但实际上,我们调用TButton.ClassName得到的就是TButton,调用TForm.ClassName得到的就是TForm,通过RTTI,不可能的事情变成了可能,而且而避免了在每个派生类都要重载ClassName的麻烦。 在MFC中,如果一个对象满足下列条件:1。它是从CObject派生的;2。它的声明中包含DECLARE_DYNAMIC,并且在某个地方实现了IMPLEMENT_DYNAMIC,那么它也可以通过GetRuntimeClass()->CreateObject来实现类似的功能。 所不同的是,MFC的实现方法是通过宏来在内存中建立起一个完整的CRuntimeClass表格,而Object Pascal中,由于单根继承的特性,所有对象天生就具备了这些功能。MFC的内存表格是通过程序员的声明而建立的,而Object Pascal中的RTTI表格是编译器自动生成的,彼此实现方法不同,但背后的思想是基本一致的。 通过RTTI,不仅对象可以动态生成,而且对象的属性也可以动态设置。下面这段代码不是来自《Mastering Delphi 6》,而是来自陈宽达先生的《Delphi深度历险》,它同样揭示了Object Pascal通过RTTI而具备的强大功能和灵活性:vari: integer;propInfo: PPropInfo;beginfor i:=0 to ComponentCount-1 do beginPropInfo := GetPropInfo(Components[i].ClassInfo,’Color’);if PropInfo<>nil thenSetOrProp(Components[i], PropInfo, clRed);end;end;
const i:integer=0;定义i以后,i也不能改变了吧,我刚试过
const i:integer=0;这样定义i以后,i也不能修改啊,怎么成了静态变量了?
先谢过了,这个例子功能是什么啊, 编译的时候告诉TControlRef没有申明
Control := ControlRef.Create(Self);
1.在什么情况下需要把函数申明Class function啊?
2.Parameters页的Return Type 是作什么用的啊?retval是函数的返回值吗?
允许const write的开关打开delphi6缺省没有打开
const
foo: Integer = 12;beginfoo := 14;end.在以往的Delphi版本中,有这么一个特性:常量不是真正的常量。使用编译宏$WRITEABLECONST OFF,则以上的代码中的Begin和End之间的Foo的赋值将引发一个编译错误。若要避免它,只需将Foo的声明改为 var。你可能有将常量用作一个可以初始化的局部变量的代码,比如:
procedure MyProc;
constsomedata: Integer = 12;beginInc(somedata, 3);end;你要做的是将局部常量移到过程的外部声明,使其成为一个全局的变量。然后代码变为:
var
somedata: Integer = 12;procedure MyProc;beginInc(somedata, 3);end;对于过度依赖于常量的代码(比如ActiveX 控件的包装器),可以通过在源文件中插入一个{$WRITEABLECONST ON}的编译命令来修正。这一特性,在RTL, VCL, CLX,和 DB 等核心的源代码中被禁止使用,但是在周边的单元比如ActiveX 控件的包装器中倒可以接受。总而言之,你应该意识到“可赋值的常量”这个说法的自相矛盾。Delphi的以往版本中的这一特性,只是为了与老的16位的编译器的兼容而保留,但现在对于Delphi的开发者来说已经毫无意义了。要养成好的编程习惯,尽量避免使用可赋值的常量。
问最后一个问题,上边几位有在深圳的吗?有时间的话一起吃顿饭,踢踢球.
我们好像是校友啊,buaa.
我是北航2000年毕业的,就读于机械工程及自动化学院(原7系)的飞行器制造专业,现在成都:》不过近期可能出差到深圳。—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
呵呵,大哥,我是3系的,自动控制系的,来深圳告诉我.我的mail: [email protected]