Есть такая полезная утилитка для ТС, как TCMenu.
Кликаем на кнопочку в тулбаре - вуаля раскрывается меню. Очень удобно и приятно. В общем нашел решение, как это сделать в DC, вот example:
В MainToolBarToolButtonClick вызываем:
- Код: Выделить всё
ExecCmdEx(NumberOfButton);
где
- Код: Выделить всё
function TfrmMain.ExecCmdEx(ButtonIndex:integer): boolean;
var cmd:string;
begin
cmd:=MainToolBar.GetButtonX(ButtonIndex,cmdx);
actionLst.ActionByName(Cmd).Tag:=ButtonIndex;
if actionLst.ActionByName(Cmd) <> nil then
Result := actionLst.ActionByName(Cmd).Execute
else
Result := ExecCmdFork(Format('"%s"', [Cmd]));
end;
Добавляем action - actShowButtonMenu.
- Код: Выделить всё
procedure TfrmMain.actShowButtonMenuExecute(Sender: TObject);
var Point:TPoint;
lst:TKAStoolBar; var i:integer; x:TMenuItem; cmd:string;
begin
cmd:=MainToolBar.GetButtonX((Sender as TAction).tag,CmdX);
pmToolMenu.Items.Clear;
lst:=TKAStoolBar.Create(nil);
lst.LoadFromFile(gpIniDir + MainToolBar.GetButtonX((Sender as TACtion).tag,ParamX));
for i:=1 to lst.ButtonCount do
begin
X:=TMenuItem.Create(pmToolMenu);
x.Caption:=lst.GetButtonX(i,MenuX);
pmToolmenu.Items.Add(x);
end;
lst.free;
Point := Mouse.CursorPos;
pmToolMenu.PopUp(Point.x,Point.Y);
end;
Заодно решается проблема передачи параметров.
(Если я туплю и это не проблема, то ткните носом пожалуйста)
Использовал для вытягивания бара KasToolbar, что не есть гуд. Думаю стоит вынести функции работы с бар файлом в отдельный класс.