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