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

Вниз

при нажатии кнопки F2 нажималась button1   Найти похожие ветки 

 
АндрейК   (2007-08-22 07:54) [0]

Здравствуйте господа! Подскажите, пожалуйста такую вещь! Есть форма, на ней всякие label, edit, button и т.д. Как и где написать, что бы при нажатии кнопки F2 нажималась button1, НО при этом не важно, где находится курсор, на Edit1, edit2 или на кнопке?


 
{RASkov} ©   (2007-08-22 07:57) [1]

У формы:
KeyPreview = True
и в обработчике OnKeyUp
if Key=VK_F2 then button1.Click;


 
Elen ©   (2007-08-22 07:58) [2]

Например выставь форме KeyPreview :=true и пропиши :

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
if key=vk_f2 then Button1.Click;
end;


 
Elen ©   (2007-08-22 07:59) [3]


> {RASkov} ©   (22.08.07 07:57) [1]

Швидкий який )


 
{RASkov} ©   (2007-08-22 08:02) [4]

> [3] Elen ©   (22.08.07 07:59)

;)


 
clickmaker ©   (2007-08-22 09:58) [5]


> при нажатии кнопки F2 нажималась button1

Button.Action + ShortCut как вариант


 
wp2 ©   (2007-08-22 17:12) [6]

>if Key=VK_F2 then button1.Click;
точнее button1.Click(Sender)


 
Плохиш ©   (2007-08-22 17:14) [7]


> wp2 ©   (22.08.07 17:12) [6]
> >if Key=VK_F2 then button1.Click;
> точнее button1.Click(Sender)

Глупости писать не надо бы...


 
wp2 ©   (2007-08-22 22:32) [8]

тьфу, сорри, думал, что напрямую уже вызывается обработчик Button1Click();

По крайней мере я всегда так делал.


 
@!!ex ©   (2007-08-22 22:51) [9]

> [8] wp2 ©   (22.08.07 22:32)

Кстати, да...
ТОже не понял почему Sender не указан... Потом дошло что не обработчик вызывается, а событие..


 
Германн ©   (2007-08-22 23:26) [10]


> @!!ex ©   (22.08.07 22:51) [9]
>
> > [8] wp2 ©   (22.08.07 22:32)
>
> Кстати, да...
> ТОже не понял почему Sender не указан... Потом дошло что
> не обработчик вызывается, а событие..
>

Плохо дошло :)
Вызывается не событие, а метод TButton.Click


 
wp2 ©   (2007-08-23 11:23) [11]

ну и толку? Всё равно click вызовет button1Click(Sender)

экономьте время и пишите оптимизированный код! ;-)


 
Игорь Шевченко ©   (2007-08-23 11:27) [12]

Любите TAction


 
wp2 ©   (2007-08-23 11:36) [13]

в смысле?


 
iXT ©   (2007-08-23 11:43) [14]

> [13] wp2 ©   (23.08.07 11:36)

В смысле, не надо будет извращаться :)


 
{RASkov} ©   (2007-08-23 13:35) [15]

> не надо будет извращаться....

... над одним, нужно будет над другим. :)

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

В некоторых случаях достаточно варианта [1], а в некоторых лучше [12]-TAction...
Конкретно в данном случае(помимо других преимуществ TAction), мы еще имеем [5] (ShortCut - F2)...
Но если эта кнопка и ее код выполняется только при нажатии данной кнопки и не требуется еще каких либо дополнительных действий и оно не влияет на дальнейшую работу программы .... например, не нужен метод Update, то, имхо, лучше - [1].


> [13] wp2 ©   (23.08.07 11:36)
> в смысле?

Можно создать одно единственное действие, описав его обработчики Execute и Update(основные), назначить необходимые свойства, а потом только это действие присваивать контролам(в свойстве Action), которые позволяют работать с Экшенами и забыть об их реализации функционала, так как теперь за всем этим рулит TAction.....


 
Virgo_Style ©   (2007-08-23 13:38) [16]

wp2 ©   (23.08.07 11:23) [11]

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


 
wp2 ©   (2007-08-23 13:48) [17]

да ладно, это маловероятно.


 
Leonid Troyanovsky ©   (2007-08-23 13:49) [18]


> {RASkov} ©   (23.08.07 13:35) [15]

>  а потом только это действие присваивать контролам(в свойстве

В нашем случае все проще:

procedure TForm1.Action1Execute(Sender: TObject); // OnExecute
begin
 Button1.Click;
end;

--
Regards, LVT.


 
{RASkov} ©   (2007-08-23 13:50) [19]

> [17] wp2 ©   (23.08.07 13:48)

Если есть метод у класса, то почему бы им не воспользоваться, нежели потом следить за кодом и если что - править
?


 
Leonid Troyanovsky ©   (2007-08-23 13:53) [20]


> {RASkov} ©   (23.08.07 13:35) [15]

> .... например, не нужен метод Update, то, имхо, лучше -
> [1].

Action обработается до KeyDown.
Особенно удобно, если горячая клавиша есть комбинация.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2007-08-23 13:57) [21]


> wp2 ©   (23.08.07 11:23) [11]

> ну и толку? Всё равно click вызовет button1Click(Sender)

Отнюдь не Sender, RTFM.

--
Regards, LVT.


 
{RASkov} ©   (2007-08-23 13:58) [22]

> [18, 20] Leonid Troyanovsky ©   (23.08.07 13:49)

:)
Согласен.... Можно даже и не назначать у буттона1 свойство Action....(т.е. в конкретном случае).
Можно у Экшена вообще использовать только метод Update, но это не относится к данному вопросу.
:о)
ЗЫ Я не оспариваю использование TAction, если внимательно прочитать [15].


 
wp2 ©   (2007-08-23 14:01) [23]

>Отнюдь не Sender, RTFM.

ну или что нибудь другое. А почему не Сендер?


 
{RASkov} ©   (2007-08-23 14:02) [24]

> [23] wp2 ©   (23.08.07 14:01)

Self и Sender вещи разные...


 
Leonid Troyanovsky ©   (2007-08-23 14:04) [25]


> {RASkov} ©   (23.08.07 14:02) [24]

> Self и Sender вещи разные...

На вкус и цвет фломастеры разные? :)
Только не Self - у нас метод формы, а не кнопки.

--
Regards, LVT.


 
{RASkov} ©   (2007-08-23 14:10) [26]

> [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;


 
{RASkov} ©   (2007-08-23 14:12) [27]

Т.е. ответ на:
> ну и толку? Всё равно click вызовет button1Click(Sender)

не Sender, а Self.... т.е. кнопка будет в Сендере...


 
Leonid Troyanovsky ©   (2007-08-23 14:14) [28]


> {RASkov} ©   (23.08.07 13:58) [22]

> ЗЫ Я не оспариваю использование TAction, если внимательно
> прочитать [15].

А я внимательно читал, про "некотрые" - не согласен.
В данном случае - особенно.

--
Regards, LVT.


 
{RASkov} ©   (2007-08-23 14:20) [29]

> [28] Leonid Troyanovsky ©   (23.08.07 14:14)
> А я внимательно читал, про "некотрые" - не согласен.

В конкретном случае, спорить не буду... соглашусь.... но все зависит от задачи в целом....
Меня, например, устроит вариант [1] если у меня на форме одна кнопка(и она единственный контрол на форме) при нажатии на которую выводится сообщение "Hello World" - (Утрировано). :) Вариант [18] - нормальный вариант. Вполне подходит как ответ на вопрос автора.
Только в [18] нужно обратить внимание на [5] - это для автора вопроса :)


 
Leonid Troyanovsky ©   (2007-08-23 14:41) [30]


> {RASkov} ©   (23.08.07 14:20) [29]

Я просто к тому, что обработка горячих клавиш - не такая простая вещь.
В win32 оно, вообще, решается путем TranslateAccelerator.

В любом случае, собс-ручная обработка WM_KEY* - извращение,
особенно, для комбинаций клавиш.

--
Regards, LVT.


 
Игорь Шевченко ©   (2007-08-23 15:17) [31]


> В любом случае, собс-ручная обработка WM_KEY* - извращение,
>
> особенно, для комбинаций клавиш.


Собственно Windows кроме как эти сообщения больше ничего и не умеет обрабатывать :) Плюс еще WM_CHAR и WM_SYSKEY*, WM_SYSCHAR


 
Leonid Troyanovsky ©   (2007-08-23 15:25) [32]


> Игорь Шевченко ©   (23.08.07 15:17) [31]

> Собственно Windows кроме как эти сообщения больше ничего
> и не умеет обрабатывать

Вот пусть и обрабатывает, нам-то лучше что-нибудь типа
OnShortCut, OnExecute, или, на худой конец WM_COMMAND.

--
Regards, LVT.



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

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

Наверх




Память: 0.54 MB
Время: 0.034 c
15-1187692560
ПЛОВ
2007-08-21 14:36
2007.09.16
Видеохостинг


2-1187701008
Falameezar
2007-08-21 16:56
2007.09.16
Редактор реестра


2-1187707917
Василий
2007-08-21 18:51
2007.09.16
Как отловить JavaScript-событие закрытия окна.


11-1165878940
Turbid
2006-12-12 02:15
2007.09.16
KOL и темы XP


15-1187336496
ProgRAMmer Dimonych
2007-08-17 11:41
2007.09.16
Подкиньте, плз, значки для тем форума