Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.039 c
15-1164826853
syte_ser78
2006-11-29 22:00
2006.12.24
Небольшой юбилей


15-1165237556
Рамиль
2006-12-04 16:05
2006.12.24
Альтернатива Enterprise Manager для MS SQL Express


2-1165317382
IgorMish
2006-12-05 14:16
2006.12.24
Процедура сворачивания окна


15-1164891888
Uncle
2006-11-30 16:04
2006.12.24
Компонент Hhopen(справка)


2-1165314415
Stanislav
2006-12-05 13:26
2006.12.24
Динамический массив





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский