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;這段代碼見於Messages單元裡面.其中的Case Integer of 意味著什麼,什麼情況下為0,什麼情況下為1
為什麼只有一個end,按常理應該有兩個end,一個End 對應於packed record,另外一個對應於case of請大家來回答,謝謝

解决方案 »

  1.   

    请看一下variant parts in records的帮助。
      

  2.   

    变体记录,代表WParam、LParam、Result和WParamLo、WParamHi、LParamLo、LParamHi、ResultLo、ResultHi共享相同的内存存储空间,有点类似C中的联合。具体0、1代表什么我也不清楚,哪位补充补充。
      

  3.   

    1,0是可以用其它的integer数值来代替的;
    case也可以随意给个变量;type
      MyRe = record
        FInt: integer;
        case I : integer of
          1: (A: integer);
          2: (B: Boolean);
        end;具体的用途,未用过呢
    :)
      

  4.   

    type
      TMyRe = record
        FInt: integer;
        case I : integer of
          1: (A: integer);
          2: (B: Boolean);
        end;var
      MyRe: TMyRe;
      Bo: Boolean;
    begin
      MyRe.A := 1;
      Bo := MyRe.B; //{true} when MyRe.A := 0; (B false)
      if Bo then Caption := '';
    end;
      

  5.   

    internetcsdn(2003-8-7 9:20:26) ( ) 信誉:100  2006-8-8 10:49:37  得分: 0  
     
     
       
    type
      TMyRe = record
        FInt: integer;
        case I : integer of
          1: (A: integer);
          2: (B: Boolean);
        end;var
      MyRe: TMyRe;
      Bo: Boolean;
    begin
      MyRe.A := 1;
      Bo := MyRe.B; //{true} when MyRe.A := 0; (B false)
      if Bo then Caption := '';
    end;-----------------------------------------
    人家都这样给例子了;
    你没有看到//{true} when MyRe.A := 0; (B false)吗?
     
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      m: TMessage;
    begin
      m.WParam:= 500;
      showmessage(inttostr(m.WParamLo));//WParam所在内存的低位
      showmessage(inttostr(m.WParamHi));//WParam所在内存的高位
      m.WParam:= 4294967295;
      showmessage(inttostr(m.WParamLo));//WParam所在内存的低位
      showmessage(inttostr(m.WParamHi));//WParam所在内存的高位
    end;能明白吗?
      

  7.   

    不明白,這個裡面的Case 條件是什麼意思?繼續
      

  8.   

    case 类型 of
    这种描述就是一种规定的语法结构,为了保证语法的一致性(是下一种描述的特例),本身没有什么意义。
    但是
    case 成员名:类型 of
    这种描述,成员确实占据存储空间,可以使用的。
      

  9.   

    明白了,其实我原来迷惑的地方是,是不是需要设置才能使用case其中的一种,现在发现了不用设置,就可以直接对属性赋值,但是对于case中的属性,给那个赋值,就要读取哪个属性的值,否则可能出错
    另外,如果case中使用的是一个变量,则可以使用这个变量,但是必须先对其赋值
      

  10.   

    可是在  TMessage = packed record  中  给WParam付值  WParamLo和WParamHi都是可用的,why?
      

  11.   

    是个声明的方法,为了方便,你也可以用别的方法达到同样的目的, 打个比方:
    type
      ta = record
        lo: word;
        hi: word;
      end;  a : ta;
      b : Cardinal;你可以用 b := Cardinal(a)把他强制转换成Carninal;同样,你可以用a := TA(b)把Cardinal强制转换为两个Word. 显然这比较麻烦, 那么就设计一个方案来省点事吧,于是
     TYPE ta= record
         case Integer of
          0: (
            lo: word;
            hi: word);
          1: (
            c: cardinal;
            );
     end;
    就应运而生了。