Текущий архив: 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.52 MB
Время: 0.05 c