![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
при нажатии кнопки F2 нажималась button1 [D7, WinXP]
АндрейК © (2007-08-22 07:54:00)Здравствуйте господа! Подскажите, пожалуйста такую вещь! Есть форма, на ней всякие label, edit, button и т.д. Как и где написать, что бы при нажатии кнопки F2 нажималась button1, НО при этом не важно, где находится курсор, на Edit1, edit2 или на кнопке?
Leonid Troyanovsky (2007-08-23 15:25:00) [1]
> Игорь Шевченко © (23.08.07 15:17) [31]
> Собственно Windows кроме как эти сообщения больше ничего
> и не умеет обрабатывать
Вот пусть и обрабатывает, нам-то лучше что-нибудь типа
OnShortCut, OnExecute, или, на худой конец WM_COMMAND.
--
Regards, LVT.
Игорь Шевченко (2007-08-23 15:17:00) [2]
> В любом случае, собс-ручная обработка WM_KEY* - извращение,
>
> особенно, для комбинаций клавиш.
Собственно Windows кроме как эти сообщения больше ничего и не умеет обрабатывать :) Плюс еще WM_CHAR и WM_SYSKEY*, WM_SYSCHAR
Leonid Troyanovsky (2007-08-23 14:41:00) [3]
> {RASkov} © (23.08.07 14:20) [29]
Я просто к тому, что обработка горячих клавиш - не такая простая вещь.
В win32 оно, вообще, решается путем TranslateAccelerator.
В любом случае, собс-ручная обработка WM_KEY* - извращение,
особенно, для комбинаций клавиш.
--
Regards, LVT.
{RASkov} (2007-08-23 14:20:00) [4]> [28] Leonid Troyanovsky © (23.08.07 14:14)
> А я внимательно читал, про "некотрые" - не согласен.
В конкретном случае, спорить не буду... соглашусь.... но все зависит от задачи в целом....
Меня, например, устроит вариант [1] если у меня на форме одна кнопка(и она единственный контрол на форме) при нажатии на которую выводится сообщение "Hello World" - (Утрировано). :) Вариант [18] - нормальный вариант. Вполне подходит как ответ на вопрос автора.
Только в [18] нужно обратить внимание на [5] - это для автора вопроса :)
Leonid Troyanovsky (2007-08-23 14:14:00) [5]
> {RASkov} © (23.08.07 13:58) [22]
> ЗЫ Я не оспариваю использование TAction, если внимательно
> прочитать [15].
А я внимательно читал, про "некотрые" - не согласен.
В данном случае - особенно.
--
Regards, LVT.
{RASkov} (2007-08-23 14:12:00) [6]Т.е. ответ на:
> ну и толку? Всё равно click вызовет button1Click( Sender)
не Sender, а Self.... т.е. кнопка будет в Сендере...
{RASkov} (2007-08-23 14:10:00) [7]> [25] Leonid Troyanovsky © (23.08.07 14:04)
Я про метод Click у TButton'а.... тот который inherited у него
procedure TControl.Click;
begin
if Assigned(FOnClick) and (Action <> nil) and (@FOnClick <> @Action.OnExecute) then
FOnClick(Self)
else if not (csDesigning in ComponentState) and (ActionLink <> nil) then
ActionLink.Execute(Self)
else if Assigned(FOnClick) then
FOnClick(Self);
end;
Leonid Troyanovsky (2007-08-23 14:04:00) [8]
> {RASkov} © (23.08.07 14:02) [24]
> Self и Sender вещи разные...
На вкус и цвет фломастеры разные? :)
Только не Self - у нас метод формы, а не кнопки.
--
Regards, LVT.
{RASkov} (2007-08-23 14:02:00) [9]> [23] wp2 © (23.08.07 14:01)
Self и Sender вещи разные...
wp2 (2007-08-23 14:01:00) [10]>Отнюдь не Sender, RTFM.
ну или что нибудь другое. А почему не Сендер?
{RASkov} (2007-08-23 13:58:00) [11]> [18, 20] Leonid Troyanovsky © (23.08.07 13:49)
:)
Согласен.... Можно даже и не назначать у буттона1 свойство Action....(т.е. в конкретном случае).
Можно у Экшена вообще использовать только метод Update, но это не относится к данному вопросу.
:о)
ЗЫ Я не оспариваю использование TAction, если внимательно прочитать [15].
Leonid Troyanovsky (2007-08-23 13:57:00) [12]
> wp2 © (23.08.07 11:23) [11]
> ну и толку? Всё равно click вызовет button1Click(Sender)
Отнюдь не Sender, RTFM.
--
Regards, LVT.
Leonid Troyanovsky (2007-08-23 13:53:00) [13]
> {RASkov} © (23.08.07 13:35) [15]
> .... например, не нужен метод Update, то, имхо, лучше -
> [1].
Action обработается до KeyDown.
Особенно удобно, если горячая клавиша есть комбинация.
--
Regards, LVT.
{RASkov} (2007-08-23 13:50:00) [14]> [17] wp2 © (23.08.07 13:48)
Если есть метод у класса, то почему бы им не воспользоваться, нежели потом следить за кодом и если что - править
?
Leonid Troyanovsky (2007-08-23 13:49:00) [15]
> {RASkov} © (23.08.07 13:35) [15]
> а потом только это действие присваивать контролам(в свойстве
В нашем случае все проще:
procedure TForm1.Action1Execute(Sender: TObject); // OnExecute
begin
Button1.Click;
end;
--
Regards, LVT.
wp2 (2007-08-23 13:48:00) [16]да ладно, это маловероятно.
Virgo_Style (2007-08-23 13:38:00) [17]wp2 © (23.08.07 11:23) [11]
..., ведь сэкономленное время так пригодится вам в случае смены обработчика или его переименования.
{RASkov} (2007-08-23 13:35:00) [18]> не надо будет извращаться....
... над одним, нужно будет над другим. :)
Но я так же склоняюсь, что во многих случаях TAction это нормальный подход к задаче.
В некоторых случаях достаточно варианта [1], а в некоторых лучше [12]-TAction...
Конкретно в данном случае(помимо других преимуществ TAction), мы еще имеем [5] (ShortCut - F2)...
Но если эта кнопка и ее код выполняется только при нажатии данной кнопки и не требуется еще каких либо дополнительных действий и оно не влияет на дальнейшую работу программы .... например, не нужен метод Update, то, имхо, лучше - [1].
> [13] wp2 © (23.08.07 11:36)
> в смысле?
Можно создать одно единственное действие, описав его обработчики Execute и Update(основные), назначить необходимые свойства, а потом только это действие присваивать контролам(в свойстве Action), которые позволяют работать с Экшенами и забыть об их реализации функционала, так как теперь за всем этим рулит TAction.....
iXT (2007-08-23 11:43:00) [19]> [13] wp2 © (23.08.07 11:36)
В смысле, не надо будет извращаться :)
wp2 (2007-08-23 11:36:00) [20]в смысле?