D
DoubleWood
Unregistered / Unconfirmed
GUEST, unregistred user!
装了Delphi 7,
想到原来碰到的一个问题,就是设定Constraints从上面和左边后改变窗体大小时居然
可以移动窗体。虽然我知道怎么解决,但是我很想知道borland是不是特意做成这种效
果的呢,delphi 7里是否有所不同呢?
于是打开delphi 7的Forms.pas,看到以下的代码:
procedure TCustomForm.WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo);
begin
if not (csReading in ComponentState) and FSizeChanging then
with Message.MinMaxInfo^, Constraintsdo
begin
with ptMinTrackSizedo
begin
if MinWidth > 0 then
X := MinWidth;
if MinHeight > 0 then
Y := MinHeight;
end;
with ptMaxTrackSizedo
begin
if MaxWidth > 0 then
X := MaxWidth;
if MaxHeight > 0 then
Y := MaxHeight;
end;
ConstrainedResize(ptMinTrackSize.X, ptMinTrackSize.Y, ptMaxTrackSize.X,
ptMaxTrackSize.Y);
end;
inherited;
end;
很好,和Delphi5里的一模一样,这也没什么问题。
那么问题在哪里呢?让我们来看这一句:
if not (csReading in ComponentState) and FSizeChanging then
FSizeChanging,很好,让我们找找这个东西是做什么的……
结果是:
在Delphi7中,除了这一个地方外,再没有任何地方用到这个FSizeChanging
了。在Delphi 5的代码中,我们可以看到在WMWindowPosChanging中改变了这个
值,这还说的过去,毕竟作为一个标志,有地方改变它,判断才有了意义。
然而在Delphi 7中,没有任何地方改变它,也就是说,这个FSizeChanging是
没有意义的……
等等,让我们再看一下:
if not (csReading in ComponentState) and FSizeChanging then
很好,boolean类型的初始值是false,那么这个判断永远是False,底下的代码
永远也不会执行。那么borland为什么要写那么一个过程呢?borland的程序员在
做什么呢?怎么会允许这样的垃圾代码存在呢?
我感到很伤心……这还是我心目中那个伟大的Borland吗?……
想到原来碰到的一个问题,就是设定Constraints从上面和左边后改变窗体大小时居然
可以移动窗体。虽然我知道怎么解决,但是我很想知道borland是不是特意做成这种效
果的呢,delphi 7里是否有所不同呢?
于是打开delphi 7的Forms.pas,看到以下的代码:
procedure TCustomForm.WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo);
begin
if not (csReading in ComponentState) and FSizeChanging then
with Message.MinMaxInfo^, Constraintsdo
begin
with ptMinTrackSizedo
begin
if MinWidth > 0 then
X := MinWidth;
if MinHeight > 0 then
Y := MinHeight;
end;
with ptMaxTrackSizedo
begin
if MaxWidth > 0 then
X := MaxWidth;
if MaxHeight > 0 then
Y := MaxHeight;
end;
ConstrainedResize(ptMinTrackSize.X, ptMinTrackSize.Y, ptMaxTrackSize.X,
ptMaxTrackSize.Y);
end;
inherited;
end;
很好,和Delphi5里的一模一样,这也没什么问题。
那么问题在哪里呢?让我们来看这一句:
if not (csReading in ComponentState) and FSizeChanging then
FSizeChanging,很好,让我们找找这个东西是做什么的……
结果是:
在Delphi7中,除了这一个地方外,再没有任何地方用到这个FSizeChanging
了。在Delphi 5的代码中,我们可以看到在WMWindowPosChanging中改变了这个
值,这还说的过去,毕竟作为一个标志,有地方改变它,判断才有了意义。
然而在Delphi 7中,没有任何地方改变它,也就是说,这个FSizeChanging是
没有意义的……
等等,让我们再看一下:
if not (csReading in ComponentState) and FSizeChanging then
很好,boolean类型的初始值是false,那么这个判断永远是False,底下的代码
永远也不会执行。那么borland为什么要写那么一个过程呢?borland的程序员在
做什么呢?怎么会允许这样的垃圾代码存在呢?
我感到很伤心……这还是我心目中那个伟大的Borland吗?……