| 而发生相应的变化,因此OnTimer事件中的处理也要相应的改动,主要是显示窗体的时候要注意对窗体Top和Height属性的设置必须跟随与系统工具栏的位置和高度相协调,代码如下: …… if akLeft in FAnchors then begin Left := -Width + cOffset; SetBarHeight; Top := Cur_Top; Height := Cur_Bottom; end; if akRight in FAnchors then begin Left := Screen.Width - cOffset; SetBarHeight; Top := Cur_Top; Height := Cur_Bottom; end; …… 最后,为了保证窗体在屏幕两边隐藏后高度保持不变,我们再添加一个WMSizing过程对WM_Sizing消息进行拦截处理。WMSizing过程的代码如下: procedure TForm1.WMSizing(var Msg: TMessage); begin inherited; if (akRight in FAnchors) then begin with PRect(Msg.LParam)^ do begin Left := Screen.Width - Width; Top := Cur_Top; Right := Screen.Width; Bottom := Cur_Bottom end; end else if (akLeft in FAnchors) then begin with PRect(Msg.LParam)^ do begin Left := 0; Top := Cur_Top; Right := Width; Bottom := Cur_Bottom; end; end; end; WM_Sizing消息的语法结构与WM_MOVING消息相似,也包含了一个对矩形的指针。通过该指针我们可以对矩形的Top、Left、Right和Bottom参数进行设置,从而保证矩形高度不受用户操作影响。 至此,一个窗体自动隐藏的程序就基本完成了,其实际效果已经和QQ相当接近了。当然,从实际运行效果看还存在着一些小瑕疵,并且代码中并没有对窗体在隐藏后的宽度设置上进行处理,或者大家可以考虑继续进行完善此程序。
上一页 [1] [2] [3] [4] |