Помощь - Поиск - Пользователи - Календарь
Полная версия: Аналог Readkey
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
S_lip
Добрый день!
У меня небольшая проблема: есть Form и Label по середине. Нужно, чтобы при нажатии на этот Label пользователь ввел кнопку в пределах от 0 до 9. На языке Паскаля это будет выглядеть так:
Код
uses crt;
var
  c:char;
begin
  repeat
    c:=readkey;
  until (c>'0') and (c<'9');
end.


А как же это должно выглядеть на Делфи?
klem4
В лейбл ничего вводить нельзся (label анг. метка) компонент служит для вывода информации, напиши точнее что тебе нужно, что за задание ?

в некоторых компонентах можно обрабатывать событие OnKeyPress (OnKeyDown) и анализировать в нем нажатую клавишу
S_lip
klem4, спасибо за столь быстрый ответ!
Вот точнее: как только на Label кликнули, его Caption становиться '?' и програма начинает ждать, пока пользователем не будет нажана клавиша в пределах от '0' до '9'. Когда это происходит, Label.Caption меняется на на нажатую цифру.
klem4
Ну так и обрабатывай для Label1 событие OnClick, а для Form1 событие onKeyPress


procedure TForm1.Label1Click(Sender: TObject);
begin
  Label1.Caption := '?';
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key in ['0'..'9']) then
   Label1.Caption := Key;
end; 
Гость
А если Label'ов не один, а несколько, и при клике на любой из них нужнобудет ввести цифру??
volvo
Тогда вот так:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }

    waiting: tlabel; // <--- Ожидающий нажатия Label
    procedure get_ready(sender: tobject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Это то, что должно происходить по onClick на Label ...
procedure tform1.get_ready(sender: tobject);
var key: char;
begin
  waiting := (sender as tlabel);
  waiting.Caption := '?';
end;

procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
  // присвоить всем лейблам на форме нужный onClick ...
  for i := 0 to componentcount - 1 do
    if components[i] is tlabel then
      (components[i] as tlabel).OnClick := get_ready;

  // Никто ничего не ждет, пока не выбран Label
  waiting := nil;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if key in ['0' .. '9'] then
    if waiting <> nil then begin // Кто-то ждет нажатия ...
      waiting.Caption := key;
      waiting := nil; // Прекратить ожидание
    end;
end;

end.

S_lip
volvo, klem4, большое спасибо Вам за помошь!!! Всё работает! good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.