我在研究vcl消息机制的时候碰到一个问题:
我看到delphi中TWMMouse是这样定义的
type
  TWMMouse = packedrecord //疑惑一
    Msg: Cardinal;
    Keys: Longint;
    case Integer of//疑惑二
      0: (
        XPos: Smallint;
        YPos: Smallint);//疑惑三
      1: (
        Pos: TSmallPoint;
        Result: Longint);
  end;
尤其是case语句在object pascal中可以这样写吗?怎么没end ?
还有packedrecord是什么意思?
请高手给我讲解一下,谢谢!

解决方案 »

  1.   

    packed record压缩纪录,节省内存空间
    比如
    type
      date=packed record
        day:1..31;
        month:1..12;
        year:1960..1999;
      end
    如果不压缩,需要三个存储单元来存储这个记录,假如整数占用16位,则上面需要48位空间,其实1..31只需要5个二进制位就可以了,所以可以节省空间。不知道我说的是否清楚?
      另外带with的record,称为变体纪录,case和record公用一个end;
      

  2.   

    不好意思忘了问了
    case integer of 
    中的integer 怎讲 ?