Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.29;
Скачать: CL | DM;

Вниз

TNotifyEvent;   Найти похожие ветки 

 
АБВ   (2009-02-05 12:20) [0]

Здравствуйте. Подскажите как к переменной Event типа TNotifyEvent, присвоить процедуру. Пробовал делать так:

procedure EventAction;
begin
 ShowMessage("TEST");
end;

var
 Event : TNotifyEvent;
begin
 Event := EventAction;
end;

не вышло .. подскажите как правильно это реализовать ?


 
Ega23 ©   (2009-02-05 12:22) [1]

type
 TNotifyEvent = procedure (Sender : TObject) of object;


 
АБВ   (2009-02-05 12:26) [2]

Понял, спасибо =)


 
АБВ   (2009-02-05 13:01) [3]

Мастера подскажите плз. Заполнил меню PopupMenu множеством элементов у которых одна общая процедура для отработки. Как в процедуре можно узнать из какого пункта меню была она вызвана.

Заполняю меню так:

var
 Event : TNotifyEvent;
begin
 Event := EventAction;
 N48.Add(NewItem(LogText, 0, False, True, Event, 0, "MenuItem1"));
end;

procedure EventAction(Sender: TObject);
begin
ShowMessage("TEST");
end;


 
Плохиш ©   (2009-02-05 13:09) [4]


> procedure EventAction(Sender: TObject);
>

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


 
Ega23 ©   (2009-02-05 13:15) [5]


> Воспользуйся англо-русским словарём для перевода выделенного
> слова, раз уж в хелп заглянуть западло.


Тут не всё так просто. В данной ситуации в качестве Sender может TMenuItem придти. А может и TCustomAction.


 
Плохиш ©   (2009-02-05 13:22) [6]


> Ega23 ©   (05.02.09 13:15) [5]

Судя по [3], не может.


 
clickmaker ©   (2009-02-05 13:25) [7]

может
function NewItem(...)
...
 Result.Action.OnExecute := Event;


 
Плохиш ©   (2009-02-05 13:32) [8]


> clickmaker ©   (05.02.09 13:25) [7]
>
>

Хм, bds2006

function NewItem(const ACaption: string; AShortCut: TShortCut;
 AChecked, AEnabled: Boolean; AOnClick: TNotifyEvent; hCtx: THelpContext;
 const AName: string): TMenuItem;
begin
 Result := TMenuItem.Create(nil);
 with Result do
 begin
   Caption := ACaption;
   ShortCut := AShortCut;
   OnClick := AOnClick;
   HelpContext := hCtx;
   Checked := AChecked;
   Enabled := AEnabled;
   Name := AName;
 end;
end;

А в твоей версии AV будет :-P


 
АБВ   (2009-02-05 13:43) [9]

а мне как быть, подскажите плз =(


 
Плохиш ©   (2009-02-05 13:44) [10]


> АБВ   (05.02.09 13:43) [9]
>
> а мне как быть, подскажите плз

Тяжёлый случай, я тебе помочь не смогу, а пас...


 
Ega23 ©   (2009-02-05 13:45) [11]


> а мне как быть, подскажите плз =(


Чего надо-то?  :)
Изложи сюда свою задачу - авось чего и придумаем...


 
Плохиш ©   (2009-02-05 13:48) [12]


> Ega23 ©   (05.02.09 13:45) [11]
>
>

Ты чего над маленькими издеваешься? Он же в [3] сказал, что надо.


 
АБВ   (2009-02-05 13:52) [13]

Список элементов в меню заполняется автоматически. Все они вызывают одну процедуру. При отработке этой процедуры у меня должно появится окошко что то вроде "процедура вызвана меню: N72" Это лишь пример, на самом деле по имени меню я бы мог выполнять необходимые действия для каждого элемента меню индивидуально.


 
Плохиш ©   (2009-02-05 13:57) [14]


> АБВ   (05.02.09 13:52) [13]

Ещё раз попробую.

Выполнил рекомендацию из [4]?
В хелпе читал?


 
АБВ   (2009-02-05 14:01) [15]


> Выполнил рекомендацию из [4]?
> В хелпе читал?


перевел и читал. Только не пойму как мне Sender может дать нужную инфу.


 
clickmaker ©   (2009-02-05 14:04) [16]

> А в твоей версии AV будет :-P

не будет
function NewItem
...
 Result.Action := TAction.Create

o)


 
clickmaker ©   (2009-02-05 14:08) [17]

> как мне Sender может дать нужную инфу

сендер - это объект
у объекта есть свойства


 
АБВ   (2009-02-05 14:09) [18]


> сендер - это объект
> у объекта есть свойства


понял, спасибо))))) ох уж и чайник же я.

ShowMessage(TMenuItem(Sender).Caption);


 
Ega23 ©   (2009-02-05 14:21) [19]

ShowMessage(TMenuItem(Sender).Caption);


Обрати внимание на [5]. Если ты вдруг пункту меню назначишь Action, то в качестве Sender тебе придёт объект класса TAction, а не объект класса TMenuItem.
Если ты действительно никогда не будешь заморачиваться с экшенами, то данное приведение TMenuItem(Sender) у тебя всегда будет работать.
Если же части MenuItem ты назначишь прямой обработчик, а части - Action, то тогда получишь "бардак и коррупцию" (с) ДМБ.

Я года 3 назад аккурат с этим делом накололся.


 
Anatoly Podgoretsky ©   (2009-02-05 14:22) [20]

> АБВ  (05.02.2009 14:01:15)  [15]

Потому что Sender это TObject от него наследуются все остальные.


 
Плохиш ©   (2009-02-05 15:19) [21]


> АБВ   (05.02.09 14:09) [18]
>
>

Перед приведением типа, стоит проверить допустимость такого приведения. Читай справку про оператор is.


 
KSergey ©   (2009-02-05 16:42) [22]

> Плохиш ©   (05.02.09 15:19) [21]
> Читай справку про оператор is.

или as - тоже не плохо, хотя бы вместо всегдашнего безусловного приведения


 
Ega23 ©   (2009-02-05 16:45) [23]


> или as - тоже не плохо, хотя бы вместо всегдашнего безусловного
> приведения


А чё as? Внутре тупо проверка на is и в случае успеха - безусловное приведение.


 
Anatoly Podgoretsky ©   (2009-02-05 16:50) [24]

> Ega23  (05.02.2009 16:45:23)  [23]

А в случае неуспеха громкое исключение и автора вызываем из отпуска для исправления программы.


 
Ega23 ©   (2009-02-05 16:52) [25]


> А в случае неуспеха громкое исключение и автора вызываем
> из отпуска для исправления программы.


Угумс. Я вообще не понимаю нужность as, кроме случая приведения к интерфейсам.
Ну если только логика на эксепшенах не построена...  :)

а так
if (Sender is Что-то) then
 Что-то(Sender). .....



Страницы: 1 вся ветка

Текущий архив: 2009.03.29;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.018 c
6-1201628955
Lamer666
2008-01-29 20:49
2009.03.29
Возможно ли использоватьOpera в место TWebBrowser?


6-1200923091
Maloj2007
2008-01-21 16:44
2009.03.29
Передача пакетов между IdTCPCllient и IdTCPServer


2-1233870991
НосокСудьбы
2009-02-06 00:56
2009.03.29
Как правильно реализовать...


3-1217236001
JanMihail
2008-07-28 13:06
2009.03.29
Создание отчета в Delphi???


15-1233095106
паровоз
2009-01-28 01:25
2009.03.29
Применим ли инструмент View CPU для отладки сторонних ехе-шников