Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Привязование процидуры [D5, D6, Win95/98, WinXP]


Fog ©   (2002-09-20 18:59:00) 

Я создаю TMenuItem во время исполнения, и мне требуется привязать к ней процидуру (чтобы при клике выполнялась) как это сделать?


Старый паскалист   (2002-09-22 17:30:00) [1]

2Fog © (22.09.02 16:59)

Во первых, если у тебя всего два пункта меню, то можно просто
создать два обработчика и не мучаться.

procedure TYourForm.MenuItem1Click(Sender: TObject);
begin
Drugaye(blablabla);
end;

procedure TYourForm.MenuItem2Click(Sender: TObject);
begin
Drugaye(albalbalb);
end;

Все начинающие так обычно и делают.

А во вторых, ты неправильно понимаешь проблему.
Проблема не в том, чтобы "привязать" процедуру, а в том, чтобы
ассоциировать с пунктом меню некоторые данные, в данном случае
albalbalb и blablabla.

Существует много способов сделать это.
Самый простейший из них - использовать св-во Tag, к-рое
специально предназначено для хранения пользовательской информации. В нём можно хранить целое число, указатель на какую-либо ассоциированную с объектом структуру и т.п.

Более правильный путь - написать наследник TMenuItem"a и
добавить в него дополнительные данные.

Существует также WinApi"шные способы асоциации некоторых данных с окном (GetWindowLong/GWL_USERDATA).

Существуют и другие пути - ассоциативные массивы и т.д.


Song   (2002-09-22 17:22:00) [2]

Ну дык и в чём проблема-то? Тебе же сказали: TMenuItem.onClick


Fog   (2002-09-22 16:59:00) [3]

Например у меня создаются 2 TMenuItem"a и у одного должно быть

Drugaya(blablabla);

а у другого

Drugaya(albalbalb);...


Fog   (2002-09-22 16:45:00) [4]


> Старый паскалист

Проц Е дура :)


Старый паскалист   (2002-09-22 16:23:00) [5]

Если уж ты собрался стать программистом,
научись, пожалуйста, правильно писать слово ПРОЦ ЕДУРА
(а то "поцидуры" твои несколько раздражают).


Fog   (2002-09-22 16:14:00) [6]

А если у нового объекта должен быть другой параметр поцидуры?...


Shadow   (2002-09-20 20:43:00) [7]

procedure Drugaye(blabla: string);
begin

end;...

procedure TYourForm.YourProcOnClick(Sender: TObject);
begin
Drugaye(blabla: string);
end;

....
MyTMenuItem.OnClick := YourForm.YourProcOnClick;

Может так?


Fog   (2002-09-20 19:53:00) [8]


> Обычно события имеют тип TNotifyEvent

Это понятно, а как здалать то?...


Внук   (2002-09-20 19:40:00) [9]

События в смысле Delphi (events) - это просто переменные того или иного процедурного типа of object. То есть, нельзя событию назначить произвольную процедуру. Обычно события имеют тип TNotifyEvent, хотя, вообще говоря, могут быть любыми.


Fog   (2002-09-20 19:17:00) [10]

А если мне надо привязать
procedure Drugaye(blabla: string);
begin

end;...


troits   (2002-09-20 19:04:00) [11]

procedure TYourForm.YourProcOnClick(Sender: TObject);
begin
end;

....
MyTMenuItem.OnClick := YourForm.YourProcOnClick;


Наверх

Титульная страница Поиск, карта сайта Написать письмо