本人通过过程的参数来生成变量(string和real),该如何写代码?
例如:参数Lx=X 生成XString和Xnu;
          Lx=G 生成GString和Gnu
          Lx=K 生成KString和Knu等变量并对其赋值

解决方案 »

  1.   

    将该过程放到InterFace部分也不能这样
    它只能生成局部变量过程结束后就释放
      

  2.   

    这样行不行????
    x,y设置成变体变量,
    在过程中处理: 将x 转化成string;x:=x+'string' 并赋初值为空;
                 将y 转化成sting;y:=y+'nm',将y转化成real 并赋初值为0;
      

  3.   

    这些变量是定义的全局变量。
    我的意思是在此过程中是通过Lx参数来决定对哪些变量赋值。
    例如:LX=G 那么就对以G开头的变量赋值。LX=K就对以K开头的变量赋值,以此类推。因为在这个过程中不需要对所有变量赋值,过程结束后已赋值的变量将保持不变。
      

  4.   

    delphi是一个编译型语言,你所提出的要求只能在VB,FOX等解释环境中实现。
    对于编译器而言,变量是一种占位符,他最终被转换成内存地址:[eax],[ebx],[$400]等。
    procedure genral(const var)
    var
      var+string:string;
    begin
    end;
    你觉的这样的代码可能吗?
    我建议你使用varaint变体变量,并利用其自身的v_type属性来控制其类型,只是这样的变量占的间有些大。
      

  5.   

    liangma(昆仑踏月):
    我对Delphi不很精通,你提的使用varaint变体变量本人不知如何使用。
      

  6.   

    var
      v :variant;
    begin
      v := '123';       //现在是字符串变量
      ShowMessage(v);
      v := 123;         //现在是integer型变量
      v := v + 123;    //可以直接相加
    end;
    variant变量就是这样使用的
      

  7.   

    我的目的不是对变量的类型进行变换,而是由形参的值对同类变量名进行赋值。
    本人的部份代码如下:
    procedure TfrmMenu1.DblClickCx(var Lx: String; BB: String; DGrd: TwwDBGrid);
    var
      DG1,DG2:String;
    begin
      if (DGrd.Fields[0].AsString='') or (DGrd.Fields[1].AsString='') then
      exit      //若DBGrid1中无数据则退出
      else
      begin
      DG1:=DGrd.Fields[0].AsString;
      DG2:=DGrd.Fields[1].AsString;
      //下面这段代码就是我提出的问题想达到的目的,也就是用更简单的代码完成相同功能
      if Lx='X' then
      begin     
      Xz8:=0;
      XNom:=0;
      Xjje:=0;
      end;
      if Lx='G' then
      begin
      Gx8:=0;
      GNom:=0;
      GJje:=0;
      end;
      if Lx= ...... end;
      

  8.   

    为什么 不用万能变量了 利用TYPEVAR()进行 判断了
      

  9.   

    我再次说一次,Delphi要求变量的声明全部都在函数开始的时候var关键字下面进行声明,而不像C/C++可以在程序任何地方进行变量声明,你要求的问题Delphi只能使用Variant来代替。
      

  10.   

    不一定 hehe^^ 有方法可以解决 看我的 哇哈哈哈我整理一下哦
      

  11.   

    procedure Test(Lx: String; Value1, Value2: Integer)
    var
      tempStr: String;
    begin
      tempStr := Lx+','+Value1+','+Value2;
      // 这个tempStr不就是你要的东东吗?
      // 不知道我这样理解对不对
      // hehe^^ 这个方法好不好??
    end;
      

  12.   

    procedure Test(Lx: String; Value1, Value2: Integer)
    var
      tempStr: String;
    begin
      tempStr := Lx+','+Value1+','+Value2;
      // 这个tempStr不就是你要的东东吗?
      // 不知道我这样理解对不对
      // hehe^^ 这个方法好不好??
    end;
      

  13.   

    定义结构,再运用指针,可达到您想要的目的
    T : record
      z8:.integer;
      Nom:integer;
      jje:integer;
    end;
    var
    x,g,k:t;
    p:^t;
    ...  if Lx='X' then
      begin
        p:=x; 
      end;
      if Lx='G' then
      begin
        p:=g;
      end;
      if Lx= ......  p.z8:=0;
      p.Nom:=0;
      p.jje:=0;
      

  14.   

    变通一下
    procedure TForm1.Button3Click(Sender: TObject);
    type
    tr=Record
       Name:string[2];//存储变量名
       value:^Integer;//存储变量值的指针
       end;
    var
    Gx,Gy,Fx,Fy,i:integer;//变量
    Temp:array[1..4] of Tr;//变量的信息(名,指针)
    FInput,FName:string;begin
          Finput:='G';//设传回来的值是'G'
          Temp[1].Name:='Gx';
          Temp[1].value:=@Gx;
          Temp[2].Name:='Gy';
          Temp[2].value:=@Gy;
          Temp[3].Name:='Fx';
          Temp[3].value:=@Fx;
          Temp[4].Name:='Fy';
          Temp[4].value:=@Fy;
          For i:=1 to 4 do
          begin  //依次检查变量名,如第一个字符等于传回的字符,则赋0或进行其他操作
          FName:=Temp[i].Name;
          if LeftStr(Fname,1)=FInput then
           Temp[i].value^:=0;
          end;
    end;
      

  15.   

    if Lx='X' then
      begin     
      Xz8:=0;
      XNom:=0;
      Xjje:=0;
      end;
      if Lx='G' then
      begin
      Gx8:=0;
      GNom:=0;
      GJje:=0;
      end;
      if Lx= ...... end;
    这段代码完全脱胎于解释型语言如Vfox,Vb,pascal程序编译完成后,象Gx8,Xz8这样的变量名称已被二进制地址值所代换。pascal是一个强类型检测语言,变更没有定义是不可能赋值的,你上面的代码能够运行的前提是Gx8、Xz8这些变量已经定义,你仅仅是通过一定的标志选择对不同的变量进行赋值。做为一种替换式的实现方式你可以用 yesxwl() 提供的方式,但改进一下
    PDynVar=^DynVar;
    DynVar=Record
      varName:string[8];
      varPointer:pointer;
    end;//定义结构,将名称和变动值的指针相关联procedure TForm1.Button1Click(Sender: TObject);
    var
      dynVars:TList;
      ptmp:PDynVar;
      str:string;
      lx:string;
    begin
      lx:='G';
      str:='这是一个测试串';
      dynVars:=TList.Create;
      if lx='G' then  begin
        new(ptmp);
        ptmp.varName:=lx+'08';
        ptmp.varPointer:=@str;
        dynVars.Add(ptmp);
      end
      else
        if lx='X' then begin
          new(ptmp);
          ptmp.varName:=lx+'08';
          ptmp.varPointer:=@str;
          dynVars.Add(ptmp);
        end;
        with PDynVar(dynVars[0])^ do
         ShowMessage(format('Var name:%s,value:%s',[varName,pchar(VarPointer^)]));
    end;使用TList类来管理动态生成的变量序列,可以减少维护的工作量,而简洁明快。
      

  16.   

    我在前面已经说过GZ8,GNum,GJJe,XZ8.......已经定义为全局变量,只是在这个过程中使用而已,它们被赋值后还要在其它过程和事件中使用。楼上的几位的代码我看不懂,只是觉得比我原来的代码还要复杂,可能当Lx的值很多时,有它的优势,当Lx值只有5个以内时就显不出优势来了。
      

  17.   


    怎么不好好看看我的,我的就是一个字符串啦 hehe^^