高手看过来….请教几个问题?
---------------------------------------------------------------------------------
procedure Tfrm_itemtca.Resize(Sender: TObject);
begin
  with Owner as TForm do
    Self.SetBounds(0, 0, ClientWidth,
                      ClientHeight);
end;
---------------------------------------------------------------------------------
1. 此处的 Self 指的是 对象 Tfrm_itemtca? 
---------------------------------------------------------------------------------
Control.pas
procedure TWinControl.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
var
  WindowPlacement: TWindowPlacement;
begin
  if (ALeft <> FLeft) then
  begin
    if HandleAllocated then
      SetWindowPos(FHandle, 0, ALeft, ATop, AWidth, AHeight,
        SWP_NOZORDER + SWP_NOACTIVATE)
    else
    begin
     …
      begin
        GetWindowPlacement(FHandle, @WindowPlacement);
        WindowPlacement.rcNormalPosition := BoundsRect;
      end;
    end;
  end;
end;function GetWindowPlacement; external user32 name 'GetWindowPlacement';
--------------------------------------------------------------------------2.GetWindowPlacement(FHandle, @WindowPlacement); 
这里的’@WindowPlacement ‘?, 跟踪进去
 在windows 里发现如下,
function GetWindowPlacement; external user32 name 'GetWindowPlacement';
再也找不到…, 也不明白上面是什么意思?
---------------------------------------------------------------------------------
Windows.pas 
TWindowPlacement = tagWINDOWPLACEMENT;tagWINDOWPLACEMENT = packed record
    length: UINT;
    flags: UINT;
    showCmd: UINT;
    ptMinPosition: TPoint;
    ptMaxPosition: TPoint;
    rcNormalPosition: TRect;
-------------------------------------------------------------------------- 3. tagWINDOWPLACEMENT = packed record 这种定义怎样理解? 4. 关于 ‘ = ‘ 有几中意思? 如 
   a . TWindowPlacement  =  tagWINDOWPLACEMENT;
   b. if Form2 = nil then 
   ………

解决方案 »

  1.   

    课外话题? 想在CSDN里﹐在用自己帳號登錄后﹐右邊的窗口出現 在专家门诊---我的問題
     方便看到自己提過的問題﹐怎么設?
      

  2.   

    1. 类中的Self永远表示当前实例。不是指Tfrm_itemtca,而是他的实例的指针,你调用的SetBounds是Tfrm_itemtca的方法
    2.没有看懂你的意思
    3.packed的record是为了和API的结构兼容,在编译期没有采取内存布局优化。
    4.=只有一个意思。表示相等啦 :P。
       你的a的是定义在type域内,所以TWindowPlacement  =  tagWINDOWPLACEMENT表示声明一个记录类型TWindowPlacement,内部组织跟tagWINDOWPLACEMENT一样的。也可以说跟tagWINDOWPLACEMENT加一个别名TWindowPlacement
       你的b则是用来判断Form2与nil是否相等的。
      

  3.   

    课外话题:  想申请一ISP服务器代理商, 为企业提供一些 web, 网页, 邮箱等, 要去
      北京申请吗? 
      手续怎么办?
      总费用多少? 
      能否拉到客户?
      成功率多少?
      ........
      

  4.   

    to  lynew(死循环-开始)   up 啥?
      

  5.   

    To: Eastunfail(恶鱼杀手) 
    1. var
      frm_itemtca: Tfrm_itemtca;
      那指的是frm_itemtca 囖2. GetWindowPlacement(FHandle, @WindowPlacement); 
       这里的’@WindowPlacement ‘前面有个  ‘@’ 是什么意思? 3. 在windows.pas 里,有个函数如下:
       这是一个什么函数? 
       external user32 name是什么意思?
       function GetWindowPlacement; external user32 name 'GetWindowPlacement';4.‘packed的record是为了和API的结构兼容,在编译期没有采取内存布局优。’
       那packed 什么结构呢? 请举例说明(笨学生)
      

  6.   

    To Eastunfail(恶鱼杀手) 
     
      课外话题,  
      
      你的 红五角星 代表?
      

  7.   

    1.self很简单,在什么类中用他就是代表什么。self其实是类的成员函数的一个隐含参数
    2.@表示取指针。@WindowPlacement就是WindowPlacement的指针
    3. external user32 用在静态声明API的时候指定DLL文件名,name用来指定DLL导出的函数名。这里user32是一个常量,字符串类型,你可以在windows.pas文件中找到
    4.你可以作个试验:
     type a=record
          field1:byte;
          field2:integer;
      end;
      b=packed record
          field1:byte;
          field2:integer;
      end;
    在用sizeof来查看两个结构的大小就可以了。
    p.s. 红星用来粗略表示专家分的多少,5000-10000就是1颗红星