![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Добавление нового пункта в pop-up меню [D5, XP]
DJ Kondakov © (2008-04-25 12:12:00)Подскажите, каким образом можно добавить пункт в меню? Функция ADD предполагает наличие уже готового пункта.
Anatoly Podgoretsky (2008-04-28 13:18:00) [21]> DJ Kondakov (28.04.2008 13:12:29) [29]
А если вернуться назад, в начало начал?
DJ Kondakov (2008-04-28 13:12:00) [22]Проблема в том, что я начинал изучение Дельфи не с основ ООП, а сразу с компонентов и процедур. Поэтому мне сейчас сложновато понять, что такое "метод формы"
Kolan (2008-04-28 13:10:00) [23]> у меня Дельфи английский
Да, сочувствую :)
Palladin (2008-04-28 13:05:00) [24]ууу... молкаю...
DJ Kondakov (2008-04-28 13:04:00) [25]Как создать метод формы?
Palladin (2008-04-28 13:03:00) [26]создать метод формы и в методе формы вызывать процедуру из dll
DJ Kondakov (2008-04-28 13:01:00) [27]Е-мое, у меня Дельфи английский, я в инглише почти ничего (почти!) не смыслю. Объясните мне, дураку, как сделать, чтобы при нажатии на динамически созданный пункт меню выполнялась процедура из DLL-модуля!
Palladin (2008-04-28 12:55:00) [28]свойство TMenuItem.OnClick, как ты видишь из справки (я надеюсь, что ты в нее заглядываешь), имеет тип TNotifyEvent, тип TNotifyEvent в свою очередь означает Procedure (Sender:TObject) of Object, где для тебя новое это of Object, про которое ты конечно так и не почитал, так вот, приставка of Object, означает, что эта процедура не просто так сама по себе процедура, она метод конкретного объекта
DJ Kondakov (2008-04-28 12:51:00) [29]То есть я сейчас должен описать эту самую MainProc так:
type
MainProc = procedure of object;
{RASkov} (2008-04-28 11:38:00) [30]> [19] DJ Kondakov (28.04.08 11:26)
> > Сделать процедуру - методом.
>
> Поподробнее, пожалуйста...
Такое не рассказывают... Это нужно знать...
Процедура "внутри" класса - метод. А просто процедура в программе - регулярная называется.
т.е.
RegProc = procedure;
MetodProc = procedure of Object;
Palladin (2008-04-28 11:38:00) [31]of object + F1
DJ Kondakov (2008-04-28 11:26:00) [32]
> Сделать процедуру - методом.
Поподробнее, пожалуйста...
Leonid Troyanovsky (2008-04-28 10:57:00) [33]
> DJ Kondakov (28.04.08 06:33) [16]
> mainproc - это процедура, адрес которой получаю из DLL-ки.
> Возникает ошибка компиляции Incompatible types: method
> pointer and regular procedure.
> Что делать?
Не передавать адреса методов из библиотеки.
Хотя, есть более радикальный способ - разместить весь
код в экзешнике, т.е., отказаться от оной длл.
--
Regards, LVT.
Ega23 (2008-04-28 09:40:00) [34]Сделать процедуру - методом.
DJ Kondakov (2008-04-28 06:33:00) [35]А вот новая проблема: пишу
var
mainproc:procedure;
begin
...
onClick:=mainproc;
...
mainproc - это процедура, адрес которой получаю из DLL-ки. Возникает ошибка компиляции Incompatible types: method pointer and regular procedure.
Что делать?
ANB (2008-04-25 15:23:00) [36]
> {RASkov} © (25.04.08 12:33) [12]
Да и с первого раза понятно было :)
Хотя и переменная ничем не мешает.
ZENsan (2008-04-25 13:10:00) [37]Да.. на самом деле.. если захотеть можно в космос полететь.. :)
{RASkov} (2008-04-25 12:35:00) [38]
procedure TForm1.Button1Click(Sender: TObject);
begin
PopupMenu1.Items.Add(TMenuItem.Create(PopupMenu1));
with PopupMenu1.Items[PopupMenu1.Items.Count-1] do begin
Caption:='Item '+IntToStr(PopupMenu1.Items.Count);
OnClick:=Button1Click;
end;
end;
{RASkov} (2008-04-25 12:33:00) [39]> [8] ANB (25.04.08 12:17)
> Хотя не. Не получится совсем без переменной.
begin
PopupMenu1.Items.Add(TMenuItem.Create(PopupMenu1));
with PopupMenu1.Items[PopupMenu1.Items.Count-1] do begin
Caption:='asdasdas';
OnClick:=хххххх;
end;
end;
:)
Ega23 (2008-04-25 12:29:00) [40]
var
NewItem: TMenuItem;
I : integer;
begin
{ first create the separator }
NewItem := TMenuItem.Create(Self);
NewItem.Caption := '-';
{ add the new item to the Windows menu }
Windows.Add(NewItem);
{ now create and add a menu item for each form }
for I := 0 to Screen.FormCount-1 do
begin
NewItem := TMenuItem.Create(Self);
NewItem.Caption := Screen.Forms[I].Name;
Windows.Add(NewItem);
end;
end;