IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Добавление нескольких TMenuItem в PopupMenu (http://www.imho.ws/showthread.php?t=51497)

f00rd 17.02.2004 15:09

Добавление нескольких TMenuItem в PopupMenu
 
Собственно, что требуется:

Меню, назовем его Menu (класса TPopupMenu) должно в программе менятся, т.е. должно уменьшаться/увеличиваться количество Item'ов в этом меню... Пробовал сделать через цикл:
Код:

var
 it: TMenuItem;
 a: array of TMenuItem;
 i: integer;
begin
 SetLength(a, 0);
 for i:=0 to SomeNum do
  begin
  it:=TMenuItem.Create(nil);
  it.Caption:=SomeString;
  SetLength(a, Length(a)+1);
  a[Length(a)-1]:=it;
  it.Free;
  end;
Menu.Items.Add(a);

Но вываливаются ошибки, типа it добавлено два раза...

Как быть?

RaZEr 17.02.2004 15:28

Видимо ты не обнулил it. Попробуй обнулять: it := nil; или добавлять: a[Length(a)-1] := TMenuItem.Create(nil);

f00rd 17.02.2004 15:42

RaZEr
a[Length(a)-1] := TMenuItem.Create(nil) - работает! Огромное спасибо!

--
И еще, как на a[Length(a)-1].OnClick посадить мою функцию?

RaZEr 17.02.2004 16:41

Как всегда. Создаешь процедуру и присваиваешь событию.

f00rd 17.02.2004 16:43

Код:

procedure ItemClick(i:integer);
 begin
  ...
 end;

a[Length(a)-1].OnClick:=ItemClick;

Выдает ошибку о несовместимости типов...

RaZEr 17.02.2004 16:45

Процитируй ошибку.

f00rd 17.02.2004 16:56

Сообщение:

Цитата:

Incompatible types: 'method pointer and regular procedure'
Если же сделать так:
Код:

procedure TForm1.First1Click(Sender: TObject);
begin
 ///
end;

a[Length(a)-1].OnClick:=First1Click;

Где First1Click - событие какой-нибудь кнопки, то я не знаю, как обращаться с Sender'ом...

RaZEr 17.02.2004 17:07

Посмотри как оформляются обработчики событий. В частности OnClick.

Добавлено через 2 минуты:
Цитата:

то я не знаю, как обращаться с Sender'ом
Это ссылка на объект для которого произошло событие. Используй оператор as.

Добавлено через 1 минуту:
PS: Вернее это не ссылка, а сам объект.

f00rd 18.02.2004 11:49

RaZEr
Цитата:

Используй оператор as.
а поподробнее можно?

RaZEr 18.02.2004 14:24

Ну братец. Синтаксис языка не знать. Открываем книжку и читаем. Пример:
Код:

with Sender as TMenuItem do
begin
...
end;


f00rd 18.02.2004 15:54

Цитата:

Ну братец. Синтаксис языка не знать.
Знать-то знаю, только вот запаметовал.... а книжек поблизости нету.....

Сенкс....


Часовой пояс GMT +4, время: 14:34.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.