PRect = ^TRect;
  TRect = packed record
    case Integer of
      0: (Left, Top, Right, Bottom: Longint);
      1: (TopLeft, BottomRight: TPoint);
  end;
请问 case Integer of 中的 Integer在这里要如何理解?
packed record 中的packed是什么意思?

解决方案 »

  1.   

    你这个是从哪里摘抄下来的吧
    全部放上来看看啊!packed是对记录进行压缩
      

  2.   

    这就是一个完整的声明,,没有其它的代码了,,
    下面这个也是一样的:  TVarType = Word;
      PVarData = ^TVarData;
      TVarData = packed record
        VType: TVarType;
        case Integer of
          0: (Reserved1: Word;
              case Integer of
                0: (Reserved2, Reserved3: Word;
                    case Integer of
                      varSmallInt: (VSmallInt: SmallInt);
                      varInteger:  (VInteger: Integer);
                      varSingle:   (VSingle: Single);
                      varDouble:   (VDouble: Double);
                      varCurrency: (VCurrency: Currency);
                      varDate:     (VDate: TDateTime);
                      varOleStr:   (VOleStr: PWideChar);
                      varDispatch: (VDispatch: Pointer);
                      varError:    (VError: LongWord);
                      varBoolean:  (VBoolean: WordBool);
                      varUnknown:  (VUnknown: Pointer);
                      varShortInt: (VShortInt: ShortInt);
                      varByte:     (VByte: Byte);
                      varWord:     (VWord: Word);
                      varLongWord: (VLongWord: LongWord);
                      varInt64:    (VInt64: Int64);
                      varString:   (VString: Pointer);
                      varAny:      (VAny: Pointer);
                      varArray:    (VArray: PVarArray);
                      varByRef:    (VPointer: Pointer);
                   );
                1: (VLongs: array[0..2] of LongInt);
             );
          2: (VWords: array [0..6] of Word);
          3: (VBytes: array [0..13] of Byte);
      end;
      

  3.   

    上例中的varSmallInt等是经过定义了的
    Const
      varEmpty    = $0000; { vt_empty        0 }
      varNull     = $0001; { vt_null         1 }
      varSmallint = $0002; { vt_i2           2 }
      varInteger  = $0003; { vt_i4           3 }
      varSingle   = $0004; { vt_r4           4 }
      varDouble   = $0005; { vt_r8           5 }
      varCurrency = $0006; { vt_cy           6 }
      varDate     = $0007; { vt_date         7 }
      varOleStr   = $0008; { vt_bstr         8 }
      varDispatch = $0009; { vt_dispatch     9 }
      varError    = $000A; { vt_error       10 }
      varBoolean  = $000B; { vt_bool        11 }
      varVariant  = $000C; { vt_variant     12 }
      varUnknown  = $000D; { vt_unknown     13 }
    //varDecimal  = $000E; { vt_decimal     14 } {UNSUPPORTED as of v6.x code base}
    //varUndef0F  = $000F; { undefined      15 } {UNSUPPORTED per Microsoft}
      varShortInt = $0010; { vt_i1          16 }
      varByte     = $0011; { vt_ui1         17 }
      varWord     = $0012; { vt_ui2         18 }
      varLongWord = $0013; { vt_ui4         19 }
      varInt64    = $0014; { vt_i8          20 }
    //varWord64   = $0015; { vt_ui8         21 } {UNSUPPORTED as of v6.x code base}
    {  if adding new items, update Variants' varLast, BaseTypeMap and OpTypeMap }  varStrArg   = $0048; { vt_clsid       72 }
      varString   = $0100; { Pascal string 256 } {not OLE compatible }
      varAny      = $0101; { Corba any     257 } {not OLE compatible }
      

  4.   

    现在还有packed这个压缩关键字吗?我记得这个是Turbo Pascal的,好长时间都不用了。
      

  5.   

    packed  应该是对齐边界吧??????
    case Integer of 
    //CASE  OF 中可以是任何的有序类型。
      

  6.   

    变体记录,Case 0 和 Case 1中两个部分的字段数据长度都是一样的,使用 Packed 紧缩,是为了分配内存空间使用实际大小,而不用对齐到系统的边界(边界是指一个系统一次处理的最大字节,例如32位就是4个字节),不足一个整体处理字的数据也被存储到了一个整字中。
      

  7.   

    to clonecenter(复制中心)
       那你能说明白点中的Integer有什么作用吗,,我不太明白你上面说的话,初学者
      

  8.   

    没有实际用途,你写byte/char也可以
    不过要保证变体的个数小于integer/byte/char/...可以表示的数的个数
      

  9.   

    一种定义方式,同一时间只用一组CASE定义
      

  10.   

    恩  没有什么意思 的 
    你可以把他们当成是一个 union结构这个定义就是表示你可以用第一个结构体也 可以用弟二个