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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2011, 09:28   #1
ZePr
Пользователь
 
Аватар для ZePr
 
Регистрация: 02.07.2010
Сообщений: 40
Вопрос [Delphi] Запуск процедуры с параметром

Помогите мне...
Я создаю пункт PopupMenu, и указывая запуск процедуры с параметром у меня выскакивает ошибка
Код:
[Error] Unit1.pas(278): Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer or untyped parameter'
Сама строка с ошибкой:
Код:
PopupMenu1:= TPopupMenu.Create(Self);
with PopUpMenu1.Items do
begin
for q:=1 to q do 
 Add(NewItem(stations.ReadString(StationList.Items.Strings[StationList.ItemIndex], ('name'+inttostr(q)), 'Áåç èìåíè'), 
   0, False, True, PlayStation(url), ('url'+inttostr(q)), 'nourl')), 0, 'MenuItem1'));
PopupMenu1.Popup(Mouse.CursorPos.X+1,Mouse.CursorPos.Y+1);
Т.е передача параметра функции Playstation (url)

Как мне передать функции переменную и заранее извиняюсь за плохую постановку вопроса...

Последний раз редактировалось Stilet; 30.01.2011 в 10:06.
ZePr вне форума Ответить с цитированием
Старый 30.01.2011, 10:01   #2
ZePr
Пользователь
 
Аватар для ZePr
 
Регистрация: 02.07.2010
Сообщений: 40
По умолчанию

И это если на простом примере, но смысл тот же
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    procedure FormClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClick(Sender: TObject);
begin
PopupMenu1 := TPopupMenu.Create(Self);
with PopUpMenu1.Items do
begin
Add(NewItem('First Menu', 0, False, True, showmessage('1'), 0, 'MenuItem1'));
end;

end;

end.
Код:
[Error] Unit1.pas(31): Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer or untyped parameter'
ZePr вне форума Ответить с цитированием
Старый 30.01.2011, 10:07   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Этот кусок кода не говорит о том где ошибка.
приводи полностью, а еще лучше весь проект в архив и сюда.

Так. Все понятно. Ты кое чего перепутал. Туда в параметры нужно указать обработчик событий а не действия. Это не JS, так что действовать нужно
так:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    Procedure OnClick(Sender:TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
with PopUpMenu1.Items do
begin
Add(NewItem('First Menu', 0, False, True,OnClick , 0, 'MenuItem1'));
end;

end;

procedure TForm1.OnClick(Sender: TObject);
begin
 showmessage('1')
end;

end.
Обязательное я выделил пожирнее.
I'm learning to live...

Последний раз редактировалось Stilet; 30.01.2011 в 10:10.
Stilet вне форума Ответить с цитированием
Старый 30.01.2011, 10:10   #4
ZePr
Пользователь
 
Аватар для ZePr
 
Регистрация: 02.07.2010
Сообщений: 40
По умолчанию

Ну вот второй пример полностью написан, смысл тот же

Ну для второго примера это конечно сойдёт, но вот если пункты Popup меню создаются динамически и не известно на какой "тыкнет" пользователь, нужно знать на какой пункт произошло нажатие и после этого выполнить процедуру...

Вот тут к чему то пришли, но я так и не понял к чему

Последний раз редактировалось Stilet; 30.01.2011 в 11:39.
ZePr вне форума Ответить с цитированием
Старый 30.01.2011, 11:41   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и не известно на какой "тыкнет" пользователь
Известно
Код:
procedure TForm1.OnClick(Sender: TObject);
begin
 TMenuItem(Sender). - дает тот пункт на который кликнул пользователь
 showmessage('1')
end;
понятно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2011, 11:52   #6
ZePr
Пользователь
 
Аватар для ZePr
 
Регистрация: 02.07.2010
Сообщений: 40
По умолчанию

Вот к примеру если он кликнул на первый пункт(ну или название), как TMenuItem(Sender) это скажет?

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

Цитата:
как TMenuItem(Sender) это скажет?
Тады Sender будет равен первому пункту. И скажем TMenuItem(Sender).Caption даст текст этого пункта.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2011, 12:21   #8
ZePr
Пользователь
 
Аватар для ZePr
 
Регистрация: 02.07.2010
Сообщений: 40
По умолчанию

Кажется что я реализую дальше что я хотел, спасибо Виталий за помощь, просто, понятно и без понтов !

А как узнать номер пункта?

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

Дык это... Хелп то на что:
Читай про TMenuItem.MenuIndex
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2011, 18:41   #10
ZePr
Пользователь
 
Аватар для ZePr
 
Регистрация: 02.07.2010
Сообщений: 40
По умолчанию

[Error] Unit1.pas(308): Method identifier expected
ZePr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск файлов с параметром из Excel xamillion Microsoft Office Excel 10 17.09.2015 21:47
Запуск с параметром AnKor94 Общие вопросы Delphi 1 09.01.2011 16:25
Total Cmd - запуск проги с параметром - ? Олвин Софт 1 10.03.2010 12:10
[Delphi]Запуск из cmd с определнным параметром zotox Помощь студентам 2 29.08.2009 06:46
запуск с параметром... prizrak1390 Общие вопросы Delphi 4 16.05.2008 22:29