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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2008, 22:37   #11
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Думаю так?
Код:
procedure TWorkForm.Edit1Change(Sender: TObject);
var
  i:Integer;
  s:String;
  caretpos : integer;
begin
  caretpos := Edit1.SelStart
  s:=TEdit(Sender).Text;
  for i:=Length(s) downto 1 do
  begin
    if not(s[i] in ['0'..'9']) then
    delete(s, i, 1);
  end;
  TEdit(Sender).Text:=s;
  Edit1.SelStart := caretpos;
end;
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 23.11.2008, 22:37   #12
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Всем большое спасибо, в особенности 0nni =)))). Но всетаки мне интересно как в OnChange это красиво реализовать ^_^???
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 23.11.2008, 22:38   #13
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Всем большое спасибо тема закрыта ^_^
Цитата:
Думаю так?
Код:

procedure TWorkForm.Edit1Change(Sender: TObject);
var
i:Integer;
s:String;
caretpos : integer;
begin
caretpos := Edit1.SelStart
s:=TEdit(Sender).Text;
for i:=Length(s) downto 1 do
begin
if not(s[i] in ['0'..'9']) then
delete(s, i, 1);
end;
TEdit(Sender).Text:=s;
Edit1.SelStart := caretpos;
end;
Думаю тут чуть чуть надо будет еще учесть, что курсор может сдвигаться. Но это уже дело техники ^_^
Помог? Ну так нажми на весы!

Последний раз редактировалось SNUPY; 23.11.2008 в 22:41.
SNUPY вне форума Ответить с цитированием
Старый 23.11.2008, 22:42   #14
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Перенести курсор в крайнее правое положение:
Код:
  Edit1.SelStart := Length(Edit1.Text);
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Старый 23.11.2008, 22:46   #15
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,810
По умолчанию

Могу предложить 2 варианта решения проблемы:
1.
Код:
procedure TForm1.Edit1Change(Sender: TObject);
var
  i,p:Integer;
  s:String;
  Change: Boolean;
begin
  s:=TEdit(Sender).Text;
  p := TEdit(Sender).SelStart;
  Change := False;
  for i:=Length(s) downto 1 do
  begin
    if not(s[i] in ['0'..'9']) then
    begin
      delete(s, i, 1);
      Change := True;
    end
  end;
  if Change then
  begin
    TEdit(Sender).Text:=s;
    TEdit(Sender).SelStart := p - 1;
    TEdit(Sender).SelLength := 0;
  end;
end;
2.
Код:
procedure TForm1.Edit1Change(Sender: TObject);
var
  i:Integer;
  s:String;
begin
  s:=TEdit(Sender).Text;
  for i:=Length(s) downto 1 do
  begin
    if not(s[i] in ['0'..'9']) then
    delete(s, i, 1);
  end;
  TEdit(Sender).Text:=s;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9']) and (Byte(Key) > 31) then Key := #0;
end;
2-й вариант мне нравится больше.
Arigato на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование данных в буфер обмена? ArcticBear Общие вопросы .NET 4 27.11.2009 14:27
Как очистить буфер обмена? StasSv Microsoft Office Excel 2 11.08.2008 17:38
Как скопировать текст в буфер обмена с одного edit-a и вставить в другой SeRhy Общие вопросы Delphi 2 26.07.2008 23:02
Скопировать в буфер обмена Dj_smart JavaScript, Ajax 8 15.05.2008 19:16
Копирование структуры в буфер обмена bill Общие вопросы Delphi 14 20.11.2007 17:22