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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2008, 16:20   #1
slips
Форумчанин
 
Аватар для slips
 
Регистрация: 28.10.2008
Сообщений: 350
По умолчанию Как в OnkeyPress отловить если в Edit есть текст позицию заменяемого символа?

Вобщем проблема в следующем есть Edit в него вводятся данные (аналогия вещественного числа),
а) если edit пустой сразу же исключаю ввод данных при вводе запятой (по понятным причинам)

Проблема: если edit не пустой, но произошла замена некоторого числа а- с позиции 1, на запятую.

Код:
procedure TgFormSpKart.EditKeyPressFloat(Sender: TObject; var Key: Char);
begin
     if (not (Key in ['0'..'9',',',#8]))  then key:=#0
     else
         begin
              iF ((pos(',',(Sender as TMaskEditRight).Text)<>0) or ((Sender as TMaskEditRight).Text='')) and (key in [',',#8]) then
                    key:=#0;
         end;
end;
Вроде все правильно сказал
slips вне форума Ответить с цитированием
Старый 06.12.2008, 16:40   #2
slips
Форумчанин
 
Аватар для slips
 
Регистрация: 28.10.2008
Сообщений: 350
По умолчанию

криво но работает
Код:
procedure TgFormSpKart.EditKeyPressMoney(Sender: TObject; var Key: Char);
begin
     if (not (Key in ['0'..'9',',',#8]))  then key:=#0
     else
         begin
          iF ((pos(',',(Sender as TMaskEditRight).Text)<>0) or ((Sender as TMaskEditRight).Text='')) and (key in [',',#8]) then
          key:=#0;
         end;
end;

procedure TgFormSpKart.EditChangeMoney(Sender: TObject);
Var
    S:String;
begin
     S:=(Sender as TMaskEditRight).Text;
           iF  pos(',',s)=1 then
                    begin
                      delete(s,1,1);
                      (Sender as TMaskEditRight).Text:=s;
                    end;
end;
slips вне форума Ответить с цитированием
Старый 06.12.2008, 17:15   #3
slips
Форумчанин
 
Аватар для slips
 
Регистрация: 28.10.2008
Сообщений: 350
Сообщение

Таким же изощренным способом сделал для денежного типа
Цитата:
procedure TgFormSpKart.EditChangeMoney(Sender : TObject);
Var
S:String;
CountnextZp:String;
begin
S:=(Sender as TMaskEditRight).Text;
iF pos(',',s)=1 then
begin
delete(s,1,1);
(Sender as TMaskEditRight).Text:=s;
end
else
begin
CountnextZp:=(Sender as TMaskEditRight).Text;
iF pos(',',CountnextZp)<>0 then
begin
delete(CountnextZp,1,Pos(',',Countn extZp));
iF length(CountnextZp)>2 then
begin
CountnextZp:=(Sender as TMaskEditRight).Text;
delete(CountnextZp,Pos(',',Countnex tZp)+3,length(CountnextZp));
(Sender as TMaskEditRight).Text:=CountnextZp;
(Sender as TMaskEditRight).SetCursor(Length((S ender as TMaskEditRight).Text));
end;
end;
end;
end;

procedure TgFormSpKart.EditKeyPressMoney(Send er: TObject; var Key: Char);
begin
if (not (Key in ['0'..'9',',',#8])) then key:=#0
else
begin
iF ((pos(',',(Sender as TMaskEditRight).Text)<>0) or ((Sender as TMaskEditRight).Text='')) and (key in [',',#8]) then
key:=#0;
end;
end;
По моему с маской было бы проще, но вечно тянет на приключения
slips вне форума Ответить с цитированием
Старый 06.12.2008, 18:12   #4
slips
Форумчанин
 
Аватар для slips
 
Регистрация: 28.10.2008
Сообщений: 350
По умолчанию

Окончательный вариант преобразования в денежный тип (0,00 коп)
Код:
procedure TgFormSpKart.EditKeyPressMoney(Sender: TObject; var Key: Char);
begin
     if (not (Key in ['0'..'9',',',#8]))  then key:=#0
     else
         begin
          iF ((pos(',',(Sender as TMaskEditRight).Text)<>0) or ((Sender as TMaskEditRight).Text='')) and (key in [',',#8]) then
          key:=#0;
         end;
end;

procedure TgFormSpKart.EditChangeMoney(Sender: TObject);
Var
    S:String;
begin
     S:=(Sender as TMaskEditRight).Text;
           iF  pos(',',s)=1 then
                    begin
                      delete(s,1,1);
                      (Sender as TMaskEditRight).Text:=s;
                    end
end;

procedure TgFormSpKart.EditExitMoney(Sender: TObject);
Var
S:String;
 begin
       iF ((Sender as TMaskEditRight).Text)<>'' then S:=(Sender as TMaskEditRight).Text else S:='0';
       iF  pos(',',s)<>0 then
                             begin
                                  delete(s,1,Pos(',',s));
                                  case length(s) of
                                                         1:(Sender as TMaskEditRight).Text:=(Sender as TMaskEditRight).Text+'0';
                                                         0:(Sender as TMaskEditRight).Text:=(Sender as TMaskEditRight).Text+'00';
                                                         else
                                                            begin
                                                             s:=(Sender as TMaskEditRight).Text;
                                                             delete(S,Pos(',',S)+3,length(S));
                                                             (Sender as TMaskEditRight).Text:=S;
                                                             (Sender as TMaskEditRight).SetCursor(Length((Sender as TMaskEditRight).Text));
                                                            end;
                                                    end;
                             end
                                 else
                                 (Sender as TMaskEditRight).Text:=s+',00';
 end ;
slips вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как скопировать текст в буфер обмена с одного edit-a и вставить в другой SeRhy Общие вопросы Delphi 2 26.07.2008 23:02
если есть.... то.... -=$V=- Компоненты Delphi 2 17.06.2008 13:02
Как задать текст в Edit в чужом окне Artem Win Api 6 14.12.2007 19:13
Edit и текст M@rsel Компоненты Delphi 2 23.03.2007 09:33