System.pas单元有这么一段定义
  PVarRec = ^TVarRec;
  TVarRec = record { do not pack this record; it is compiler-generated }
    case Byte of
      vtInteger:    (VInteger: Integer; VType: Byte);
      vtBoolean:    (VBoolean: Boolean);
      vtChar:       (VChar: Char);
      vtExtended:   (VExtended: PExtended);
      vtString:     (VString: PShortString);
      vtPointer:    (VPointer: Pointer);
      vtPChar:      (VPChar: PChar);
      vtObject:     (VObject: TObject);
      vtClass:      (VClass: TClass);
      vtWideChar:   (VWideChar: WideChar);
      vtPWideChar:  (VPWideChar: PWideChar);
      vtAnsiString: (VAnsiString: Pointer);
      vtCurrency:   (VCurrency: PCurrency);
      vtVariant:    (VVariant: PVariant);
      vtInterface:  (VInterface: Pointer);
      vtWideString: (VWideString: Pointer);
      vtInt64:      (VInt64: PInt64);
  end;其他还有什么case Integer of 0,1,2 这些都是什么意思?麻烦各位指点

解决方案 »

  1.   

    这其实就是一个CASE语句,根据变量不同的类型,定义不同的变量。
      

  2.   

    这里是VType的所有可能值,
    只是这里为什么是 case Byte 而不是 其他的基本类型?
    To yang946():
    你说的"变量不同的类型"是什么意思,变量是指 Byte 吗,可是 Byte 是基本类型啊.{ TVarRec.VType values }  vtInteger    = 0;
      vtBoolean    = 1;
      vtChar       = 2;
      vtExtended   = 3;
      vtString     = 4;
      vtPointer    = 5;
      vtPChar      = 6;
      vtObject     = 7;
      vtClass      = 8;
      vtWideChar   = 9;
      vtPWideChar  = 10;
      vtAnsiString = 11;
      vtCurrency   = 12;
      vtVariant    = 13;
      vtInterface  = 14;
      vtWideString = 15;
      vtInt64      = 16;
      

  3.   

    我以前也没有研究过此种类型,但根本我个人的推测是这样的,此段代码是定义一个记录类型的,在将‘数据’存入此记录时,根据CASE‘数据’,来定义此‘数据’的类型。byte是个一个常数类型,如数据为0的话,那么就定义了一个INTERGER类型,以此类推。纯属个人推测,请多指正。
      

  4.   

    和C里面的联合(union),fortran里的公用块(common)差不多。
      

  5.   

    我也知道,因为我就是在看  开发人员指南的时候看到这个才去看源代码的,也知道那是共享内存区,可是我问的是  这里的 Byte 究竟是什么东西 ,难道 Byte 还是关键字 8为无符号整数,然后当 Byte =0的时候
    TVarRec=record
      VInteger: Integer;
      VType: Byte
    end为1的时候
    TVarRec=record
      VBoolean: Boolean
    end
    为2 的时候
    TVarRec=record
      VChar: Char
    end
    ...
    ...
    ...
      

  6.   


    type
    TRect2D = record
       case Byte of
        0: (x1, y1, x2, y2: double); //把double改为integer??????/
        1: (p1, p2: Tpoint);
      end;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        ListBox1: TListBox;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      rr   : Trect2d;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      rr.x1 :=1.0;
      rr.x2 :=200.0;
      rr.y1:=11.0;
      rr.y2:=211.0;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
         listbox1.AddItem(floattostr(rr.x1),nil);
         listbox1.AddItem(floattostr(rr.x2),nil);
         listbox1.AddItem(floattostr(rr.y1),nil);
         listbox1.AddItem(floattostr(rr.y2),nil);
         listbox1.AddItem(inttostr(rr.p1.X),nil);
         listbox1.AddItem(inttostr(rr.p1.y),nil);
         listbox1.AddItem(inttostr(rr.p2.X),nil);
         listbox1.AddItem(inttostr(rr.p2.y),nil);
    end;