Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

при нажатии кнопки F2 нажималась button1 [D7, WinXP]


Страницы:   1 2

АндрейК ©   (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]

в смысле?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо