我该怎么作啊?

Bluekibo 2003-04-28 03:09:08
请帮我看看到底该怎么写那一句,
unit TestPorcMP;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,TypInfo;

type
TSetValue = Procedure (Value :String) of object; //@@@
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
FCP : String; //@@@
Procedure SetCP(Value:String); //@@@@
{ Private declarations }
Published
Property CP : String Read fCP write SetCP; //@@@
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

Procedure TForm1.SetCP(Value:String);
begin
Form1.FCP := Value; //@@@如果不这样写就会出错。。。
//FCP := value; //出错 ·1
//self.FCP := Value; //一样出错·2
end;

procedure TForm1.Button1Click(Sender: TObject);
var
vProp: PPropInfo;
SetValue : TSetValue;
begin
vProp := GetPropInfo(Self, 'CP');
@SetValue := vProp.SetProc;
Self.fCP := '';
SetValue('asd'); //如果是这样调用 , 前面的·1或者·2都会出错。
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
CP := 'asd'; //如果是这样调用, 前面的三种写法都不会出错,
end;

end.

请教高手,我该怎么写Button1的过程,才能使·1(FCP := Value/Self.FCP:=value)不出错?这里我只希望改Button1里的东西(或者SetValue : TSetValue;什么的),而这个就用:
Procedure TForm1.SetCP(Value:String);
begin
FCP := value;end;
end;
也就是改Button1的过程,使起能正常使用 这个。
...全文
87 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝色光芒 2003-04-29
  • 打赏
  • 举报
回复
把这段代码写成一个单独的过程
如:
Procedure SetOBJValue;
var
vProp: PPropInfo;
SetValue : TSetValue;
begin
vProp := GetPropInfo(Self, 'CP');
@SetValue := vProp.SetProc;
SetValue('asd'); //如果是这样调用 , 前面的·1或者·2都会出错。
end;
然后在Button1中调用,就OK了。
Bluekibo 2003-04-28
  • 打赏
  • 举报
回复
UP
俗人1979 2003-04-28
  • 打赏
  • 举报
回复
up
Bluekibo 2003-04-28
  • 打赏
  • 举报
回复
UP
tpmao 2003-04-28
  • 打赏
  • 举报
回复
UP!!!!!!!!!!!!!!!!!!!!!UP!!!!!!!!!!!!!!!!!!!!!UP!!!!!!!!!!!!!!!!!!!!!UP!!!!!!!!!!!!!!!!!!!!!
Bluekibo 2003-04-28
  • 打赏
  • 举报
回复
多谢yansea(思宏) ,
这个错误和读过程没有关系,
并且 Property CP 怎么会和 Procedure SetCP(Value:String); 没有关系啦,你仔细看看。
yansea 2003-04-28
  • 打赏
  • 举报
回复
你的 Property 和 Procedure SetCP(Value:String); 没有联系呀,那个property还是直接读写私有变量的。
可以这样写
private
{ Private declarations }
FCP : String;
Function ReadCP: string; //读出fcp
Procedure WriteCP(aCp : String);//写入fcp
public
{ Public declarations }
property CP : string read ReadCp write WriteCp;
end;
................
function TForm1.ReadCP: string;
begin
Result := FCP;
end;

procedure TForm1.WriteCP(aCp: String);
begin
FCP := acp;
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧