![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Привязование процидуры [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;