IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Аналог Readkey, как считать клавишу?
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 29
Пол: Мужской
Реальное имя: B1-66ER

Репутация: -  1  +


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


А как же это должно выглядеть на Делфи?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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

в некоторых компонентах можно обрабатывать событие OnKeyPress (OnKeyDown) и анализировать в нем нажатую клавишу


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 29
Пол: Мужской
Реальное имя: B1-66ER

Репутация: -  1  +


klem4, спасибо за столь быстрый ответ!
Вот точнее: как только на Label кликнули, его Caption становиться '?' и програма начинает ждать, пока пользователем не будет нажана клавиша в пределах от '0' до '9'. Когда это происходит, Label.Caption меняется на на нажатую цифру.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Ну так и обрабатывай для 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;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






А если Label'ов не один, а несколько, и при клике на любой из них нужнобудет ввести цифру??
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Тогда вот так:
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.

 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 29
Пол: Мужской
Реальное имя: B1-66ER

Репутация: -  1  +


volvo, klem4, большое спасибо Вам за помошь!!! Всё работает! good.gif

Сообщение отредактировано: S_lip -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 30.09.2020 14:20
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name