Перейти к содержанию
Fire Monkey от А до Я
  • 0

Программное нажатие кнопки пока не отпущен палец.


MaratBest

Вопрос

Делаю свою клавиатуру. 
не знаю правильно ли делаю, но выбрал такой путь.
на форме допустим 10 TButton. tag от 1 до 10 соотвественно
создаю процедуру , всем 10 кнопкам устанавливаю ее на OnMouseDown

ButtonMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single); 
begin

KeyDown(TControl(Sender).Tag);
timer1.Tag:=TControl(Sender).Tag;
Timer1.Enabled:=true; 
end;

на OnMouseUp  такой код(всем кнопкам)

ButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
 Timer1.Enabled:=false;
end;


обработка таймера (interval 500)

procedure TForm1.Timer1Timer(Sender: TObject);
begin
KeyDown(Timer1.tag);
end;
procedure TForm1.KeyDown(NUM: Byte);
begin
case NUM  of
  1: label1.text:=label1.text+'нажата 1';
  2: label1.text:=label1.text+'нажата 2';
  3: label1.text:=label1.text+'нажата 3';
   ...
end;

не является ли это большим костылем ? там где label1.text:=label1.text+'нажата 1'; буду отсылать своей процедуре код нажатой клавиши

Изменено пользователем MaratBest
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
41 минуту назад, Rusland сказал:

А зачем таймер?

наверное забыл написать, приложение android

таймер нужен, чтобы клавиша печатала символ, пока будет нажата, типа как  в windows клавиатура.

Ссылка на комментарий
  • 0
53 минуты назад, Rusland сказал:

У меня этот ^^^ код ругается. При старте выдает Project raised exception class EReadError with message 'Invalid property value'.
 

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure ButtonMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Single);
    procedure ButtonMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Single);
      procedure KeyDown(NUM: Byte);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.ButtonMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single);
begin
KeyDown(TControl(Sender).Tag);
timer1.Tag:=TControl(Sender).Tag;
Timer1.Enabled:=true;
end;

procedure TForm1.ButtonMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single);
begin
Timer1.Enabled:=false;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
KeyDown(Timer1.tag);
end;

procedure TForm1.KeyDown(NUM: Byte);
begin
case NUM  of
  1: label1.text:=label1.text+'нажата 1';
  2: label1.text:=label1.text+'нажата 2';
  3: label1.text:=label1.text+'нажата 3';
end;
end;

end.

на форме 3 TButton. свойство  tag от 1 до 3 соотвественно
 всем 3 кнопкам устанавливаю OnMouseDown =ButtonMouseDown

OnMouseUp =ButtonMouseUp

все работает !!!

вопрос у меня был  "не является ли это большим костылем "

может кто подскажет поизящнее код 

Ссылка на комментарий
  • 0
18 минут назад, MaratBest сказал:

вопрос у меня был  "не является ли это большим костылем "

Заработало у меня.

Ну если еще отработать момент когда нажал на одну кнопку, а потом, не отпуская, вышел за пределы этой кнопки, то таймер отключается, то нормальное решение ИМХО.

Но ведь надо еще как-то реализовать установку курсора в середину текста.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...