高手看过来….请教几个问题?
---------------------------------------------------------------------------------
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, A, AWidth, AHeight: Integer);
var
WindowPlacement: TWindowPlacement;
begin
if (ALeft <> FLeft) then
begin
if HandleAllocated then
SetWindowPos(FHandle, 0, ALeft, A, 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. 类中的Self永远表示当前实例。不是指Tfrm_itemtca,而是他的实例的指针,你调用的SetBounds是Tfrm_itemtca的方法
2.没有看懂你的意思
3.packed的record是为了和API的结构兼容,在编译期没有采取内存布局优化。
4.=只有一个意思。表示相等啦 :P。
你的a的是定义在type域内,所以TWindowPlacement = tagWINDOWPLACEMENT表示声明一个记录类型TWindowPlacement,内部组织跟tagWINDOWPLACEMENT一样的。也可以说跟tagWINDOWPLACEMENT加一个别名TWindowPlacement
你的b则是用来判断Form2与nil是否相等的。
课外话题?
设置 我感兴趣的论坛 -> 配置我感兴趣的论坛
up
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颗红星