有个控件,界面类的,具有这个功能,仿佛叫TflatButtom之类的,忘了
解决方案 »
- delphi如何实现批量设置label
- 如何实现如ERP软件中的一对多表单实现(DBGrid单元可动态取数据库数据进行选择)
- data1.ADOQYygxx问题,请大侠指点。
- 问一个超难的问题!高手请进,保存桌面图标位置并恢复。
- 早上好,我的问题又来了,只剩十分,祝分十分健康
- ◆◆如何知道某一天是一个月的第几个星期◆◆
- 如何从win98+sql7的数据库中把数据倒到win2000p+sql2000中,二者异构,要求实时更新目标库
- 这个错误怎么解决?
- 关于TFileStream的问题
- 小弟这个问题还没解决,援助我啊
- 怎么知道DBGrid中 Name 字段 位于DBGrid中的第几列?
- 关于窗口句柄的问题?
------------------------------
移动无标题栏窗口
通过消息的转换可以实现移动无标题栏窗口。当鼠标移动、按下或释放时,会产生
W M _ N C H I T T E S T消息,当检测到鼠标在窗体中按下的消息(消息值为h t C l i e n t )时,将鼠标在标
题栏上按下的消息(消息值为h t C a p t i o n )发出,这样就可以拖动窗体了。
例程S3_12 该例程对移动无标题栏窗口进行了说明
1) 通过主菜单的File | New Application命令创建一个新工程。
2) 在F o r m 1的p r i v a t e部分声明过程和W M _ N C H I T T E S T消息:
t y p e
TForm1 = class(TForm)
p r i v a t e
{ Private declarations }
procedure WMNChitTest(var Msg:TWMNChitTe s t ) ;
Message WM_NCHITTEST;
. . .
3) 将光标定位在类T F o r m 1的定义处,通过鼠标右键菜单Complete class at cursor 或
C t r l + S h i f t + C热键自动创建W M N C h i t Te s t过程的定义体,添加代码如下:
procedure TForm1.WMNChitTest(var Msg: TWMNChitTe s t ) ;
b e g i n
i n h e r i t e d ;
if Msg.Result = htClient then
M s g . R e s u l t : = h t C a p t i o n ; // 消息转换
e n d ;
4) 编译、链接和运行程序,测试效果。可以按下A l t + F 4关闭程序。
5) 读者可以在窗体上增加一个按钮,实现当按下该按钮后就关闭程序。
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND,$f012,0);end;
窗体没有标题栏。我们就在WM_NCHITEST消息中,让系统认为当鼠标按到窗体的Client区时总是按到窗体的标题栏,这样就可以移到窗体了。如下:
.................
procedure WMNChitTest(var Msg:TMessage);Message,WM_NCHITTEST;
..............
procedure TForm1.WMNChitTest(var Msg: TWMNChitTe s t ) ;
begin
inherited ;
if Msg.Result = htClient then
Msg.Result:=htCaption ;
end;
procedure TForm1.WMNChitTest(var Msg: TWMNChitTe s t ) ;
为:
procedure TForm1.WMNChitTest(var Msg: TMessage) ;