我在Delphi单元中设置全局变量时出现问题:
unit SomeUnit;
...
interface
...
var
variable1: String;
...
implementation
procedure TSomeForm.SetNewVersion(variable1: String);
begin
variable1 := variable1; //here is problem
end;
如果它具有与过程中的本地参数值相同的名称,如何为全局变量赋值?如果这是某种形式值,可以这样做:
TSomeForm.variable1 = variable1;
但问题是变量是单位中的全局变量吗?
SomeUnit.variable1 = variable1; // this dont work
答案 0 :(得分:8)
FWIW:以下是人们所期望的:
<script>
var text = 1;
$(' .login1').click(function(e){
$('.div2, .div3, .patientAccess').toggle("fast");
$('.loginform_hidden').toggleClass('loginform_visible ');
if(text == 1){
$(".div1").toggleClass("animateSlide col-xs-12");
$('.login1').html('Go Back');
$('.imageOne').toggleClass('animateSlideTop');
// If an event gets to the body
text = 0;
} else{
$(".div1").toggleClass("animateSlide");
$('.login1').html('Start Animation');
$('.imageOne').toggleClass('animateSlideTop');
// If an event gets to the body
text = 1;
}
});
$('.login2').click(function(){
$('.registrationform_hidden').toggleClass('registrationform_visible ');
$('.div1, .div3, .patientAccess').toggle("fast");
$('.imageOne').toggleClass('animateSlideTop');
if(text == 1){
$(".div2").toggleClass("animateSlide2");
$('.login2').html('Go Back');
text = 0;
} else{
$(".div2").toggleClass("animateSlide2");
$('.login2').html('Start Animation');
text = 1;
}
});
$('.div3').click(function(){
$('.imageOne').toggleClass('animateSlideTop');
$('.div1, .div2, .patientAccess').toggle("fast");
if(text == 1){
$(".div3").toggleClass("animateSlide3");
$('.div3').html('Go Back');
text = 0;
} else{
$(".div3").toggleClass("animateSlide3");
$('.div3').html('Start Animation');
text = 1;
}
});
</script>
为避免出现此类问题,您可以考虑在参数前加上'A',这是Delphi中的一种半标准。当你在它时,创建字符串参数var
SomeForm: TSomeForm;
variable1: string;
implementation
{$R *.dfm}
{ TSomeForm }
procedure TSomeForm.FormCreate(Sender: TObject);
begin
Assert(SomeUnit.variable1 = '');
SetNewVersion('1');
Assert(SomeUnit.variable1 = '1');
end;
procedure TSomeForm.SetNewVersion(variable1: string);
begin
SomeUnit.variable1 := variable1;
end;
:
const
答案 1 :(得分:7)
您可以通过以下任一方式解决问题:
Value
作为setter方法的参数。或者,SomeUnit.variable1
。 请注意,赋值运算符为:=
而不是=
。
我强烈建议您重新考虑设计。
变量真的应该是全局变量吗?如果它与您的setter隐含的表单实例相关联,则它不应该是表单类的私有成员变量。
如果变量确实在实例之间共享,则将变量设为私有类变量,将setter设为类方法。
如果你的Delphi没有类变量,那么将全局变量移动到实现部分。正如您的代码所代表的那样,设置器没有任何意义,因为您还在接口部分公开了支持变量。