Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2015, 19:08   #1
subman
Новичок
Джуниор
 
Регистрация: 21.05.2015
Сообщений: 2
По умолчанию Секундомер с тремя горячими клавишами

Здравствуйте.
Задача: реализовать секундомер с тремя горячими клавишами
Q - старт
W - стоп
E - сброс
В итоге W работает, а Q и E нет...
Подскажите, что я делаю не так?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Vcl.ExtCtrls, unit2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit1: TEdit;
    Timer1: TTimer;
    Timer2: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
    procedure FormShortCut1(var Msg1: TWMKey; var Handled1: Boolean);
    procedure FormShortCut2(var Msg2: TWMKey; var Handled2: Boolean);
    procedure Timer1Timer(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
  private
    { Private declarations }
       procedure MyProc;
       procedure MyProc1;
       procedure MyProc2;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Form2: TForm2;
  hour, min, sec: integer;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.MyProc;
begin
  // стоп
  Timer1.Enabled:=False;
end;

procedure TForm1.MyProc1;
begin
  // старт
  Timer1.Enabled:=True;
end;

procedure TForm1.MyProc2;
begin
  // сброс
  Timer1.Enabled:=False;
  hour:=0;
  min:=0;
  sec:=0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
sec:=sec+1;
if sec>=60 then begin
  sec:=0;
  min:=min+1
end;
if min>=60 then begin
  min:=0;
  hour:=hour+1
end;

Edit1.Text:=IntToStr(hour);
Edit2.Text:=IntToStr(min);
Edit3.Text:=IntToStr(sec);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   MyProc1;
end;

procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
 If Msg.CharCode = 87 then  // W - стоп
  begin
     MyProc;
     Handled := True;
  end;
end;

procedure TForm1.FormShortCut1(var Msg1: TWMKey; var Handled1: Boolean);
begin
 If Msg1.CharCode = 81 then  // Q - старт
  begin
     MyProc1;
     Handled1 := True;
  end;
end;

procedure TForm1.FormShortCut2(var Msg2: TWMKey; var Handled2: Boolean);
begin
 If Msg2.CharCode = 69 then  // E - сброс
  begin
     MyProc1;
     Handled2 := True;
  end;
end;

end.
subman вне форума Ответить с цитированием
Старый 13.10.2015, 20:33   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Ни разу с FormShortCut не работал. Но подозреваю, что нужна только одна процедура, а в ней уже нужно проверять нажатия клавиш.
Кстати, сброс не тот
Код:
If Msg2.CharCode = 69 then  // E - сброс
  begin
     MyProc2;
eoln вне форума Ответить с цитированием
Старый 13.10.2015, 20:58   #3
disbnt
Пользователь
 
Регистрация: 18.09.2014
Сообщений: 32
По умолчанию

Решение задания на фрилансе с помощью форума ... прикол.
https://www.fl.ru/projects/2510282/p...kundomera.html

наверное обработчик события установлен на
Код:
procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
а эти 2 лишние удали их
Код:
procedure FormShortCut1(var Msg1: TWMKey; var Handled1: Boolean);
procedure FormShortCut2(var Msg2: TWMKey; var Handled2: Boolean);
напишы так
Код:
procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
 If Msg.CharCode = 87 then  // W - стоп
  begin
     MyProc;
     Handled := True;
  end;

  If Msg.CharCode = 81 then  // Q - старт
  begin
     MyProc1;
     Handled := True;
  end;

  If Msg.CharCode = 69 then  // E - сброс
  begin
     MyProc2;
     Handled := True;
  end;
end;

Последний раз редактировалось disbnt; 13.10.2015 в 21:26.
disbnt вне форума Ответить с цитированием
Старый 14.10.2015, 00:57   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Я чото не понял, а чем OnKeyPress не устраивает?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 14.10.2015, 08:16   #5
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,392
По умолчанию

Цитата:
disbnt Решение задания на фрилансе с помощью форума ... прикол
Раздел фриланс у нас тоже есть на форуме , если у вас нету время или желание разобрать самому .! можете открыть тема на фриланс http://programmersforum.ru/forumdisplay.php?f=29 А если хотите разобрать самому то советую посмотреть в книге Д.Осипов - Delphi XE2 (В подлиннике) - 2012.pdf
Изображения
Тип файла: jpg OnShortCut.jpg (124.8 Кб, 129 просмотров)
Тип файла: jpg OnShortCut_2.jpg (124.7 Кб, 121 просмотров)
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста с горячими клавишами. CrystalDF Общие вопросы Delphi 18 18.02.2015 07:55
Копирование пути к объекту горячими клавишами dubailand Операционные системы общие вопросы 0 30.03.2012 19:21
Как развернуть приложение горячими клавишами cryker Общие вопросы Delphi 4 01.03.2012 18:29
Проблема с горячими клавишами Marsik Общие вопросы Delphi 10 26.02.2010 17:21
Проблема с горячими клавишами InsaniaF Microsoft Office Word 4 21.05.2009 11:37