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

Вниз

при нажатии кнопки 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.043 c
3-1179494173
SerMaxx
2007-05-18 17:16
2007.09.16
Работа компонента Table


15-1187553791
wp2
2007-08-20 00:03
2007.09.16
Как загрузить Rich-тест в компонент TRichEdit на этапе проэктир..


15-1185568307
Kostafey
2007-07-28 00:31
2007.09.16
С днем рождения ! 28 июля


3-1179292836
Цукор5
2007-05-16 09:20
2007.09.16
DBF потоках + "упаковка"


15-1187676722
AZIZE
2007-08-21 10:12
2007.09.16
И что из этого выйдет





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