![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Один код к разным событиям
B1en © (2006-12-05 20:14:00)Привет!! У меня в программе должно выполняться одно и тоже действие при выборе пункта меню и при нажатии на функциональную клавишу.
Можно ли сделать что-то чтобы код не дублировать!
Loginov Dmitry (2006-12-06 16:03:00) [1]> когда число
> кнопочек, галочек, и всякой подобной фигни зашкаливает за
> пару сотен
Выкинь такую прогу. Shift+Delete тебе поможет.
Anatoly Podgoretsky (2006-12-06 11:24:00) [2]> Barloggg (06.12.2006 11:17:12) [12]
Обалдеть
Barloggg (2006-12-06 11:17:00) [3]потому что двоной клик приведет меня к этому списку. а в нем предстоит еще найти уже ручками нужный обработчик и кликнуть с ctrl и попасть в другую процедуру, а к случае скажем
showform('CheckForMenuEnabled');я попаду в процедуру где еще предстоит найти нужный кусок.
Я считаю такой подход жизненной необходимостью когда число кнопочек, галочек, и всякой подобной фигни зашкаливает за пару сотен и все долны как-то реагировать.
вот у меня есть файл формы без вложенных в нее картинок размером почти мегабайт. Там такая куча контролов, просто обалдеть. а процедура всего одна. этот самый "общий обработчик" который сразу же отсылает в другой модуль.
Anatoly Podgoretsky (2006-12-06 11:11:00) [4]> Barloggg (06.12.2006 10:56:07) [7]
Да круто получается :-)
Это же надо до такого додуматься.
Anatoly Podgoretsky (2006-12-06 11:11:00) [5]> Barloggg (06.12.2006 11:06:09) [9]
И ты еще жив?
И почему это двойным кликом не попадешь?
Barloggg (2006-12-06 11:06:00) [6]если не сотен, ибо у меня списки уже на полтинник объектов существуют :)
ну да это не важно для большинства программ.
Зато как сказочно текст читается, особенно если его еще и отсортировать. правда двойным кликом теперь прямо в обработчик не попадешь, но это побочный эффект.
Dmitrij_K (2006-12-06 10:59:00) [7]
> правда затраты большие при каждом клике получаются
На несколько десятков тактов
:)
Лишнюю миллисекунду работает
Barloggg (2006-12-06 10:56:00) [8]а я еще круче замесил.
у меня вообще все onClick подходящие по синтаксису собраны в один обработчик который выглядит так
procedure TMainForm.ButtonClick(Sender: TObject);
begin
if sender=N1 then showform('CheckForMenuEnabled');
if sender=N2 then showform('LoadCreateGame');
if sender=N4 then showform('LoadCreateGame');
if sender=N5 then application.Terminate;
if sender=Button2 then bg.createplayer('FromScreen');
if sender=Button3 then hideall;
if sender=Button4 then hideall;
if sender=Button5 then bg.createplayer('FromBase');
кстати видно как некоторые кнопки вызывают одни и теже обработчики. Просто из разных группбоксов вызываются.
правда затраты большие при каждом клике получаются, но это же не шутер, да и процы у нас пламенные теперь.
Loginov Dmitry (2006-12-05 20:40:00) [9]ActionList
Kolan (2006-12-05 20:36:00) [10]> Удали один обработчик, например пункта меню
> открой окно со списком событий пункта меню, в поле OnClick
> выбери существующее событие из списка
Да, чегойто я, правильно.
Kolan (2006-12-05 20:35:00) [11]> [2] B1en (05.12.06 20:24)
> Есть два обработчика событий, у которых один и тот же код,
> можно ли для этиих событий написать код один раз не дублируя
> его!
Да(может можно и подругому..), для этого код выделяется в функцию/процедуру и вызывается.
1 Вариант.
Два обработчика:
procedure TForm3. BitBtn1Click(Sender: TObject);
begin
DoSmth;
end;
procedure TForm3. FormCreate(Sender: TObject);
begin
DoSmth;
end;
Думаю назначить совершенно разным событиям(разного типа с разными параметрами) неполучится а вот одинаковм - да.
2 Вариант(только дяля похожих событий.
TForm3 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
published
procedure MyEvent(Sender: TObject);
end;
А теперь это MyEvent назначеешь прямо через Object Inspector.
Dmitrij_K (2006-12-05 20:32:00) [12]Удали один обработчик, например пункта меню
открой окно со списком событий пункта меню, в поле OnClick выбери существующее событие из списка
B1en (2006-12-05 20:24:00) [13]Есть два обработчика событий, у которых один и тот же код, можно ли для этиих событий написать код один раз не дублируя его!
Kolan (2006-12-05 20:17:00) [14]Вызвать одну и туже функцию?