文档章节

学习 Message(22): WM_SYSCOMMAND 消息[六] : 系统菜单综合操作示例

涂孟超
 涂孟超
发布于 2014/09/26 15:38
字数 491
阅读 3
收藏 0
点赞 0
评论 0
本例效果图:



代码文件:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  protected
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{定义两个菜单命令 ID 常数, 自定义的此类常数应该小于 $F000, 因为系统使用的都大于这个数}
const
  MenuCmdID1 = 101;
  MenuCmdID2 = 102;

{添加}
procedure TForm1.Button1Click(Sender: TObject);
var
  h: HMENU;
begin
  {系统菜单句柄}
  h := GetSystemMenu(Handle, False);
  AppendMenu(h, MFT_STRING, MenuCmdID1, '新添加的菜单项');
end;

{插入}
procedure TForm1.Button2Click(Sender: TObject);
var
  h: HMENU;
begin
  h := GetSystemMenu(Handle, False);
  {这是插入在 "还原" 菜单(SC_RESTORE) 前面}
  InsertMenu(h, SC_RESTORE, MFT_STRING, MenuCmdID2, '插入的菜单项');
end;

{修改}
procedure TForm1.Button3Click(Sender: TObject);
var
  h: HMENU;
begin
  h := GetSystemMenu(Handle, False);
  ModifyMenu(h, SC_MOVE, MF_BYCOMMAND, SC_MOVE, '这是我改的');
end;

{删除}
procedure TForm1.Button4Click(Sender: TObject);
var
  h: HMENU;
begin
  h := GetSystemMenu(Handle, False);
  {这是删除的 "关闭" 菜单, 此时窗口的关闭按钮会变灰}
  DeleteMenu(h, SC_CLOSE, MF_BYCOMMAND);
end;

{恢复}
procedure TForm1.Button5Click(Sender: TObject);
begin
  GetSystemMenu(Handle, True);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.Caption := '添加';
  Button2.Caption := '插入';
  Button3.Caption := '修改';
  Button4.Caption := '删除';
  Button5.Caption := '恢复';
end;

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
var
  h: HMENU;
  buf: array[Byte] of Char;
begin
  h := GetSystemMenu(Handle, False);
  case Message.CmdType of
    MenuCmdID1: begin
      GetMenuString(h, MenuCmdID1, buf, Length(buf), MF_BYCOMMAND);
      ShowMessage(buf);
    end;
    MenuCmdID2: begin
      GetMenuString(h, MenuCmdID2, buf, Length(buf), MF_BYCOMMAND);
      ShowMessage(buf);
    end;
  end;
  inherited;
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 191
  ClientWidth = 206
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 48
    Top = 20
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 48
    Top = 51
    Width = 75
    Height = 25
    Caption = 'Button2'
    TabOrder = 1
    OnClick = Button2Click
  end
  object Button3: TButton
    Left = 48
    Top = 82
    Width = 75
    Height = 25
    Caption = 'Button3'
    TabOrder = 2
    OnClick = Button3Click
  end
  object Button4: TButton
    Left = 48
    Top = 113
    Width = 75
    Height = 25
    Caption = 'Button4'
    TabOrder = 3
    OnClick = Button4Click
  end
  object Button5: TButton
    Left = 48
    Top = 144
    Width = 75
    Height = 25
    Caption = 'Button5'
    TabOrder = 4
    OnClick = Button5Click
  end
end

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/10/31/1323992.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
windows消息(一)

SendMessage函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队...

jinx88
2016/06/18
10
0
MFC的SendMessage函数详解

SendMessage函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队...

长平狐
2012/10/08
2.9K
0
几个WM消息其lParam和wParam参数定义

几个WM消息其lParam和wParam参数定义 鼠标消息 lParam:低字组为x 座标,高字组为y 座标,这两个座标是相对于窗口显示区域左上角的位置。 Wparam:指示滑鼠按键以及Shift和Ctrl 键的状态。可...

IMGTN
2012/10/03
0
1
GetSystemMenu(FALSE)

参数为False时返回当前窗口系统菜单(窗口标题栏右键弹出的移动、大小、最大化等)的句柄。 系统菜单是指我们点击窗体左上角的小图标时所弹出的菜单,其中好象有“恢复”.“移动”.“最大化”....

云栖希望。
2017/12/04
0
0
MFC下多线程与消息机制的结合使用

前面一段时间,一直在想怎么样实现在全局的线程函数中实现调用窗体的一些函数(比如说在线程里面调用按钮单击处理函数,以及窗体的一些操作)。最近在网络 闲逛中发现了实现的方法,特意贴出...

长平狐
2012/07/12
150
0
c# 更改最大化按钮功能实现最大化时遮盖任务栏,点击Esc取消全屏

更改最大化按钮功能实现最大化时遮盖任务栏。 const int WMSYSCOMMAND = 0x112; const int SCCLOSE = 0xF060; const int SCMINIMIZE = 0xF020; const int SCMAXIMIZE = 0xF030; protected ov......

Vevi
2012/08/11
0
0
delphi中Message消息的使用方法

实例1 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const WMME=WMUSER+100; //自定义消息; type TForm1 ......

geek_loser
2015/01/15
0
0
windows消息(二)

附录A Windows 常用消息大全 表A-1 Windows消息分布 消息范围 说 明 0 ~ WM_USER – 1 系统消息 WM_USER ~ 0x7FFF 自定义窗口类整数消息 WM_APP ~ 0xBFFF 应用程序自定义消息 0xC000 ~ ...

jinx88
2016/06/18
24
0
VC托盘程序的简单实现

以下是网上看到的一个实现VC托盘的程序,好像只适用于对话框程序。经本人简单整理。 一、托盘简介 所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那...

wwl33695
2015/06/09
0
0
WM_SYSCOMMAND消息,居然把对话框的标题名改了?

新建一个对话框,放置3个按钮,分别写入以下代码,实现最大化、最小化、还原。 可是效果实现了,但标题名也变成按钮上的文字了,这是什么原因? void CDemoDlg::OnBnClickedButton1() { // T...

没饭吃
2015/03/08
279
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

jquery刷新页面(局部及全页面刷新)

window.location.reload()刷新当前页面. parent.location.reload()刷新父亲对象(用于框架) opener.location.reload()刷新父窗口对象(用于单开窗口) top.location.reload()刷新最顶端对象...

uug
2分钟前
0
0
CoreText进阶(五)- 文字排版样式和效果

CoreText进阶(五)- 文字排版样式和效果 效果 以下是三个设置了不同属性的效果图 第一个设置了文字颜色为红色,字体为16号 第二个设置了文字颜色为灰色,字体为16号,对其为居中 第三个设置...

aron1992
29分钟前
1
0
10.23 linux任务计划cron~10.27 target介绍

crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是...

洗香香
39分钟前
0
0
告警系统主脚本、告警系统配置文件、告警系统监控项目

20.20 告警系统主脚本 告警系统主脚本 main.sh内容 #!/bin/bash#Written by aming.# 是否发送邮件的开关export send=1# 过滤ip地址export addr=`/sbin/ifconfig |grep -A1 "en...

lyy549745
42分钟前
0
0
Don’t Repeat Yourself

在软件工程中,Don’t Repeat Yourself(DRY)是软件开发的原则,旨在减少重复,用抽象代替它,使用数据规范化来避免冗余。 这个原则在维基百科上是说是由Andy Hunt和Dave Thomas《The Pragmat...

woshixin
44分钟前
0
0
搭建webpack项目框架

作者:汪娇娇 时间:2018年6月4日 一、说明 随着业务发展和前端人员的增加,搭建一个通用框架以及制定统一规范就成了必然。对于选型这方面,一开始好像就没考虑其他框架,直接选了webpack。w...

娇娇jojojo
51分钟前
0
0
Java基础——面向对象(内部类)

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 内部类: 1.有名内部类 2.无名内部类 内部类申请...

凯哥学堂
今天
0
0
HttpClient内部三个超时时间的区别

RequestConfig requestConfig = RequestConfig.custom() .setConnectionRequestTimeout(config.connReqTimeout) //从连接池中获取连接的超时时间 ......

1713716445
今天
0
0
每天一个命令SCP

每天一个命令:SCP scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速...

河图再现
今天
0
0
cron/chkconfig/systemd/unit/target

linux任务计划 : cron工具 任务计划在运维工作中用到的比较多,大部分系统管理工作都是通过定期自动执行某个脚本来完成。 查看linux中任务计划的配置文件: /etc/crontab [root@yolks-001 ~]...

Hi_Yolks
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部