Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.053 c