Создание кнопки меню в Windows - PullRequest
9 голосов
/ 07 января 2010

Microsoft Рекомендации по взаимодействию с пользователем дают некоторые рекомендации по использованию пользовательского интерфейса при использовании кнопки меню:

http://i.msdn.microsoft.com/Aa511453.command51(en-us,MSDN.10).png

Как создать одну из этих кнопок меню? Я нашел информацию о

  • как создать кнопку разделения в Vista и выше
  • как создать кнопку на панели инструментов с выпадающим меню
  • как создать обычную кнопку и вручную подключить обработчик события OnClick, который открывает меню

Но есть ли какой-нибудь стандартный способ создания кнопки, не на панели инструментов, с маленьким треугольником вниз, который автоматически вызывает меню при нажатии?

(я использую Delphi / C ++ Builder, но другие решения приветствуются.)

Ответы [ 2 ]

11 голосов
/ 07 января 2010

Вы можете использовать OnClick, чтобы вызвать всплывающее окно, и для согласованности используйте не позицию курсора, а позицию управления.

procedure TForm1.Button1Click(Sender: TObject);
var
  pt : TPoint;
begin
  Pt.X := Button1.Left;
  Pt.Y := Button1.Top+Button1.Height;
  pt := ClientToScreen(Pt);
  PopupMenu1.Popup(pt.x,pt.y);
end;

Затем можно добавить «глиф» с помощью кнопки Delphi 2010 или предыдущей версии TBitBtn и назначить свойство bitmap / glyph соответствующему изображению и выровнять по правому краю.

4 голосов
/ 07 января 2010

Вы не упоминаете, какую версию Delphi вы используете, но в Delphi 2010 TButton имеет новые свойства для этого: DropDownList, который может быть связан с TPopupMenu для определения пунктов меню, и Style, который можно установить в bsSplitButton.

При этом создается кнопка, которую вы можете нажать, и справа от нее также есть выпадающая стрелка. Чтобы сделать всплывающее меню при щелчке слева от стрелки, этот код в обработчике нажатия кнопки должен выполнить эту работу.

procedure TForm1.Button1Click(Sender: TObject);
var
  CursorPos: TPoint;
begin
  GetCursorPos(CursorPos);
  PopupMenu1.Popup(CursorPos.X, CursorPos.Y);
end;

в предыдущих версиях Delphi, я думаю, вам пришлось использовать TToolBar.

...