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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2008, 10:41   #1
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию PopupMenu

помогите разобраться с параметрами
чем отличается
PopupMenu1.Items.Add(Item: TMenuItem)
от
PopupMenu1.Items.Add(const AItems: array of TMenuItem)

и как скажем добавить в popupmenu пункт 'Выход'?
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 23.05.2008, 11:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот так:
Код:
var i:TMenuItem;
begin
i:=TMenuItem.Create(PopupMenu1);
i.Caption:='adsad';
i.OnClick:=N11Click;
PopupMenu1.Items.Add(i);

end;
А отличия в том что просто вторая процедура добавляет не один тобой описанный пункт а целый массив их. Конечно пред этим ты их всех описать должен.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.05.2008, 11:41   #3
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

а N11Click на имя процедуры заменить можно? мне просто надо, чтобы при нажатии выполнялась процедура
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 23.05.2008, 11:42   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Можно. N11Click кстати тоже имя процедуры.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 23.05.2008, 11:44   #5
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

Код:
procedure test;
begin
Form1.label1.caption:='sdf';
end;

procedure TForm1.FormActivate(Sender: TObject);
var i:TMenuItem;
begin
i:=TMenuItem.Create(PopupMenu1);
i.Caption:='adsad';
i.OnClick:=test;
PopupMenu1.Items.Add(i);
end;
вот так выбивает ошибку в строке
i.OnClick:=test;
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 23.05.2008, 12:00   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
вот так выбивает ошибку в строке
i.OnClick:=test;
Что пишет? Вроде все правильно, должно работать.

Вот тебе кусок рабочего кода, разбирайся:
Код:
//событие для меню Фильтры
procedure TForm1.FiltersItemEvent(Sender: TObject);
begin
with Sender as TMenuItem do
  //ShowMessage(PL_DIR+Filters.Strings[MenuIndex]+PL_EXT);
  PlugStart(PL_DIR+Filters.Strings[MenuIndex]+PL_EXT);
end;

//событие для динамически созданных пунктов меню
procedure TForm1.MenuItemEvent(Sender: TObject);
begin
with Sender as TMenuItem do
  LoadFile(LastFiles.Strings[MenuIndex]);
end;

procedure TForm1.InitFilters;
var
NewItems: array of TMenuItem;
i: shortint;
begin
ListFileDir(ExtractFilePath(Application.EXEName)+PL_DIR,
  '*'+PL_EXT,Filters,True);
SetLength(NewItems,Filters.Count);
for i:=0 to Length(NewItems)-1 do
  NewItems[i]:=TMenuItem.Create(MainMenu1);
for i:=0 to Length(NewItems)-1 do
  begin
  NewItems[i].Caption:=Filters.Strings[i];
  NewItems[i].OnClick:=FiltersItemEvent;
  N19.Add(NewItems[i]);
  end;
end; 

//заполнение журнала при старте программы
procedure TForm1.InitJournal;
var
NewItems: array of TMenuItem;
i: shortint;
begin
SetLength(NewItems,LastFiles.Count);
for i:=0 to Length(NewItems)-1 do
  NewItems[i]:=TMenuItem.Create(MainMenu1);

for i:=Length(NewItems)-1 downto 0 do
  begin
  NewItems[i].Caption:=ExtractFileName(LastFiles.Strings[i]);
  NewItems[i].OnClick :=MenuItemEvent;
  N14.Insert(0,NewItems[i]);
  end;
end;

//запись в журнал
procedure TForm1.WriteFN(FN: TFileName);
var
MyItem: TMenuItem;
begin
LastFiles.Insert(0,FN);
MyItem:=TMenuItem.Create(MainMenu1);
MyItem.Caption:=ExtractFileName(LastFiles.Strings[0]);
MyItem.OnClick :=MenuItemEvent;
if LastFiles.Count > 10 then
  begin
  N14.Insert(0,MyItem);
  N14.Delete(10);
  LastFiles.Delete(10);
  end
else
  begin
  N14.Insert(0,MyItem);
  end;
Form5.ListBox1.Items:=LastFiles;
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 23.05.2008, 12:03   #7
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

пишет несовпадение типов
method pointer и regular procedure
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 23.05.2008, 12:11   #8
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

Код:
procedure TForm1.MenuItemEvent(Sender: TObject);   
begin   
with Sender as TMenuItem do   
  LoadFile(LastFiles.Strings[MenuIndex]);   
end;  

procedure TForm1.InitJournal;   
var   
NewItems: array of TMenuItem;   
i: shortint;   
begin   
SetLength(NewItems,LastFiles.Count);   
for i:=0 to Length(NewItems)-1 do   
  NewItems[i]:=TMenuItem.Create(MainMenu1);   
  
for i:=Length(NewItems)-1 downto 0 do   
  begin   
  NewItems[i].Caption:=ExtractFileName(LastFiles.Strings[i]);   
  NewItems[i].OnClick :=MenuItemEvent;   
  N14.Insert(0,NewItems[i]);   
  end;   
end;
ну вот интересующий нас кусок кода. у меня аналогично...
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 23.05.2008, 12:26   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
пишет несовпадение типов
Естесственно. твою test нужно описывать так:
Код:
type
  TForm1 = class(TForm)
.......................
    procedure test(Sender: TObject);
............................
  private
    { Private declarations }
  public
    { Public declarations }
  end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.05.2008, 12:39   #10
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
ну вот интересующий нас кусок кода. у меня аналогично...
Где же аналогично?
procedure test;
procedure TForm1.MenuItemEvent(Sender: TObject);
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PopupMenu Патрон Общие вопросы Delphi 7 15.06.2008 14:04
PopupMenu и gif Dj_smart Мультимедиа в Delphi 6 06.06.2008 11:33
PopupMenu Михаил Юрьевич Общие вопросы Delphi 6 03.05.2008 18:46
PopupMenu Teen4jump Общие вопросы Delphi 10 12.03.2008 13:42
Про PopupMenu Михаил Юрьевич Общие вопросы Delphi 2 23.02.2008 23:38