关于insertmenu的问题(100分)

  • 主题发起人 主题发起人 HouBy
  • 开始时间 开始时间
H

HouBy

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在使用insertmenu时,如果使用参数mf_bitmap,那么最后一个参数怎么用?
最后一个参数应该是一个图象的句柄,可在windows单元中,其声明为pchar,我试着在程序中自己重新声明,可程序报错,怎么办???????
 
什么呀,最后一个参数是:如果菜单是字符串就应该写:'MF_STRING',图形则是:'MF_BITMAP'
记住,一定在参数中加单引号哦!
 
//MF_BITMAP
//Uses a bitmap as the menu item.
//The lpNewItem parameter contains the handle of the bitmap.
既然它是一个指针,那么直接指向一个位图句柄试试。
 
你用pchar()转换一下试试
 
YoungSun 能不能给各例子?
 
给你一个例子,里面虽然没有 insertMenu ,但是一些主要参数的用法
都有了。你可以参照下面用到的和菜单有关的API。

把窗体的系统菜单添加到窗体的菜单条上
procedure TForm1.Button3Click(Sender: TObject);
var
item: TMenuItem;
sysmenuHandle: HMENU;
i, itemcount: Integer;
buffer: array [0..128] of Char;
itemID: Integer;
itemflags: DWORD;
begin
//handleNeeded;
//得到系统菜单的handle
sysmenuHandle := GetSystemMenu( handle, false );
If sysmenuHandle <> 0 Then
Begin
//得到系统菜单的个数
itemcount := GetMenuItemcount( sysmenuHandle );
for i:= 0 to itemcount - 1 do
begin
//得到指定菜单项的当前状态
itemflags := GetMenuState
(sysmenuhandle, i, MF_BYPOSITION );
//如果是横线
If (itemflags and MF_SEPARATOR) = MF_SEPARATOR
Then
item := NewLine
Else Begin
//得到指定菜单项的Caption
GetMenuString( sysmenuhandle, i, buffer,
sizeof(buffer),MF_BYPOSITION );
//得到指定菜单的在系统菜单中的ID
itemID := GetMenuItemID( sysmenuhandle, i );
//创建新的MenuItem
item := NewItem( buffer, 0,
(itemflags and MF_CHECKED) = MF_CHECKED,
(itemflags and (MF_DISABLED or MF_GRAYED)) = 0,
SystemMenuClick,0,
format('Sysmenu_%d',[itemid]));
item.tag := itemID;
End;
systemmenu.Add( item );
// sysemnu为主菜单上的一个TMenuItem
end;
End;
end;

procedure TForm1.SystemMenuClick(Sender: TObject);
begin
With Sender As TMenuitem do
Self.perform(WM_SYSCOMMAND, Tag, 0 );
end;

 
你没有弄清楚我要干什么?我要的是在菜单中加一幅图片,注意:不是前面的小图标,而是整个菜单条目为一幅图片
 
用菜单的自画(OwnerDraw)消息处理,自己画一个就可以啊,将位图复制到相应项目的区域就可以啊!
 
后退
顶部