Показать сообщение отдельно
  #3  
Старый 15.09.2018, 18:23
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Выводи в TLabel, а клаву отлавливай на уровне формы.
Код:
// Вывод времени. У Label1 поставить Align=alRight
// Кондово, но должно работать.
procedure TForm1.InputTime(N : Integer);
var
  s, t : String;
  I : Integer;
begin
   If (N >= 0) And (N <=10) Then
     Begin
        s := StringReplace(Label1.Caption,':','',[srReplaceAll]);
        If N = 10 Then
          Begin
             If s <> '' Then s := Copy(s,1,length(s)-1);
          End
        Else
          Begin
            If Length(s) < 6 Then s := s + IntToStr(N);
          End;
        
        t := ''
        For I := Length(s) DownTo 1 Do
          Begin
             t := s[i] + t;
             If (Length(t) = 2) Or (Length(t) = 5) Then t := ':' + t;
          End;
        Label1.Caption := t;
    End;
end;

// Обработчик кнопок. Назначить всем кнопкам 0-9 и забой.
// Каждой кнопке указать в св-ве Tag соответсв. значение (0-9
// для цифр, 10 - для забой)
procedure TForm1.KeyButtonClick(Sender : TObject)
begin
  InputTime((Sender As TButton).Tag);
end;

// Обработчик для клавиатуры. У формы поставить свойство
// KeyPreview:=True
procedute TForm1.FormKeyPress(Sender : TObject; var Key : Char);
begin
  If Key In ['0'..'9'] Then InputTime(StrToInt(Key))
  Else If Key = #8 Then InputTime(10); // #8 - забой, если не ошибаюсь.
end;
Ответить с цитированием