自定义过程和变量的问题 myShowHint1:PublishedmyShowHint4:全局myShowHint5: 好象不能在这里定义,implementation下面是实现部分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 myShowHint1:是公有的myShowHint2:只能是类成员才能访问。myShowHint3:是全局的myShowHint4:不能这样定义,是错误的。myShowHint5:属于过程级的,只能在过程级上访问。 type TMainForm1 = class(TMainForm) nPerson: TMenuItem; : : procedure myShowHint1(Sender: TObject); private procedure myShowHint2(Sender: TObject); //私有 但可以被 myShowHint4,myShowHint5引用 public procedure myShowHint3(Sender: TObject); //公有 end;var MainForm1: TMainForm1; procedure myShowHint4(Sender: TObject); //全局 implementation procedure myShowHint5(Sender: TObject); //局部 只能在次单元中用 : public 任何可以引用该类的地方都可以访问protect: 只有本类及其派生类可以访问private: 只有本类可以访问你的1和published是一个概念,published,想到于这个类提供给外界的接口 procedure myShowHint1(Sender: TObject); 是做什么用的。莫非与procedure myShowHint3(Sender: TObject); 一样吗????????? up,upup帮你我年后出走。。兄弟 TMainForm1 = class(TMainForm) nPerson: TMenuItem;<<类(这里为TMainForm1)的变量和过程均在此定义(TMainForm1默认模式为published) : : procedure myShowHint1(Sender: TObject);<<同上 private procedure myShowHint2(Sender: TObject);<<属于该类的私有变量或过程的定义位置(不允许引用者访问,友类除外) public procedure myShowHint3(Sender: TObject);<<属于该类的公共变量或过程的存放位置(允许引用者访问) end;var MainForm1: TMainForm1; procedure myShowHint4(Sender: TObject);<<在implementation要用到的变量在此定义,与以上不同的是这里定义的变量可<<来自于预定义的各个类<<另: 这里不能定义过程(似乎转义过程也不能这样定义)implementation procedure myShowHint5(Sender: TObject);<<interface部分定义的过程的实现 var MainForm1: TMainForm1; procedure myShowHint4(Sender: TObject);这可以定义吗?我试了不行 procedure myShowHint4(Sender: TObject);应该写在var 的前面 ;;var Form1: TForm1; procedure www(Sender: TObject);implementation{$R *.DFM}procedure www(Sender: TObject);begin showmessage(inttostr(TComponent(sender).tag));end;procedure TForm1.Button1Click(Sender: TObject);begin www(sender);end;*********************::var Form2: TForm2;implementationuses unit1;{$R *.DFM}procedure TForm2.BitBtn1Click(Sender: TObject);begin www(sender);end;大家可以试试我的代码,我已运行通过。所以我觉得procedure myShowHint4(Sender: TObject);是可以那样定义的;procedure myShowHint2(Sender: TObject)和procedure myShowHint3(Sender: TObject);是没有争议了,但procedure myShowHint1(Sender: TObject)和procedure myShowHint5(Sender: TObject);希望大家再说说,我也在试~~~~~~~ Unit Xxxxx;interface //对外部单元的接口部分uses //本单元使用到的其它单元名称 //注:Delphi中的use与C++中的include有所不同, //在编译当前单元文件时, //仅将((use包含的)单元的)interface部分添加到当前的编译单元, //而没有实际地立刻编译引用单元的implementation部分consttypevar //单元全局变量声明//此处为分界线--------------------------------------------implementation //内部实现部分usesconsttype var //单元全局隐含变量声明//etcinitialization //单元构造期后初始化finalization //单元销毁期前预销毁end; 单元包含interface和implementation两部分,其中Interface部分的为和外部单元交互的接口(包括常量、变量、类型、使用单元等),具体的实现代码和内部使用的常量、变量、类型、使用单元在implementation部分--实现部分,这是在除了类封装的又一层模式化的封装。相比起来,C++的单元(或称文件)封装就显得有点而逊色了。我个人有时侯甚至在用C编写程序的时候都部分套用该形式,直观、简洁(尽管C++的编译器对这样的形式毫无兴趣),当然C的形式,如.h文件等也有它的方便之处。//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> TUserClass=class(TCustomControl) //或Tobject或其它派生子类, //本例使用TcustomControl,派生类将自动拥有OnClick事件,是为了便于说明 //Delphi中TObject是所有类的始祖 procedure ExampleFunction(Sender:TObject); private //该关键字下的数据和对象方法在在本单元外不能被访问, //而C++更为严格,同一单元文件内不同的类亦不可互访,需要使用友元(friend) FXxxxx: TuserType; Procedure SetXxxxx(const Value: TuserType); protected //该关键字下的数据和对象方法只能被当前类和子类访问 public //可以被程序代码中的任意部分访问 //下面为构造函数与析构函数, //严格的说应该是构造器(constructor)与析构器(destructor),为什么? //因为这两个函数只应用与类而不是对象--它们不属于所设计的对象的具体功能 constructor Create(Aowner:TComponent);override; //override称为重载 destructor Destroy;override; published //该关键字作为缺省的关键字,是OOP封装机制的扩充 //譬如将上面的procedure ExampleFunction(Sender:TObject)写在此处效果相同 //而该关键字的具体作用是提供一种设计时的可见性, //声明的属性一般都是公共元素 property UserDefine:TuserType read FXxxxx write SetXxxxx;; //比如按照如上声明,在Delphi的Object Inspector中将会出现UserDefine属性, //又由于由TcustomControl派生,所以该类自动拥有OnClick方法; //而这时,下拉Object Inspector的下拉框将会有一个ExampleFunction供选择, //因为函数ExampleFunction也缺省的属于published部分的声明 end;var UserClass1: TuserClass; //该表达式表示对象(UserClass1)是类(TuserClass)的一个实例的指针(注意是“指针”); //通过指针指向对象是Delphi的对象引用模式 //初始时指针指向空(nil), //当使用构造器后(如UserClass1:=TuserClass.Create(self);)为对象分配内存空间, //该指针则指向实际对象的内存空间的入口处//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>摘自:http://www.csdn.net/oldexpert/TopicView.asp?id=129319&table=200101有兴趣可以瞥一眼! to enlightenment(阿明--进入准冬眠状态的超人) :你说的那个帖子我看了,真没想到还有这么精彩的讨论呀!!虽然我并不是直接问关于面向对象的问题,但多多少少还是有些联系的。最后up一次,让更多的人看到,晚上我就结帐:] myShowHint4和myShowHint3这两个过程,好象只要有别的单元引用这两个过程的单元,那么引用的单元就可以使用myShowHint4和myShowHint3这两个函数了!这该怎么解释呢? FastReport問題 几个小问题,在线等~~~~~ 如何在PAGECONTRL的标签页转换中进行处理? 我自己开发了一个控件谁有兴趣呀!!!!我可以给他Demo^_^ 高分求解........... 定制软件,有谁会做请联系 哪里有fastreport的中文帮助? 如何理解事件? 请问,数据库保存图片,图片太大,用Tblobfield的loadfromstream会报错 会自动释放吗? 请教一段改变屏幕分辨率的代码? 产生一个随机数怎么产生??? OBJECT PASCAL中用什么函数????
myShowHint2:只能是类成员才能访问。
myShowHint3:是全局的
myShowHint4:不能这样定义,是错误的。
myShowHint5:属于过程级的,只能在过程级上访问。
TMainForm1 = class(TMainForm)
nPerson: TMenuItem;
:
:
procedure myShowHint1(Sender: TObject);
private
procedure myShowHint2(Sender: TObject);
//私有 但可以被 myShowHint4,myShowHint5引用
public
procedure myShowHint3(Sender: TObject);
//公有
end;var
MainForm1: TMainForm1;
procedure myShowHint4(Sender: TObject);
//全局
implementation
procedure myShowHint5(Sender: TObject);
//局部 只能在次单元中用
:
protect: 只有本类及其派生类可以访问
private: 只有本类可以访问
你的1和published是一个概念,
published,想到于这个类提供给外界的接口
nPerson: TMenuItem;
<<类(这里为TMainForm1)的变量和过程均在此定义(TMainForm1默认模式为published)
:
:
procedure myShowHint1(Sender: TObject);
<<同上 private
procedure myShowHint2(Sender: TObject);
<<属于该类的私有变量或过程的定义位置(不允许引用者访问,友类除外) public
procedure myShowHint3(Sender: TObject);
<<属于该类的公共变量或过程的存放位置(允许引用者访问) end;var
MainForm1: TMainForm1;
procedure myShowHint4(Sender: TObject);
<<在implementation要用到的变量在此定义,与以上不同的是这里定义的变量可
<<来自于预定义的各个类
<<另: 这里不能定义过程(似乎转义过程也不能这样定义)implementation
procedure myShowHint5(Sender: TObject);
<<interface部分定义的过程的实现
MainForm1: TMainForm1;
procedure myShowHint4(Sender: TObject);
这可以定义吗?我试了不行
;
var
Form1: TForm1;
procedure www(Sender: TObject);
implementation{$R *.DFM}procedure www(Sender: TObject);
begin
showmessage(inttostr(TComponent(sender).tag));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
www(sender);
end;
*********************
:
:
var
Form2: TForm2;implementation
uses unit1;{$R *.DFM}procedure TForm2.BitBtn1Click(Sender: TObject);
begin
www(sender);
end;
大家可以试试我的代码,我已运行通过。
所以我觉得procedure myShowHint4(Sender: TObject);是可以那样定义的;
procedure myShowHint2(Sender: TObject)和procedure myShowHint3(Sender: TObject);
是没有争议了,但procedure myShowHint1(Sender: TObject)和
procedure myShowHint5(Sender: TObject);希望大家再说说,
我也在试~~~~~~~
Unit Xxxxx;interface //对外部单元的接口部分uses //本单元使用到的其它单元名称
//注:Delphi中的use与C++中的include有所不同,
//在编译当前单元文件时,
//仅将((use包含的)单元的)interface部分添加到当前的编译单元,
//而没有实际地立刻编译引用单元的implementation部分consttypevar //单元全局变量声明//此处为分界线--------------------------------------------
implementation //内部实现部分usesconsttype var //单元全局隐含变量声明//etcinitialization //单元构造期后初始化finalization //单元销毁期前预销毁end;
单元包含interface和implementation两部分,其中Interface部分的为和外部单元交互的接口(包括常量、变量、类型、使用单元等),具体的实现代码和内部使用的常量、变量、类型、使用单元在implementation部分--实现部分,这是在除了类封装的又一层模式化的封装。相比起来,C++的单元(或称文件)封装就显得有点而逊色了。我个人有时侯甚至在用C编写程序的时候都部分套用该形式,直观、简洁(尽管C++的编译器对这样的形式毫无兴趣),当然C的形式,如.h文件等也有它的方便之处。
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TUserClass=class(TCustomControl) //或Tobject或其它派生子类,
//本例使用TcustomControl,派生类将自动拥有OnClick事件,是为了便于说明
//Delphi中TObject是所有类的始祖
procedure ExampleFunction(Sender:TObject);
private
//该关键字下的数据和对象方法在在本单元外不能被访问,
//而C++更为严格,同一单元文件内不同的类亦不可互访,需要使用友元(friend)
FXxxxx: TuserType;
Procedure SetXxxxx(const Value: TuserType);
protected
//该关键字下的数据和对象方法只能被当前类和子类访问
public
//可以被程序代码中的任意部分访问
//下面为构造函数与析构函数,
//严格的说应该是构造器(constructor)与析构器(destructor),为什么?
//因为这两个函数只应用与类而不是对象--它们不属于所设计的对象的具体功能
constructor Create(Aowner:TComponent);override;
//override称为重载
destructor Destroy;override;
published
//该关键字作为缺省的关键字,是OOP封装机制的扩充
//譬如将上面的procedure ExampleFunction(Sender:TObject)写在此处效果相同
//而该关键字的具体作用是提供一种设计时的可见性,
//声明的属性一般都是公共元素
property UserDefine:TuserType read FXxxxx write SetXxxxx;;
//比如按照如上声明,在Delphi的Object Inspector中将会出现UserDefine属性,
//又由于由TcustomControl派生,所以该类自动拥有OnClick方法;
//而这时,下拉Object Inspector的下拉框将会有一个ExampleFunction供选择,
//因为函数ExampleFunction也缺省的属于published部分的声明
end;var
UserClass1: TuserClass;
//该表达式表示对象(UserClass1)是类(TuserClass)的一个实例的指针(注意是“指针”);
//通过指针指向对象是Delphi的对象引用模式
//初始时指针指向空(nil),
//当使用构造器后(如UserClass1:=TuserClass.Create(self);)为对象分配内存空间,
//该指针则指向实际对象的内存空间的入口处
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
摘自:http://www.csdn.net/oldexpert/TopicView.asp?id=129319&table=200101有兴趣可以瞥一眼!
你说的那个帖子我看了,真没想到还有这么精彩的讨论呀!!虽然我并不是直接问关于面向对象的问题,但多多少少还是有些联系的。最后up一次,让更多的人看到,晚上我就结帐:]