Форум: "Потрепаться";
Текущий архив: 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.042 c