首先谢谢大家的帮助,各位我都会适当加分,如果分不足,我会增加管理分。 不好意思,原先没有说清楚,是我自已的失误,我想建立一个无标题FORM,把外框架隐藏掉,FORM1.BORDERSTYLE := BSNONE,后来我在UNIT里加了一段代码,让窗口可以移动, private procedure WmNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;procedure TForm1.WmNCHitTest(var Msg: TWMNCHitTest); begin DefaultHandler(Msg); if Msg.Result = HTCLIENT then Msg.Result := HTCAPTION;end; 但这样的一个结果,就是,窗口是可以移动了,但是FORM内的其它事件,比如FORM1.Image3Click等其它事件不能被触发,都被拦截,请问现在要怎么办。
你现在重载了消息处理函数;但在结束后没将句柄交给父类窗体处理; 所以;等于屏蔽了所有其他的消息处理; 解决方式: 在消息处理函数最后加上一句inherited; 就可以了; fx: procedure TForm1.WmNCHitTest(var Msg: TWMNCHitTest); begin DefaultHandler(Msg); //这句好像作用不大 if Msg.Result = HTCLIENT then Msg.Result := HTCAPTION; inherited; //加上这句 end;
sorry; 上述代码不对; 没经过测试;我回头再看看
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if (ssLeft in Shift) then begin ReleaseCapture; SendMessage(Form1.Handle,WM_SYSCOMMAND,SC_MOVE+1,0); end; end;上面这个测试通过;我会再试试看为什么第一个不行^_^
透明化窗体可以通过如下设置实现:
1:修改窗体Alphablend属性值为true
2:修改AlphaBlendValue属性值;0为完全透明;255为不透明
不好意思,原先没有说清楚,是我自已的失误,我想建立一个无标题FORM,把外框架隐藏掉,FORM1.BORDERSTYLE := BSNONE,后来我在UNIT里加了一段代码,让窗口可以移动,
private
procedure WmNCHitTest(var Msg: TWMNCHitTest);
message WM_NCHITTEST;procedure TForm1.WmNCHitTest(var Msg: TWMNCHitTest);
begin
DefaultHandler(Msg);
if Msg.Result = HTCLIENT then
Msg.Result := HTCAPTION;end;
但这样的一个结果,就是,窗口是可以移动了,但是FORM内的其它事件,比如FORM1.Image3Click等其它事件不能被触发,都被拦截,请问现在要怎么办。
所以;等于屏蔽了所有其他的消息处理;
解决方式: 在消息处理函数最后加上一句inherited; 就可以了;
fx:
procedure TForm1.WmNCHitTest(var Msg: TWMNCHitTest);
begin
DefaultHandler(Msg); //这句好像作用不大
if Msg.Result = HTCLIENT then
Msg.Result := HTCAPTION;
inherited; //加上这句
end;
上述代码不对;
没经过测试;我回头再看看
begin
if (ssLeft in Shift) then begin
ReleaseCapture;
SendMessage(Form1.Handle,WM_SYSCOMMAND,SC_MOVE+1,0);
end;
end;上面这个测试通过;我会再试试看为什么第一个不行^_^