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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2013, 12:03   #1
Mixer792
Новичок
Джуниор
 
Регистрация: 26.12.2013
Сообщений: 1
По умолчанию [Delphi] 2 Нажатия клавиши

Привет всем! Нужна помощь. Нужно: при первом нажатии кнопки присваивать Label - 'Нажатие 1' при втором 'Нажатие 2', при 3 'Нажатие 1' и т.д
Пробовал так:
PHP код:
If GetKeyState(50) <>0 then
begin
if check=0 then begin check:=1Label1.Caption:='Нажатие 1'end else begin check:=0Label1.Caption:='Нажатие 2'end;
end
(В таймере)

Но после первого нажатия Label меняет значения Нажатие 1-Нажатие 2 даже без нажатия клавиши. После второго нажатия значения меняться перестают.
Кто может помочь исправить код?
Mixer792 вне форума Ответить с цитированием
Старый 26.12.2013, 12:28   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  pr:integer;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  inc(pr);
  if odd(pr) then label1.Caption:='Pressed 1' else label1.Caption:='Pressed 2';
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  pr:=0;
end;

end.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 26.12.2013, 13:56   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,342
По умолчанию

ZX Spectrum-128, вдруг пользователю хватит смелости накликать на переполнение int
При 2 вариантах удобно использовать boolean:
Код:
t: boolean;
...
t := not t;
if t then label1.Caption:='Pressed 1' else label1.Caption:='Pressed 2';
...
t := true;
Если нужно больше вариантов, то брать остаток и по нему выбирать:
Код:
pr := (pr + 1) mod n;
где n - количество нужных вариантов. И в таком случае оформлять не через if, а как массив строк.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 26.12.2013, 14:00   #4
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

BDA, согласен. Наши могут накликать не только переполнение.
Это я так, как вариант решения предложил.
ZX Spectrum-128 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитация нажатия клавиши xaero93 Помощь студентам 5 25.11.2012 15:06
Delphi! Перехват нажатия клавиши при свернутой форме? AlienNation Общие вопросы Delphi 22 24.08.2011 20:23
время нажатия клавиши BattleMage Общие вопросы .NET 2 19.09.2009 13:41
Емулиривание нажатия клавиши xTANATOSx Win Api 9 10.10.2007 21:46
Эмуляция нажатия клавиши...... Zoidberg Win Api 4 11.01.2007 18:44