软件采用BusinessSkinForm皮肤后,如何才能禁止鼠标拖动标题栏移动窗体? ( 积分: 100 )

  • 主题发起人 主题发起人 Redbreast
  • 开始时间 开始时间
R

Redbreast

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,请不要说Align->alClient!
 
修改源码BusinessSkinForm.pas中一个函数即可:

function TbsBusinessSkinForm.NewDefNCHitTest;
const
Offset = 2;
var
CR: TRect;
begin
if (FWindowState = wsMaximized) or FRollUpState or not IsSizeAble or
(FWindowState = wsMinimized)
then
with FForm do
begin
CR := GetDefCaptionRect;
if PtInRect(CR, P)
then
Result := HTCAPTION
else
if PtInRect(Rect(3, GetDefCaptionHeight + 3, Width - 3, Height - 3), P)
then
Result := HTCLIENT
else
Result := HTNCACTIVE;
end
else
if (ActiveObject <> -1)
then
begin
Result := HTNCACTIVE;
end
else
with FForm do
if (P.X <= Offset) and (P.Y <= Offset)
then
Result := HTTOPLEFT
else
if (P.X >= Width - Offset) and (P.Y <= Offset)
then
Result := HTTOPRIGHT
else
if (P.X <= Offset) and (P.Y >= Height - Offset)
then
Result := HTBOTTOMLEFT
else
if (P.X >= Width - Offset) and (P.Y >= Height - Offset)
then
Result := HTBOTTOMRIGHT
else
if (P.X <= Offset)
then
Result := HTLEFT
else
if (P.Y <= Offset)
then
Result := HTTOP
else
if (P.X >= Width - Offset)
then
Result := HTRIGHT
else
if (P.Y >= Height - Offset)
then
Result := HTBOTTOM
else
begin
CR := GetDefCaptionRect;
if PtInRect(CR, P)
then
Result := {HTCAPTION}HTCLIENT //修改这里
else
if PtInRect(Rect(3, GetDefCaptionHeight + 3, Width - 3, Height - 3), P)
then
Result := HTCLIENT
else
Result := HTNCACTIVE;
end
end;

本人用BSF4.40版试验通过。
 
不加载皮肤的确是不能动了,但是一加载皮肤就又可以动了
 
我是这样写的!
procedure WMNCHitTest(var Msg: TMessage);message WM_NCHITTEST;



procedure WMNCHitTest(var Msg: TMessage);
begin
inherited;

if (htcaption = msg.result) then
msg.result:=htclient;
end;
 
呵呵,楼上的肯定不行了,但是谢谢你的回答。
对于我的程序只需要修改hbqckzj所说文件的第8777行为
then Result := {HTCAPTION}HTCLIENT
即可,但是对于不同的窗体设置,极有可能还需要屏蔽其他的地方,请参考本问题的兄弟注意。
 
后退
顶部