Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Как скрыть редко используемые пункты в PopupMenu

Коллеги доброго времени суток. 

Подскажите, может кто знает как скрывать редко используемые пункты меню в PopupMenu? 

Знаю это можно сделать через ActionManager но такой вариант не подходит ввиду слишком разросшегося проекта и значительной переделки...
Ответ:
Можно создать потомка PopupMenu со своим функционалом, а потом в проекте просто переопределите все PopupMenu на своего потомка.

Этот ответ добавлен с нового Винграда - 
Вопрос: Как узнать индекс PopupMenu?

здравствуйте вот столкнулся с такой проблемы. в PopupMenu 16 строк, хачу узнать на какой строке кликнул пользователь.
индекса узнать а не имя, эта не пойдет ( TMenuItem(Sender).Name) ) и для чего именно индекссь скажу внизу.
я мучился мучился и саздал такой кодь.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.N051Click(Sender: TObject);
var
i: integer;
j,c:byte;
begin
  for i:=2 to 11 do
 with TStringGrid(FindComponent('StringGrid'+inttostr(i))) do
 begin
   if Focused then
   begin
   c:=7;
   for j:=1 To 2 do
   begin
   c:=c+11;
   Cells[0,j]:=Memo7.Lines[c];
   Cells[1,j]:=Memo4.Lines[c];
   c:=c-22;
   end;end;end;
end;
вот где написано с:=7, вот эту семёрку хочу изменять по клику на PopupMenu ну там точное совпадение не будет но +c или -c
наверное получится, витоге эта семёрка равно первой строки PopupMenu, и естественна втарая страка должен быть 8 и дак далее
ну надеюсь хорошо объяснил.
Ответ:
Сообщение от kobakoba7
в PopupMenu 16 строк, хачу узнать на какой строке кликнул пользователь.
начнем с того, что переменная типа TPopupMenu не строковая, у нее нет строк, соответственно у нее нет ни строки ни индекса. У ее элементов меню TMenuItem есть, как сказали, имена ну и Tag можно использовать, пляшите от этого
Вопрос: Работа с PopupMenu левой и правой кнопками мыши

В моем проекте требуется задать возможность менять пользователем названия осей координат (показаны зеленым цветом) с помощью всплывающего меню.
Например, оси X поставить в соответствие ось -Z.
В данном проекте всплывающее меню PopupMenu1 вызывается левой кнопкой мыши и название оси выбирается нажатием левой кнопки мыши.
При нажатии правой кнопки мыши всплывающее меню PopupMenu1 вызывается, но выбрать название оси левой кнопки мыши уже не удается.
Как можно это исправить? Т.е. предусмотреть возможность вызывать PopupMenu1 и левой и правой кнопками мыши так, чтобы можно было выбирать название оси левой кнопкой мыши.
Код Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TFormShowBasis.SpeedButtonXClick(Sender: TObject);
// Вызывается только при нажатии левой клавиши мыши
var
    p: tpoint;
begin
    actBut := Sender;
    with Sender as TSpeedButton do
    begin
        p := Point(0, Height);
        p := ClientToScreen(p);
        if Assigned(PopupMenu) then
            PopupMenu.Popup(p.X, p.y);
    end;
end;
 
procedure TFormShowBasis.gfhhf1Click(Sender: TObject);
// Вызывается при выборе оси и правой и левой кнопкой мыши
begin
    TSpeedButton(actBut).caption := TMenuItem(Sender).caption;
    UpdateTag(Sender);
    Memo1.Visible := false;
end;
Ответ: событие ContextPopup реагирует на правую, событие Click на левую, вызвать меню - PopupMenu.PopUp, используя обычный button или bitbtn
Вопрос: Скрытие кнопок в PopupMenu

Всем доброго времени суток!
Подскажите как при нажатии на кнопку скрывать в компоненте PopupMenu определенные Item's.
Ответ: При создание кнопки в PopupMenu кнопкам присваивается сое имя (По умолчанию N[i][j], где i - номер главной кнопки(файл, справка файл =1, справка =2), а j - подпункт в выбранном разделе.

Для того что бы скрыть подпункт или пункт, нужно писать на кнопку:
Delphi
1
N41.Visible:=False;
Номера и названия пунктов и подпунктов в popupmenu? можно увидеть в StatusTree
Вопрос: DevExpress (cxGrid): PopupMenu при редактировании

Вот есть у нас грид
Строки можно редактировать
Если строка в режиме редактирования, то всплывает вот такое меню
А не то, какое я указал в свойстве PopupMenu

К сообщению приложен файл. Размер - 4Kb
Ответ: JaDi, DimaBr,

Спасибо!
Помогло
Вопрос: RxRichEdit и PopupMenu

Для компонента RxRichEdit из RxLib невозможно прилепить PopupMenu.
В свойстве компонента RxRichEdit.PopupMenu можно указать нужный PopupMenu на этапе разработки, но при запуске программы оно не появляется.
Даже на чистом пустом проекте.
Если прилепить это PopupMenu другому компоненту, то появляется.
Может это можно как-то вылечить?
Может как-то исходник компонента где-то подправить?
Ответ:
Сообщение от Alexey2014
RxRichEdit1.AllowObjects := False;
Да, так работает.
При этом теряется возможность вставлять изображения.
Большое спасибо!
Вопрос: Совместное использование PopUpMenu и Edit

...доброго времени суток, уважаемые форумчане!... У меня следующий вопрос к тем, кто работал с компонентом PopUpMenu (сам его никогда не использовал): можно ли сделать так, чтобы при написании в Edit-е определенного слова появлялось PopUpMenu?.. т. е.:
C++
1
2
3
4
5
AnsiString Str = Edit -> Text;
// здесь что-то
 if(Str == "LL")
 
// при этом условии появлется PopUpMenu
...если можно то, как?..или я неправильно понимаю работу этого компонента?...Если это невозможно, то чем его можно заменить?..Заранее благодарен за ответ.
Ответ:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Edit1Change(TObject *Sender) {
    // здесь что-то
    if (Edit1->Text == "LL") {
        TPoint cPt;
        cPt = Edit1->ClientToScreen(Point(cPt.x, cPt.y));
        PopupMenu1->Popup(cPt.x, cPt.y);
    }
}
Вопрос: Обработка появления PopupMenu нажатой ячейки

Морской бой.

Ручное расставление кораблей. Есть динамический созданный массив контролов TCell (ячейки поля) унаследованных от TGraphicControl. Для каждого контрола задается PopupMenu, в котором есть список доступных кораблей для расставления. У каждой ячейки есть методы GetX() и GetY(), которые получают местоположение на поле по горизонтали и вертикали соответственно. По нажатию идет проверка можно ли поставить в данную ячейку корабль с заданными параметрами и в случае успеха ставит корабль, удаляет пункт меню.

Как реализовать обработчик, который будет получать значения X и Y ячейки TCell, которая отобразила этот PopupMenu? Если ещё проще: как получить ссылку на тот компонент, который отобразил PopupMenu?
Ответ: Божественное свойство Parent
Вопрос: Вопрос по PopupMenu

Здравствуйте, имею код

Код:

var
z,i:Integer;
lpRect : TRect;
wParam:Integer;
begin
  GetWindowRect(Button5.Handle, lpRect);
TrackPopupMenu(PluginsMenu, 0, lpRect.Right, lpRect.Top, 0, Handle, nil);

В нем получаю координаты Button5, потом вывожу PopupMenu (PluginsMenu)
Подскажите пожалуйста, как получить номер нажатого Item'а в PopupMenu.
PopupMenu заполняется динамически строками из файла
Прошу помочь решить вопрос с получением порядкового номера, выбранного в меню Item'a.
За любую помощь буду очень признателен.
Ответ: Смотри Sender
Вопрос: Stringgrid and popupmenu

Добрый вечер!
Имеется stringgrid и привязанный к нему PopupMenu.
Задача в следующем: Как сделать так, чтобы определенный пункт контекстного меню добавлял определенный текст в выделенную ячейку.
Т.е. Выбрал пункт "1" из popupmenu, текст "1" появился в выбранной ячейке stringgrid.

Заранее спасибо
Ответ: RostorLuxor, я бы добавил к вашему примеру
Код Delphi
1
2
3
4
5
6
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 StringGrid1.MouseToCell(x,y,x1,y1);
 StringGrid1.Selection := TGridRect(rect(x1,y1,x1,y1));
end;
чтобы ячейка выделялась любой кнопкой мыши, а то меню появилось над одной ячейкой, а вставился текст совсем в другую