在别的语言很容易解决的问题,为什么在Delphi找不到解决方法呢?郁闷!!!!!

eluanshi 2004-12-22 11:04:48
我欲实现类似于Foxprow里面的宏替换函数的功能,Delphi里面好象没这个函数啊?举例说明如下:
有一字符串'Code',我要将这个字符串的引号去掉使之成为一变量名:Code,该如何实现?
str:='Code';
Code=100

在Foxprow里的话,我只要用一个宏替换函数&str=100就可以了。郁闷...
...全文
184 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsp0010 2004-12-23
  • 打赏
  • 举报
回复
?UUP
eluanshi 2004-12-23
  • 打赏
  • 举报
回复
问题解决,谢谢各位!
  • 打赏
  • 举报
回复
看懂上面的代碼,還不行那我只得閃了!
  • 打赏
  • 举报
回复
支持 alphax(无之心) !!


>>>>>>>MyFormClass := FindClass(FormNameString);的返回值的类型和Application.CreateForm(MyFormClass,
你的這行代碼有問題!!!

procedure TForm1.BitBtn5Click(Sender: TObject);
var
MyForm:TForm;
FormClass:TFormClass;
begin
FormClass:=TFormClass(FindClass('TForm1'));
if FormClass<>nil then
MyForm:=FormClass.Create(nil);
try
MyForm.ShowModal;
finally
MyForm.Free;
end;
end;

initialization
RegisterClass(TForm1);

finalization
RegisterClass(TForm1);

qmj2003 2004-12-23
  • 打赏
  • 举报
回复
学习
alphax 2004-12-23
  • 打赏
  • 举报
回复
不会不行的,别人都用烂了,

我要走了,有时间再说吧,坛子里好多兄弟都懂的,给他们发短信吧
eluanshi 2004-12-23
  • 打赏
  • 举报
回复
谢谢“无”兄提供了很好的思路,但是目前还没有彻底解决。一个问题是MyFormClass := FindClass(FormNameString);的返回值的类型和Application.CreateForm(MyFormClass, MyForm);所需要的类型不一至。另一个问题是没办法将这个Form Show出来。即执行MyForm.Show语句是不行的,希望“无”兄能继续探讨这个问题。
micher_yan 2004-12-23
  • 打赏
  • 举报
回复
又学了一招,我以前也碰到过类似的问题,后来没办法只好预先用数组保存,感谢 alphax(无之心)
alphax 2004-12-23
  • 打赏
  • 举报
回复
你这个问题就更普遍了,delphi本身支持的,你看看Classes.pas,有一套函数用来解决这个问题的,

procedure RegisterClass(AClass: TPersistentClass);
procedure RegisterClasses(AClasses: array of TPersistentClass);
procedure UnRegisterClass(AClass: TPersistentClass);
procedure UnRegisterClasses(AClasses: array of TPersistentClass);
function FindClass(const ClassName: string): TPersistentClass;
function GetClass(const AClassName: string): TPersistentClass;

usage:
========

[when application initialize]

RegisterClass(TFrmInput);


[call]
var
MyForm: TForm;

MyFormClass := FindClass(FormNameString);
Application.CreateForm(MyFormClass, MyForm);


[when application finalize]
UnregisterClass(TFrmInput);
eluanshi 2004-12-23
  • 打赏
  • 举报
回复
谢谢“无”兄的高招,可还是不能解决我的问题。我遇上的问题是,知道Form的名字(为一字符串),要利用这个字符串名字来创建和运行这个Form。举例如下:

MyForm:='FrmInput';
MyFormClass:='TFrmInput';
Application.CreateForm(MyFormClass,MyForm) //这里不行啊
alphax 2004-12-23
  • 打赏
  • 举报
回复
忘了这叫什么东西了,好像是名称传递吧,只有动态编程语言才支持这样的东东,

不过可以简单地间接实现它,思路如下:

unit NamingVariable;

interface

type
TVar = class
public
Name: string;
Value: Variant;
end;

TVarNameSpace = class
private
fVarList: TStringList;
public
Name: string;
function IsDefine(const aVarName: string): Boolean;
function GetVar(const aVarName: string): TVar;
end;

TGlobalVarList = class
private
fNULLNameSpace: TVarNameSpace;
fNameSpaceList: TStringList;
public
function IsDefined(const aVarName: string; const aNameSpace: string = ''): Boolean;
function DefineVar(const aVarName: string; const aNameSpace: string = ''): TVar;
function GetVar(const aVarName: string; const aNameSpace: stirng = ''): TVar;
end;

var
GlobalVarList: TGlobalVarList;

function DefineVar(const aVarName: string): TVar;
function GetVar(const aVarName: string): TVar;

implementation

function DefineVar(const aVarName: string): TVar;
begin
Result := GlobalVarList.DefineVar(aVarName, '');
end;

function GetVar(const aVarName: string): TVar;
begin
Result := GlobalVarList.GetVar(aVarName, '');
end;

...

end.


usage:
===============
uses
NamingVariable;

......

Variable := DefineVar('Code');


....

GetVar('Code').Value := 100;
or
Variable.Value := 100;


hanhsh1 2004-12-22
  • 打赏
  • 举报
回复
Delphi 中所有要用的变量都要先定义。
Kevin_Lmx 2004-12-22
  • 打赏
  • 举报
回复
Delphi是编译型语言,没有宏替换功能。郁闷……
eluanshi 2004-12-22
  • 打赏
  • 举报
回复
就没有解决方法吗?郁闷ing........

16,747

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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