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

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

TNotifyEvent; [D7, XP]


Страницы:   1 2

АБВ ©   (2009-02-05 12:20:00) 

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

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

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

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


Ega23   (2009-02-05 16:52:00) [1]


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


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

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


Anatoly Podgoretsky   (2009-02-05 16:50:00) [2]

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

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


Ega23   (2009-02-05 16:45:00) [3]


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


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


KSergey   (2009-02-05 16:42:00) [4]

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

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


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


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

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


Anatoly Podgoretsky   (2009-02-05 14:22:00) [6]

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

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


Ega23   (2009-02-05 14:21:00) [7]

ShowMessage(TMenuItem(Sender).Caption);


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

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


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


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


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

ShowMessage(TMenuItem(Sender).Caption);


clickmaker   (2009-02-05 14:08:00) [9]

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

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


clickmaker   (2009-02-05 14:04:00) [10]

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

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

o)


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


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


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


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


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

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

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


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

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


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


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

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


Ega23   (2009-02-05 13:45:00) [15]


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


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


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


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

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


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

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


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


> 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


clickmaker   (2009-02-05 13:25:00) [19]

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


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


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

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


Страницы:   1 2

Наверх

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