给Delphi的工具条按钮添加BTNS_WHOLEDROPDOWN风格

来源:互联网 发布:少女前线五星枪数据 编辑:程序博客网 时间:2024/05/17 22:10

工具条按钮的BTNS_WHOLEDROPDOWN风格是IE5以后就提供的.

Delphi早期版本估计是为了照顾兼容性工具条按钮是没有这个风格的.只有下面几种和系统风格对应的风格.

  TToolButtonStyle = (tbsButton, tbsCheck, tbsDropDown, tbsSeparator,
    tbsDivider, tbsTextButton);

后面尽管IE5以下根本没人用了,但是Delphi的开发人员都忘了添加一种WholeDropDown风格来对应这种风格..

CSDN网友xiedewei 提了这个问题.并且修改VCL源代码解决了这个问题.但是修改VCL源代码毕竟不是一件一劳永逸的事情.以后新版VCL源代码还要改,所以我在这里提供了一种更简单的方式.直接可以设置.

uses
  CommCtrl;

//设置工具条某个按钮为BTNS_WHOLEDROPDOWN样式
function SetBtnWholeDropdown(tb : TToolBar; BtnIndex : Integer) : boolean;
var
  btnInfo : TTBBUTTONINFO;
  r : Integer;
  e : Integer;
begin
  ZeroMemory(@btnInfo, sizeof(btnInfo));
  btnInfo.cbSize := sizeof(btnInfo);
  btnInfo.dwMask := TBIF_STYLE;

  //返回值是按钮的索引
  if tb.Perform(TB_GETBUTTONINFO, BtnIndex, WParam(@btnInfo)) < 0 then
  begin
  Result := False;
  end
  else
  begin
  btnInfo.fsStyle := btnInfo.fsStyle and (not BTNS_DROPDOWN)or BTNS_WHOLEDROPDOWN;
  //非零就是成功
  Result := tb.Perform(TB_SETBUTTONINFO, BtnIndex, WParam(@btnInfo)) <> 0;
  end;
end;

原创粉丝点击