delphi学习笔记2

在系统菜单中添加菜单项

1
Function GetSystemMenu(hWnd:HWND;bRevert:BOOL):HMENU;stdcall;//得到窗口的系统菜单句柄

参数说明:

  • hWnd:所要取得系统菜单句柄的目标窗口句柄
  • bRevert:是否修改原始菜单 返回值是1个HMENU型的菜单句柄 then Function AppendM(hMenu:HMENU;uFlags,ulDNewItem:UINT;lpNewTtem:pChar):BOOL;stdcall; 参数说明
  • hMenu 用GetSystemMenu取得的菜单句柄
  • uFlags,ulDNewItem:菜单唯一标志,弹出菜单标志。
  • lpNewItem:菜单类型

返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零 ## 可被设置在uFlag的标志: ## - MF_BITMAP:将一个位图用作菜单项。参数lpNewltem里含有该位图的句柄。 - MF_CHECKED:在菜单项旁边放置一个选取标记。如果应用程序提供一个选取标记, 位图(参见SetMenultemBitmaps),则将选取标记位图放置在菜单项旁边。 - MF_DISABLED:使菜单项无效,使该项不能被选择,但不使菜单项变灰。 MF_ENABLED:使菜单项有效,使该项能被选择,并使其从变灰的状态恢复。 - MF_GRAYED:使菜单项无效并变灰,使其不能被选择。 - MF_MENUBARBREAK:对菜单条的功能同MF_MENUBREAK标志。 对下拉式菜单、子菜单或快捷菜单,新列和旧列被垂直线分开。 - MF_MENUBREAK:将菜单项放置于新行(对菜单条), 或新列(对下拉式菜单、子菜单或快捷菜单)且无分割列。 - MF_OWNERDRAW:指定该菜单项为自绘制菜单项。 菜单第一次显示前,拥有菜单的窗口接收一个WM_MEASUREITEM消息来得到菜单项 的宽和高。然后,只要菜单项被修改,都将发送WM_DRAWITEM消息给菜单拥有者的窗口程序。 - MF_POPUP:指定菜单打开一个下拉式菜单或子菜单。 参数uIDNewltem下拉式菜单或子菜单的句柄。此标志用来给菜单条、打开一个 下拉式菜单或于菜单的菜单项、子菜单或快捷菜单加一个名字。 - MF_SEPARATOR:画一条水平区分线。此标志只被下拉式菜单、子菜单或 快捷菜单使用。此区分线不能被变灰、无效或加亮。参数IpNewltem和uIDNewltem无用。 - MF_STRING:指定菜单项是一个正文字符串;参数lpNewltem指向该字符串 - MF_UNCHECKED:不放置选取标记在菜单项旁边(缺省)。 如果应用程序提供一个选取标记位图(参见SetMenultemBitmaps), 则将选取标记位图放置在菜单项旁边。

lpNewItem可以设置的参数

  • MF_BITMAP   含有位图句柄。MF_STRING:以`’结束的字符串的指针。
  • MF_OWNERDRAW   含有被应用程序应用的32位值,可以保留与菜单项有 关的附加数据。当菜单被创建或其外观被修改时, 此值在消息WM_MEASURE或WM_DRAWITEM的参数IParam指向的结构,成员itemData里。

Delemenu()函数进行对指定菜单条删除

说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
DeleteMenu(
HMENU hMenu, // handle to menu
UINT uPosition, // menu item identifier or position
UINT uFlags // menu item flag
);
procedure sysmenu(var msg:TWMMenuSelect); message wm_syscommand;//声明时记得写上,要不只能创建菜单,
不能执行菜单操作了了
```
# 带历史信息的菜单 #
动态插入菜单的方法:
```dpr
procedure TForm1.N2Click(Sender:TObjec);
var
QQ:Tmenuitem;
begin
QQ:=Tmenuitem.Create(nil);
if OPenDialog1.Execute then
begin
QQ.Caption:=OPenDialog1.FileName;
MainMenu1.Items.Items[0].Insert(2,QQ);
end;
end;

多彩的菜单

关于背景的重绘:
通常Windows程序的标准菜单,在其被下拉或弹出时,鼠标在上移动时出现的选择条背景是一单一的颜色, 现在我们要将其重绘为有渐变色效果的背景,另外如果要在其背景上绘制图形(您见过这样的菜单吗?), 则应先绘图、后绘渐变的背景。这些绘制工作的完成只需简单使用Delphi提供的画布(Canvas)对象。

关于重绘图标:
如果菜单上有图标,则最好为各菜单项指定ImageIndex索引号,而不要使用其Bitmap属性 。这样在为各菜单项指定了ImageIndex索引号后,可以直接用其TImageList的Draw方法在同一个画布上绘制相应的图标。

关于OnAdvancedDraw的参数说明

  • Sender 标识一个菜单项的实例
  • Acanvas 提供了一个菜单项画布,绘制菜单就是通过该画布实现的
  • Arect 标识菜单项在画布对象上的区域
  • State 一个集合,表示菜单项的状态,可选值
  • odSelected 菜单项被选中
  • odGrayed 菜单项为灰色
  • odDisabled 菜单项不可用
  • odChecked 菜单项被选中
  • odFocused 菜单项获得输入焦点
  • odDefault 菜单项是默认项
  • odHotLight 菜单项高亮显示
  • odInactive 菜单及其关联的子菜单处于非活动状态
  • odNoAccel 在菜单被绘制时,忽略加速键
  • odComboBoxEdit 组合框被绘制时发生

对菜单进行拉伸(其实就是菜单项的Visable的设置)

TMainMenu组件的第1个Items为第一季菜单,第2个Items为相应菜单的 索引项,它们的下标都是从0开始

for example:

1
MainMenu1.Items[0].Items[3].Visable:=False;//对第一列第4个菜单进行隐藏

带背景的工具栏

关键语句:

1
Sender.Canvas.StretchDraw(ARect,Bmp);

浮动工具栏

窗体是否要隐藏,重要的是判断是否在操作中,通过窗体的 Active属性,可以确定窗体是否在被操作

在状态栏里显示检查框

将一个控件显示在另一个控件中可以通过修改控件的Parent属性来实现,

  • Parent属性用于确定控件在那个容器控件上显示。
  • Parent属性 负责子空间的显示
  • Owner属性 负责子控件的释放

带进度条的状态栏

主要是progessbar的长宽高低

1
2
3
4
5
6
7
8
with Progress do
begin
Top:=ProgressBarRect.Top;
Left:=ProgressBarRect.Left;
Width:=ProgressBarRect.Right-ProgressBarRect.Left;
Height:=ProgressBarRect.Bottom-progressBarRect.Top;
Visible:=True;
end;

还有就是进度条组件的尺寸设定为状态条中的第二个显示面板的 尺寸,因为该面板的Style属性已被设置为psOwnerDraw

状态栏中加入图标

为Image组件的Parent属性指定父组件

OutLook界面

多组件通过代码放到一个组件里面,父组件会根据组件Parent属性的先后顺序而后进行自上而下的排列
不会使用ActionToolBar

带导航菜单的主界面

图形化导航界面

1
pricedure Draw(x,y:double;Graaphic;Tgraphic);

参数说明:

  • x,y 绘制的画布所在位置
  • Graphic 要绘制的图片

ListView组件

  • Item 使用该属性可直接访问列表中的项目的TListItem对象
  • Selected 使用该属性可访问列表中第一个所选项的属性 当SelCount 属性为0时,该属性为空,大于1时,后来的项通过GetNextItem方法查找Selected属性的定位

Timage组件可以实现图像格式的转化

它以Picture对象存储图像数据

  • Bitmap对象用以存储位图格式的图像
  • Graphic对象用于存储JPG图像数据

转换过程:首先用TImage组件Picture对象的LOadFromFile,将JPG文件载入程序,然后动态建立1个TImage组件,用该组件中Bitmap对象的Assign方法复制Graphic对象中存储的数据。这样就完成了图像的转换,最后保存转换后的图像即可

热评文章