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

Вниз

Один код к разным событиям   Найти похожие ветки 

 
B1en   (2006-12-05 20:14) [0]

Привет!! У меня в программе должно выполняться одно и тоже действие при выборе пункта меню и при нажатии на функциональную клавишу.
Можно ли сделать что-то чтобы код не дублировать!


 
Kolan ©   (2006-12-05 20:17) [1]

Вызвать одну и туже функцию?


 
B1en   (2006-12-05 20:24) [2]

Есть два обработчика событий, у которых один и тот же код, можно ли для этиих событий написать код один раз не дублируя его!


 
Dmitrij_K   (2006-12-05 20:32) [3]

Удали один обработчик, например пункта меню
открой окно со списком событий пункта меню, в поле OnClick выбери существующее событие из списка


 
Kolan ©   (2006-12-05 20:35) [4]

> [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.


 
Kolan ©   (2006-12-05 20:36) [5]

> Удали один обработчик, например пункта меню
> открой окно со списком событий пункта меню, в поле OnClick
> выбери существующее событие из списка

Да, чегойто я, правильно.


 
Loginov Dmitry ©   (2006-12-05 20:40) [6]

ActionList


 
Barloggg   (2006-12-06 10:56) [7]

а я еще круче замесил.
у меня вообще все 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");

кстати видно как некоторые кнопки вызывают одни и теже обработчики. Просто из разных группбоксов вызываются.

правда затраты большие при каждом клике получаются, но это же не шутер, да и процы у нас пламенные теперь.


 
Dmitrij_K   (2006-12-06 10:59) [8]


> правда затраты большие при каждом клике получаются

На несколько десятков тактов
:)
Лишнюю миллисекунду работает


 
Barloggg   (2006-12-06 11:06) [9]

если не сотен, ибо у меня списки уже на полтинник объектов существуют :)
ну да это не важно для большинства программ.
Зато как сказочно текст читается, особенно если его еще и отсортировать. правда двойным кликом теперь прямо в обработчик не попадешь, но это побочный эффект.


 
Anatoly Podgoretsky ©   (2006-12-06 11:11) [10]

> Barloggg  (06.12.2006 10:56:07)  [7]

Да круто получается :-)
Это же надо до такого додуматься.


 
Anatoly Podgoretsky ©   (2006-12-06 11:11) [11]

> Barloggg  (06.12.2006 11:06:09)  [9]

И ты еще жив?
И почему это двойным кликом не попадешь?


 
Barloggg   (2006-12-06 11:17) [12]

потому что двоной клик приведет меня к этому списку. а в нем предстоит еще найти уже ручками нужный обработчик и кликнуть с ctrl и попасть в другую процедуру, а к случае скажем showform("CheckForMenuEnabled"); я попаду в процедуру где еще предстоит найти нужный кусок.

Я считаю такой подход жизненной необходимостью когда число кнопочек, галочек, и всякой подобной фигни зашкаливает за пару сотен и все долны как-то реагировать.
вот у меня есть файл формы без вложенных в нее картинок размером почти мегабайт. Там такая куча контролов, просто обалдеть. а процедура всего одна. этот самый "общий обработчик" который сразу же отсылает в другой модуль.


 
Anatoly Podgoretsky ©   (2006-12-06 11:24) [13]

> Barloggg  (06.12.2006 11:17:12)  [12]

Обалдеть


 
Loginov Dmitry ©   (2006-12-06 16:03) [14]

> когда число
> кнопочек, галочек, и всякой подобной фигни зашкаливает за
> пару сотен


Выкинь такую прогу. Shift+Delete тебе поможет.



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

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

Наверх




Память: 0.5 MB
Время: 0.049 c
2-1165417135
alexa14
2006-12-06 17:58
2006.12.24
Значки в popupmenu


2-1165090318
sat
2006-12-02 23:11
2006.12.24
списки


2-1165174404
serko
2006-12-03 22:33
2006.12.24
DBCombobox


6-1154871760
MAXHO
2006-08-06 17:42
2006.12.24
Как получить ХТМЛ код страницы?


15-1165248006
oldman
2006-12-04 19:00
2006.12.24
Наши опять взяли Кубок Девиса...