Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2008, 15:52   #1
Mareck
 
Регистрация: 17.12.2008
Сообщений: 3
Лампочка Визуальный компонент от TEdit

Помогите пожалуйста, немного встал в ступор.

Есть созданный новый компонент в Delphi, нужно прописать свойство, чтобы по умолчанию можно было бы вводить только целые числа в поле text.

Подскажите каким образом это можно осуществить?
Mareck вне форума Ответить с цитированием
Старый 17.12.2008, 16:21   #2
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Нужно обрабатывать событие OnKeyPress.
Так:
Код:
if not (Key in ['0'..'9']) then
  key := #0;
Или так:
Код:
if not CharInSet(Key, ['0'..'9']) then
  key := #0;
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Старый 17.12.2008, 17:01   #3
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Лучше так
Код:
SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_NUMBER)
А вообще мне первый способ кажется быстрее. CharInSet это все таки функция, и за ее вызов нужно платить.
Сказал и загрустил от бесспорности своей правоты.

Последний раз редактировалось 0nni; 17.12.2008 в 17:04.
0nni вне форума Ответить с цитированием
Старый 17.12.2008, 17:08   #4
Mareck
 
Регистрация: 17.12.2008
Сообщений: 3
По умолчанию

Я немного не правильно изъяснился, мне это нужно все сделать в новом компоненте, то есть создать новый компонент, у которого родитель TEdit а свойство text перекрывается таким способом что можно ввести только тип integer.
Mareck вне форума Ответить с цитированием
Старый 18.12.2008, 02:23   #5
Mareck
 
Регистрация: 17.12.2008
Сообщений: 3
По умолчанию

ВОт, после 3 часов мытарств поиска в инете нашел

unit NumEdit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TNumEdit = class(TEdit)
procedure CreateParams(var Params: TCreateParams); override;
procedure KeyPress(var Key: Char); override;
end;

procedure register;

implementation

procedure register;
begin
RegisterComponents('Standard', [TNumEdit]);
end;

procedure TNumEdit.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := Params.Style or ES_MULTILINE or ES_RIGHT;
end;

procedure TNumEdit.KeyPress(var Key: Char);
begin
case key of
'0'..'9': ; // цифры
#8: ; // забой
'.', ',':
if Pos(DecimalSeparator, Text) = 0 then
Key := DecimalSeparator
else
Key := #0; // десятичный разделитель
else
key := #0;
end; // case
end;

end.
Mareck вне форума Ответить с цитированием
Старый 18.12.2008, 06:52   #6
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Глупо, сделайте так
Код:
Params.Style := Params.Style or ES_MULTILINE or ES_RIGHT or ES_NUMBER
и эта процедура не понадобится
Код:
procedure TNumEdit.KeyPress(var Key: Char);
Кстати в в курсе , что создаете многострочный Edit (по сути Memo)?
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по TEdit MasterofCDM Общие вопросы Delphi 8 16.07.2008 20:51
TEdit green Компоненты Delphi 17 16.03.2008 07:13
TEdit Xardas Общие вопросы Delphi 2 17.01.2008 02:04
TEdit, TEdit, TEdit Oleg Romanchuk Помощь студентам 2 20.08.2007 11:30