Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2010, 10:15   #1
akaTemporary
 
Аватар для akaTemporary
 
Регистрация: 07.01.2010
Сообщений: 6
По умолчанию Одно Popupmunu на несколько TollButons

Доброго дня!
При нажатие пунка в PopupMenu1 результат приходит от последней добавленной кнопки! Подскажите что я не так делаю или у меня обработка не в том месте!!!!
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ComCtrls, ToolWin, StdCtrls;

type
  TForm1 = class(TForm)
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    PopupMenu2: TPopupMenu;
    N4: TMenuItem;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure N1Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.N1Click(Sender: TObject);
var i:Integer;
begin
///
  i:=10;
  Form1.Caption:='нажато Удалить';
  Edit2.Text:='Проверена кнопка: ';
  for i:=0 to ToolBar1.ButtonCount-1 do begin
    if TMenuItem(Sender).GetParentMenu=ToolBar1.Buttons[i].DropdownMenu then begin
      Edit1.Text:='кнопка = '+IntToStr(i);
    end;
    Edit2.Text:=Edit2.Text+IntToStr(i)+';';
  end;

///
end;

procedure TForm1.N4Click(Sender: TObject);
begin
  // Добавить новую кнопку
          with TToolButton.Create(ToolBar1) do
          begin
            Parent := ToolBar1;
            Style := tbsDropDown;
            AutoSize:=False;
            DropdownMenu:=PopupMenu1;
            Tag:=ToolBar1.ButtonCount;
            Cursor:=crHandPoint;
          end;

  Form1.Caption:='нажато Добавить кнопку';
end;

end.
Delphi7
akaTemporary вне форума Ответить с цитированием
Старый 21.01.2010, 10:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У меня твой код работает.
Я же тебе пример писал. Я его проверял все ок.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.01.2010, 11:13   #3
akaTemporary
 
Аватар для akaTemporary
 
Регистрация: 07.01.2010
Сообщений: 6
По умолчанию

У меня не работает! в строке
Код:
 Edit1.Text:='кнопка = '+IntToStr(i);
у меня возвращается номер последней добавленной кнопки, там хоть на любую нажимай. Если была добавлена кнопка №3 то при нажатии на пункт меню будет возвращатся №3!
Не знаю, как у тебя работает... Если не трудно прикрепи свой код, который работает!

Последний раз редактировалось akaTemporary; 21.01.2010 в 11:15.
akaTemporary вне форума Ответить с цитированием
Старый 21.01.2010, 11:20   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Или я что-то не понял, или тут извраты какие-то...
Вроде просто все:
Код:
procedure TForm1.N1Click(Sender: TObject);
begin
ShowMessage(PopupMenu1.PopupComponent.Name);
end;
mihali4 вне форума Ответить с цитированием
Старый 21.01.2010, 11:26   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
akaTemporary
Я скопировал твой код один-в-один.
Он рабочий на все 100%
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.01.2010, 11:44   #6
akaTemporary
 
Аватар для akaTemporary
 
Регистрация: 07.01.2010
Сообщений: 6
По умолчанию

Код:
procedure TForm1.N1Click(Sender: TObject);
begin
ShowMessage(PopupMenu1.PopupComponent.Name);
end;
показывает 'ToolBar1', а тебя что показывает?

////
Если в месте создания кнопки написать так:
Код:
            PopupMenu:=PopupMenu1;
            //DropdownMenu:=PopupMenu1;

            Name:='ToolButton'+IntToStr(ToolBar1.ButtonCount);
            Hint:=Name;
            ShowHint:=True;
то в процедуре обработки пункта меню N1:
Код:
    if PopupMenu1.PopupComponent = ToolBar1.Buttons[i] then begin
      Edit1.Text:='кнопка = '+IntToStr(i);
    end;
будет возвращаться правильное значение!

А через DropdownMenu - ничего не выходит!

Последний раз редактировалось akaTemporary; 21.01.2010 в 12:13.
akaTemporary вне форума Ответить с цитированием
Старый 21.01.2010, 12:19   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
mihali4
Не. Михалыч. Ему нужно узнать к какой кнопке относится меню, где был клик.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.01.2010, 12:21   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Так попапку нужно назначать не тулбару (!), а каждой кнопке тулбара !
Еще раз повторюсь - я всегда проверяю код перед ответом...
mihali4 вне форума Ответить с цитированием
Старый 21.01.2010, 12:58   #9
akaTemporary
 
Аватар для akaTemporary
 
Регистрация: 07.01.2010
Сообщений: 6
По умолчанию

Код:
          with TToolButton.Create(ToolBar1) do
          begin
            Parent := ToolBar1;
            Style := tbsDropDown;
            ....
            DropdownMenu:=PopupMenu1;
            ...
Вот тут же указывается, какое меню будет отображаться!
Может всё-таки я чего то не обрабатываю. Так как вывод попменю возложено на тулбар! а следственно он и является родителем!!!
akaTemporary вне форума Ответить с цитированием
Старый 21.01.2010, 13:14   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
akaTemporary
Тут такая фишка не пройдет, потому что у тебя одно и тоже меню назначено всем кнопкам.
Тебе нужно для каждой кнопки создавать отдельно меню. Тогда этот фокус работает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как составить из трех слов одно?)) Xander Microsoft Office Access 6 14.05.2009 16:29
2 мониторы с одно пк aska2013 Компьютерное железо 4 04.04.2009 23:10
Можно ли разделить сразу несколько цифр на одно и тоже число? Xell Microsoft Office Excel 2 12.01.2009 13:32
Одно без другого Принц Свободное общение 2 30.05.2008 22:50