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

Вниз

Что лучше для обработки нажатий на пункты меню?   Найти похожие ветки 

 
31512 ©   (2004-06-02 10:41) [0]

Вариант первый

procedure TSomeForm.N1Click(Sender: TObject);
begin
Делай раз
end;

procedure TSomeForm.N2Click(Sender: TObject);
begin
Делай два
end;

procedure TSomeForm.N3Click(Sender: TObject);
begin
Делай три
end;

.
.
.


Вариант второй


type
 TSomeForm = class(TForm)
   N1: TMenuItem;
   N2: TMenuItem;
   N3: TMenuItem;
    .
    .
    .
   procedure MenuItemClick(Sender: TObject);//Общая процедура для обработки нажатия на любое меню.
    .
    .
    .
 end;
    .
    .
    .
procedure TSomeForm.MenuItemClick(Sender: TObject);
begin
if (Sender as TMenuItem).Name = "N1" then Делай раз;
if (Sender as TMenuItem).Name = "N2" then Делай два;
if (Sender as TMenuItem).Name = "N3" then Делай три;
    .
    .
    .
end;


Есть, конечно, и другие варианты. А может подскажите наиоптимальнейший вариант?


 
Гаврила ©   (2004-06-02 12:22) [1]

Если процедуры "делай(N)" почти одинаковы, то вариант 2,
Если совсем ничего общего, то вариант 1


 
31512 ©   (2004-06-02 12:33) [2]


> Гаврила ©   (02.06.04 12:22) [1]

А ещё варианты какие есть? Самый оптимальный какой?


 
Плохиш   (2004-06-02 12:37) [3]

if Sender = N1 then Делай раз;
if Sender = N2 then Делай два;
if Sender = N3 then Делай три;

Чё вы извращаетесь?


 
Тимохов ©   (2004-06-02 12:37) [4]


> Самый оптимальный какой?

вы критерий оптимальности сначала нам расскажите, тогда будем думать...


 
Gero ©   (2004-06-02 12:53) [5]


> Плохиш   (02.06.04 12:37)
> if Sender = N1 then Делай раз;
> if Sender = N2 then Делай два;
> if Sender = N3 then Делай три;

if Sender = N1 then Делай раз
else if Sender = N2 then Делай два
else if Sender = N3 then Делай три;

Меньше проверок. Кроме того Sender в процедере Делай Раз может имениться, и выполнится еще и Делай два.


 
Игорь Шевченко ©   (2004-06-02 12:54) [6]


> Что лучше для обработки нажатий на пункты меню?


>
> procedure TSomeForm.N1Click(Sender: TObject);
> begin
> Делай раз
> end;
>
> procedure TSomeForm.N2Click(Sender: TObject);
> begin
> Делай два
> end;
>
> procedure TSomeForm.N3Click(Sender: TObject);
> begin
> Делай три
> end;


Это лучше.


 
31512 ©   (2004-06-02 12:55) [7]


> Тимохов ©   (02.06.04 12:37) [4

Ну критерии, я полагал, всем известны: наибольшая скорость, наименьший размер кода и ехе, наибольшая гибкость ну и так далее.


 
Gero ©   (2004-06-02 12:55) [8]


Игорь Шевченко ©   (02.06.04 12:54)
> Это лучше.

Чем?


 
Романов Р.В. ©   (2004-06-02 12:58) [9]

Лучше создать action и прицепить его к пункту меню.


 
Игорь Шевченко ©   (2004-06-02 12:58) [10]

Gero ©   (02.06.04 12:55)


> Чем?


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


 
31512 ©   (2004-06-02 12:58) [11]


> Игорь Шевченко ©   (02.06.04 12:54) [6]

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


 
Gero ©   (2004-06-02 13:01) [12]


> Игорь Шевченко ©   (02.06.04 12:58)

Тогда лучше [9].
Максимальная ясность и удобность.


 
31512 ©   (2004-06-02 13:02) [13]


> Игорь Шевченко ©   (02.06.04 12:58) [10]

С ясностью всё понятно и безусловно бесспорно, но меня интерисует результат после компиляции. Что оптимальнее? Что скомпилируется в более экономичный и быстрый ехе?
Допустим, я веду тщательную документацию - взамен ясности самоего кода...


 
Игорь Шевченко ©   (2004-06-02 13:04) [14]


> Допустим, я веду тщательную документацию - взамен ясности
> самоего кода...


В печку такой подход.


> Что скомпилируется в более экономичный и быстрый ехе?


Экономичность и скорость - антонимы. Скорость будет быстрее, разумеется, в первом варианте (в том, про который я сказал, что он лучше). Объем может быть незначительно меньше во втором варианте.


 
31512 ©   (2004-06-02 13:15) [15]


> Игорь Шевченко ©   (02.06.04 13:04) [14]

Хе! Насчёт печки согласен полностью. Но документацию вести всё равно придётся - заставляют. А что можно сказать про

> Романов Р.В. ©   (02.06.04 12:58) [9]
> Лучше создать action и прицепить его к пункту меню.

Как в этом случае объём/скорость себя проявят?


 
Anatoly Podgoretsky ©   (2004-06-02 13:21) [16]

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


 
31512 ©   (2004-06-02 13:24) [17]


> Anatoly Podgoretsky ©   (02.06.04 13:21) [16]


> про теорию отимальности

не плохо бы некоторые ссылки получить, пожалуйста. Ну или хотя бы авторов порекомендуй.


 
Романов Р.В. ©   (2004-06-02 13:24) [18]

Какая может быть скорость в реализации обработчика нажатия на пункт меню? Вы его сто тысяч раз в секунду собираетесь вызывать?
И на размер это практически не повлияет. Ну получится приложение на 0,001% больше или меньше. И ради этого можно пожертвовать ясностью кода?

Не там ищите выгоду © Реклама


 
blackman ©   (2004-06-02 13:29) [19]

>Что скомпилируется в более экономичный и быстрый ехе?
Если учесть, что вход в процедуру уже затраты, то коньячно Вариант второй. Однако, что такое эти затраты по сравнению с самим кликом ? Пока не кликнет, прога стоит :-)


 
Тимохов ©   (2004-06-02 13:34) [20]


> Кроме того ты про теорию отимальности ни чего не знаешь,
> оптимизировать можно только по однму показателю.

оптимизация оптимизация рознь.
есть еще оптимальные пареттно - как раз, когда идет оптимизация по нескольким критериям.

> не плохо бы некоторые ссылки получить, пожалуйста. Ну или
> хотя бы авторов порекомендуй.

Теорий оптимальностей до фига - конечномерные, бесконечно мерные, дискретные, непрерывные.

Про оптимизация (в основном выпуклую) есть хорошая книга, Сухарев, Тимохов, Федоров "Курс методов оптимизации". Правда только в библиотеке ее найдешь.


 
Anatoly Podgoretsky ©   (2004-06-02 13:39) [21]

blackman ©   (02.06.04 13:29) [19]
Какая разница сколько процедур, если протип одинаковый, то затраты одинаковые.


 
31512 ©   (2004-06-02 13:41) [22]


> Тимохов ©   (02.06.04 13:34) [20]

Записал



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

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

Наверх




Память: 0.52 MB
Время: 0.036 c
3-1085643687
BolikDimon
2004-05-27 11:41
2004.06.20
Вопрос по TDBGrid


4-1084627743
VeTaL_Programmer
2004-05-15 17:29
2004.06.20
Запись в реестр бинарного значения


1-1086497860
SkyRanger
2004-06-06 08:57
2004.06.20
Списки Delphi


14-1086092997
Vit@ly
2004-06-01 16:29
2004.06.20
Задака - подкинул на mcsa в курилку, до сих пор решают


1-1086435011
Walkie Talkie
2004-06-05 15:30
2004.06.20
Количество прочитанных байт