各位大虾高手,愚人有个初级问题请教。Delphi中的消息类型TMessage是个变体记录:
  TMessage = packed record
    Msg: Cardinal;
    case Integer of
      0: (
        WParam: Longint;
        LParam: Longint;
        Result: Longint);
      1: (
        WParamLo: Word;
        WParamHi: Word;
        LParamLo: Word;
        LParamHi: Word;
        ResultLo: Word;
        ResultHi: Word);
  end;
其中Integer是个判断变量条件,可不知是从何而来,为什么要引用它,'Integer'是怎么定义的?其值在哪里赋予?求教......

解决方案 »

  1.   

    可是系统如何判断Integer的值?
      

  2.   

    Integer是数据类型,0和1是它的两个值,这个声明的意思是说内存中有一块区域存放了四个整型值,你可以用TRect.Left,TRect.Top...来访问,也可以用TRect.TopLeft来访问。用不到0和1这两个值的,他们仅仅为可读性而存在。
    也可以用:
    case Boolean of
    False:(...);
    True:(...);
      

  3.   

    0和1只是为了给变体字段分组,0部分的三个字段和1部分的六个字段共享一段内存。这段内存大小是4(Longint即Integer,占用4个字节)*3=12个字节。一个Word占用2个字节。我们知道一个32位整数在内存中是高字节在后,低字节在前,因此,WParamLo被对应到WParam的低16位,WParamHi被对应到WParam的高16位。依次类推。————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————