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

Вниз

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

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

Наверх





Память: 0.5 MB
Время: 0.043 c
14-1086374847
SergP
2004-06-04 22:47
2004.06.20
Есть ли готовая игруха типа преферанса, но сетевая?


9-1077688523
Rasp
2004-02-25 08:55
2004.06.20
Как прокрутить изображение экрана за игроком?????????


3-1085489342
Reostat
2004-05-25 16:49
2004.06.20
База и программа на разных машинах.


8-1081337837
dimon_programmer
2004-04-07 15:37
2004.06.20
Обработка битмапов


14-1086169762
t100
2004-06-02 13:49
2004.06.20
Автоматизация почты





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский