Delphi全局变量setter

时间:2015-07-29 07:56:26

标签: delphi variables global

我在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

2 个答案:

答案 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没有类变量,那么将全局变量移动到实现部分。正如您的代码所代表的那样,设置器没有任何意义,因为您还在接口部分公开了支持变量。