第二个是当窗体需要计算位置和尺寸时触发,消息中包含了窗口客户区的大小,我们用这个的目的主要是将客户区缩小三个象素,以便画组件时不会画到客户区。
procedure tcoolmemo.wmnccalcsize (var message: twmnccalcsize);
begin
inherited;
inflaterect(message.calcsize_params^.rgrc[0], -3, -3);
end;
而上面几个消息处理函数,cm_mouseenter和cm_mouseleave;将引起tcoolmemo的外观变化,wm_paint保存其外观不被擦去。所以要用到一个画组件的函数,即:
drawborder;
里面用到了几个api的gdi函数。我在代码中有详细的说明,加上自己看帮助,应该是可以看懂的。
另外,相比于memo,它的扩展了这样的功能:设置边距和获得光标的位置。这两个对应的性属为margin,position。他们都是public的,不可以在对象察看器中看到。
我们一个个来说
边距设置
property margin:byte read fmargin write setmargin default 0;
其中setmargin函数中发送了两个消息:
//该消息取得输入区的尺寸