Проверка символа в OnKeyPress
От: vitarl Россия  
Дата: 23.12.05 23:09
Оценка:
Здравствуйте.
Возможно, мой вопрос окажется простым , но у меня не получилось найти ответ :
В программе(C++Builder6) есть некое поле для ввода. В это поле должно вводиться только число. На Delphi мне порекомендовали вот такой приёмчик :

PROCEDURE TLab2.Edit1KeyPress(Sender: TObject; VAR Key: Char);
BEGIN
  CASE Key OF
    #48..#57,#8:;
  ELSE Key:=#0;
  END;
END;


Мне интересно собственно, как это переделать на C?(через swith выглядит как-то коряво, да ещё и компилятор ругается)

P. S. Применяться данная процедура будет не только на Edit`ах(ещё, например в StringGreed`ах), так что MaskEdit использовать не получится.
P. P. S. Найти ответ на вебе я, конечно, пытался, но по любому вопросу, связанному с символами вываливается столько мусора...
P. P. P. S. #8 — код BackSpace, в котором основная загвоздка(были какие-то варианты, но с ним они не работали ) и заключается.
P. P. P. P. S. Может пригодится: это — текст проги, по которой я искал коды этих символов:
PROGRAM P;
USES CRT;
VAR Key: Char;
BEGIN
  ClrScr;
  WHILE True DO BEGIN
    Key:=ReadKey;
    IF (Key=#0) AND KeyPressed THEN Key:=ReadKey;
    WriteLn(Key,' - #',ORD(Key));
    IF Key=#27 THEN Exit;
  END;
END.


26.12.05 13:04: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Проверка символа в OnKeyPress
От: diro  
Дата: 23.12.05 23:30
Оценка: 2 (1)
char num_key_read(char key)
{
return (key < 33) || ( (key > 79) && (key < 90 ) ) ? key : 0x00;
}

Если речь об ANSI.
Re[2]: Проверка символа в OnKeyPress
От: Vitar Россия  
Дата: 24.12.05 00:04
Оценка:
Здравствуйте, diro, Вы писали:

D>char num_key_read(char key)

D>{
D> return (key < 33) || ( (key > 79) && (key < 90 ) ) ? key : 0x00;
D>}

D>Если речь об ANSI.



void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
char num_key_read(char key)
{   //В этом месте выдаёт еррор: [C++ Error] Unit1.cpp(21): E2141 Declaration syntax error
    //К сожалению, у меня убогая, кракнутая версия и в ней нет хелпа, не подскажете, what есть что?
return (key < 33) || ( (key > 79) && (key < 90 ) ) ? key : 0x00;
};
}
Re[3]: Проверка символа в OnKeyPress
От: Daevaorn Россия  
Дата: 24.12.05 08:06
Оценка: 1 (1)
Здравствуйте, Vitar, Вы писали:

V>Здравствуйте, diro, Вы писали:


D>>char num_key_read(char key)

D>>{
D>> return (key < 33) || ( (key > 79) && (key < 90 ) ) ? key : 0x00;
D>>}

D>>Если речь об ANSI.



V>
V>void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
V>{
V>char num_key_read(char key)
V>{   //В этом месте выдаёт еррор: [C++ Error] Unit1.cpp(21): E2141 Declaration syntax error
V>    //К сожалению, у меня убогая, кракнутая версия и в ней нет хелпа, не подскажете, what есть что?
V>return (key < 33) || ( (key > 79) && (key < 90 ) ) ? key : 0x00;
V>};
V>}
V>


Влощенные функции вне закона!
Re[4]: Проверка символа в OnKeyPress
От: diro  
Дата: 24.12.05 09:40
Оценка: 3 (1)
Ну я Борланд C++ взапускал в своей жизни один только раз , поэтому всех нюансов программирования в этой среде не знаю, функцию пример написал на vc++.
По аналогии с Delphi, выглядеть должно как-то так:

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
 Key = (Key < 33) || ( (Key > 79) && (Key < 90 ) ) ? Key : 0x00;
}


Сразу предупреждаю, это не универсально все. Т.е. речь о том, что вот можно например ввести пробел, Tab, короче WhiteSpace. Поэтому лучше структуру сделать, например такой:

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
 Key = ((Key < 33) && (Key != 0x20) && (Key != 0x09) ) || ( (Key > 79) && (Key < 90 ) ) ? Key : 0x00;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.