Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сложение значений Integer и Double, на форме 
:(
    Опции темы
nicka
  Дата 22.6.2004, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 11.6.2003

Репутация: нет
Всего: 1



Работаю в Delphi7

У меня на форме стоят 2 поля ввода(TRichEdit).
Одно имеет маску - ' . ' - т.е для ввода значений типа Double(для цены товара),
а второе - ' ' - т.е для ввода значений типа Integer ,

плюс к этому есть еще одно поле, в котором после ввода значений в первые 2 поля, должна отображаться сумма этих значений.
Это поле имеет маску ' . '.
я делаю для этого следующее
[code]
TRichEdit3.text := InttoStr(StrtoInt(TRichEdit1.text) + StrtoInt(TRichEdit2.text));
[code]

конечно это ыдает ошибку поскольку первая маска не позволяет перевести '10 . '(например)
в Integer , я понимаю

но что делать не знаю ... может кто подскажет smile.gif smile.gif
PM MAIL   Вверх
_vova_
Дата 22.6.2004, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 18.6.2004
Где: Харьков

Репутация: нет
Всего: нет



А зачем нужен TRichEdit?
Есть чудовый компонент TCurrencyEdit из RX, скорее всего есть что-то подобное и в JEDIVCL. У него есть свойство Value, и делай сним что хочеш. Также поддерживается такая прелесть, как As...
Ну если очень нуно TRichEdit, то
Код

RichEdit3.text := FloatToStr(StrtoFloat(RichEdit1.text) + StrtoInt(RichEdit2.text));

или наоборот, взависимости от того где дабл.
PM MAIL   Вверх
nicka
Дата 23.6.2004, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 11.6.2003

Репутация: нет
Всего: 1



Цитата
RichEdit3.text := FloatToStr(StrtoFloat(RichEdit1.text) + StrtoInt(RichEdit2.text));


К сожалению, данный метод вызывает у меня следующую ошибку
Код
'10  .  ' is not a valid floating point value



и что же делать? bored.gif


PM MAIL   Вверх
Girder
Дата 23.6.2004, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



У тебя разделитель не соответствует.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
nicka
Дата 23.6.2004, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 11.6.2003

Репутация: нет
Всего: 1



Цитата
У тебя разделитель не соответствует.


не соответствует чему? установкам на машине в Regional Settings?
вроде точка у меня - хотя проверю...

PM MAIL   Вверх
Medved
Дата 23.6.2004, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Цитата(nicka @ 23.6.2004, 16:29)
и что же делать? bored.gif

В первую очередь делать нормально! Это все равно что экскаватором грузить сено! Вам же сказали, есть специальные компоненты (из той же RxLib). Или воспользуейтесь TMaskEdit.

А TRichEdit предназначен для ввода и отображения форматированного текста.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Girder
Дата 23.6.2004, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Код
procedure TForm1.FormCreate(Sender: TObject);
begin
RichEdit1.Lines.DelimitedText:='';
RichEdit2.Lines.DelimitedText:='';
RichEdit3.Lines.DelimitedText:='';
end;


или в обработчике обрезаеш все лишнее из RichEdit.text а потом конвертируеш. Ну и ряд других способов.



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
nicka
Дата 23.6.2004, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 11.6.2003

Репутация: нет
Всего: 1



Цитата
Вам же сказали, есть специальные компоненты (из той же RxLib). Или воспользуейтесь TMaskEdit.


во первых - ни каких других компонент( в той же или не в той жеRxLib) у меня не видно и не читала. Насчет TMaskEdit. - надо поискать.

Но вопрос то касался TRichEdit - значит мне так нужно, я читала про него в книге. Там было сказано, что если надо задать маску, то существует он. Вот я и взяла...

Цитата
В первую очередь делать нормально! Это все равно что экскаватором грузить сено!

так зачем же наезжать так, я в дельфи новичок, просто не знаю в какую сторону копать , да изаказ поджимает... а для чего же тогда форумы, если лучать подсказку на то , что другие уже знают , а тебе не стоит тратить время?

Цитата
RichEdit1.Lines.DelimitedText:='';
- нельзя ли объяснить что это делает, в частности DelimitedText???

Цитата
или в обработчике обрезаеш все лишнее из RichEdit.text
вот это то как раз и не понятно...в этом то и вопрос

Цитата
Ну и ряд других способов
а можно их поглядеть?
PM MAIL   Вверх
Guest
Дата 23.6.2004, 18:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ладно, всем пардон, оказалось что у меня на форме не всем ненавистный TRichEdit , а всеми любивый TMaskEdit. Но ошибка вес равно та же,
так что уж надеюсь на совет, потому что учень уж срочная проблема...
  Вверх
Guest
Дата 23.6.2004, 18:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Выше сообщение от было от меня, т.е Нicka - автора темы.
И щас тоже я пишу.

Дело в том что если я введу в поле число 10 следующим образом - '10 . ' , то выйдет вышеуказанная ошибка. А если не введу так - ' 10. ' - то не выдаст ошибку.
Но так постоянно вводить не удобно.

ЧТо можно придумать тут?
  Вверх
Girder
Дата 23.6.2004, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Береш обычный TEdit и используеш.
а)для IntEdit.OnChange;
Код

var Form1.TForm;
     ...
     cInt:Boolean=false;

...

procedure TForm1.IntEditChange(Sender: TObject);
var s:string;
   i:integer;
   sS:integer;
   fD:boolean;
begin
if cInt then exit;
s:='';
i:=Length(IntEdit.text);
fD:=false;
if i>0 then
 With IntEdit do
  begin
   if not(Text[SelStart] in ['0'..'9','-','+','e','E']) then
    fD:=true;
   repeat
    if (Text[i] in ['0'..'9','-','+','e','E']) then
     s:=Text[i]+s;
    dec(i);
   until (i=0);
  end;
cInt:=true;
sS:=IntEdit.SelStart;
if (fD and (sS>1)) then dec(sS);
IntEdit.Text:=s;
IntEdit.SelStart:=sS;
cInt:=false;
end;

б)для FloatEdit.OnChange;
Код

var Form1.TForm;
     ...
     cFloat:Boolean=false;

...

procedure TForm1.FloatEditChange(Sender: TObject);
var s:string;
   i:integer;
   sS:integer;
   fD:boolean;
begin
if cFloat then exit;
s:='';
i:=Length(FloatEdit.text);
fD:=false;
if i>0 then
 With FloatEdit do
  begin
   if not(Text[SelStart] in ['0'..'9','-','+',DecimalSeparator,'e','E']) then
    fD:=true;
   repeat
    if (Text[i] in ['0'..'9','-','+',DecimalSeparator,'e','E']) then
     s:=Text[i]+s;
    dec(i);
   until (i=0);
  end;
cFloat:=true;
sS:=FloatEdit.SelStart;
if (fD and (sS>1)) then dec(sS);
FloatEdit.Text:=s;
FloatEdit.SelStart:=sS;
cFloat:=false;
end;


Использовать OnKey... также можно, что бы сразу игнорировать
не допустимые коды символов, НО... ни что не помешает вставить(через буфер) в поле ввода информацию.

При конвертации необходимо обрабоботать исключения(потому что, ни что мне не помешает ввести к примеру "..11,,ee". Конечно можно и допустисый синтексис обратывать):
Код

var i:integer;
     e:extended;//double
...
try
 i:=StrToInt(IntEdit.Text);
except
 showmessage('Что тупой что-ли?'); //сообщение пользователю
end
try
 e:=StrToFloat(IntEdit.Text);
except
 showmessage('Да... явно тупой'); //сообщение пользователю
end
...


Но лично я, вообще(если честно то редко) не обрабытываю OnChange, OnKey...
Т.к. часто это пугает пользователя: Он нажимает... А-ааа.. ни чё не происходит и т.п.
А просто обрабатываю исключения и вслучаи чего сообщаю пользователю, где и в чем ошибка.

Это сообщение отредактировал(а) Girder - 23.6.2004, 21:16


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Medved
Дата 24.6.2004, 05:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



надо правильно отредактировать саму маску. Поставить вместо символа 9 символ 0. Т.е. сказать что должна быть не просто цифра, а ОБЯЗАТЕЛЬНО цифра и ничего более.

Цитата

М а с к и  и с п о л ь з у ю т с я  п р и  в в о д е  д а н н ы х  в  п о л я  н а б о р а  д а н н ы х T F i e l d  и  в  к о м п о н е н т  M a s k E d i t .  М а с к и р о в а н н ы й  в в о д  п о з в о л я е т  к о н т р о л и р о в а т ь  с и н т а к с и ч е с к у ю  п р а в и л ь н о с т ь  в в о д а  и  с о к р а т и т ь  в о з м о ж н о с т ь  о ш и б о к . 
М а с к а  с о с т о и т  и з  т р е х  р а з д е л о в ,  м е ж д у  к о т о р ы м и  с т а в и т с я  т о ч к а  с  з а п я т о й  ( 
; ) .  В  п е р в о м  р а з д е л е  -  ш а б л о н е  з а п и с ы в а ю т с я  с п е ц и а л ь н ы м  о б р а з о м  с и м в о л ы  ( с м .  п р и в е д е н н у ю  н и ж е  т а б л и ц у ) ,  к о т о р ы е  м о ж н о  в в о д и т ь  в  к а ж д о й  п о з и ц и и ,  и  с и м в о л ы ,  д о б а в л я е м ы е  с а м о й  м а с к о й ;  в о  в т о р о м  р а з д е л е  з а п и с ы в а е т с я  1  и л и  0  в  з а в и с и м о с т и  о т  т о г о ,  н а д о  и л и  н е т ,  ч т о б ы  с и м в о л ы ,  д о б а в л я е м ы е  м а с к о й ,  в к л ю ч а л и с ь  в  с в о й с т в о  T e x t  к о м п о н е н т а  M a s k E d i t  и л и  в  с в о й с т в о  V a l u e  п о л я ;  в  т р е т ь е м  р а з д е л е  у к а з ы в а е т с я  с и м в о л ,  и с п о л ь з у е м ы й  д л я  о б о з н а ч е н и я  п о з и ц и й ,  в  к о т о р ы х  е щ е  н е  о с у щ е с т в л е н  в в о д .   
 
С п е ц и а л ь н ы е  с и м в о л ы  м а с к и : 
 
  !  Н а л и ч и е  с и м в о л а  " ! "  о з н а ч а е т ,  ч т о  н е д о с т а ю щ и е  с и м в о л ы  п р е д в а р я ю т с я  п р о б е л а м и ,  а  о т с у т с т в и е  с и м в о л а  " ! "  о з н а ч а е т ,  ч т о  п р о б е л ы  р а з м е щ а ю т с я  в  к о н ц е . 
  >  С и м в о л  " > "  о з н а ч а е т ,  ч т о  в с е  п о с л е д у ю щ и е  з а  н и м  с и м в о л ы  д о л ж н ы  в в о д и т ь с я  в  в е р х н е м  р е г и с т р е ,  п о к а  н е  к о н ч и т с я  м а с к а  и л и  п о к а  н е  в с т р е т и т с я  с и м в о л  " < " . 
  <  С и м в о л  " < "  о з н а ч а е т ,  ч т о  в с е  п о с л е д у ю щ и е  з а  н и м  с и м в о л ы  д о л ж н ы  в в о д и т ь с я  в  н и ж н е м  р е г и с т р е ,  п о к а  н е  к о н ч и т с я  м а с к а  и л и  п о к а  н е  в с т р е т и т с я  с и м в о л  " > " . 
< >  С и м в о л ы  " < > "  о з н а ч а ю т ,  ч т о  а н а л и з  р е г и с т р а  н е  п р о и з в о д и т с я . 
\  С и м в о л  " \ "  о з н а ч а е т ,  ч т о  с л е д у ю щ и й  з а  н и м  с и м в о л  я в л я е т с я  б у к в е н н ы м ,  а  н е  с п е ц и а л ь н ы м ,  х а р а к т е р н ы м  д л я  м а с к и .  Н а п р и м е р ,  с и м в о л  " > "  п о с л е  с и м в о л а  " \ "  в о с п р и м е т с я  к а к  з н а к  > ,  а  н е  к а к  с и м в о л ,  у к а з ы в а ю щ и й  н а  в е р х н и й  р е г и с т р . 
  L  С и м в о л  " L "  о з н а ч а е т ,  ч т о  в  д а н н о й  п о з и ц и и  д о л ж н а  б ы т ь  б у к в а . 
  l  С и м в о л  " l "  о з н а ч а е т ,  ч т о  в  д а н н о й  п о з и ц и и  м о ж е т  б ы т ь  т о л ь к о  б у к в а  и л и  н и ч е г о . 
A  С и м в о л  " A "  о з н а ч а е т ,  ч т о  в  д а н н о й  п о з и ц и и  д о л ж н а  б ы т ь  б у к в а  и л и  ц и ф р а . 
  a  С и м в о л  " a "  о з н а ч а е т ,  ч т о  в  д а н н о й  п о з и ц и и  м о ж е т  б ы т ь  б у к в а ,  и л и  ц и ф р а ,  и л и  н и ч е г о . 
C  С и м в о л  " C "  о з н а ч а е т ,  ч т о  в  д а н н о й  п о з и ц и и  д о л ж е н  б ы т ь  л ю б о й  с и м в о л . 
c  С и м в о л  " c "  о з н а ч а е т ,  ч т о  в  д а н н о й  п о з и ц и и  м о ж е т  б ы т ь  л ю б о й  с и м в о л  и л и  н и ч е г о . 
0  С и м в о л  " 0 "  о з н а ч а е т ,  ч т о  в  д а н н о й  п о з и ц и и  д о л ж н а  б ы т ь  ц и ф р а . 
9  С и м в о л  " 9 "  о з н а ч а е т ,  ч т о  в  д а н н о й  п о з и ц и и  м о ж е т  б ы т ь  ц и ф р а  и л и  н и ч е г о . 
#  С и м в о л  " # "  о з н а ч а е т ,  ч т о  в  д а н н о й  п о з и ц и и  м о ж е т  б ы т ь  ц и ф р а ,  з н а к  " + " ,  з н а к  " - "  и л и  н и ч е г о . 
:  С и м в о л  " : "  и с п о л ь з у е т с я  д л я  р а з д е л е н и я  ч а с о в ,  м и н у т  и  с е к у н д . 
/  С и м в о л  " / "  и с п о л ь з у е т с я  д л я  р а з д е л е н и я  м е с я ц е в ,  д н е й  и  г о д о в  в  д а т а х . 
_  С и м в о л  " _ "  о з н а ч а е т  а в т о м а т и ч е с к у ю  в с т а в к у  в  т е к с т  п р о б е л а . 

П р и м е р ы  м а с о к 
С е м и з н а ч н ы й  н о м е р  т е л е ф о н а :  ! 0 0 0 - 0 0 - 0 0 ; 0 ; _ 
Н о м е р  т е л е ф о н а  с  к о д о м  с т р а н ы :  ! \ ( 9 9 9 \ )  0 0 0 - 0 0 - 0 0 ; 0 ; _ 
П о ч т о в ы й  и н д е к с :  ! 0 0 0 0 0 0 0 ; 1 ; _ 
П а с п о р т :  ! L - L L  9 9 9 9 9 9 ; 0 ; _ 
Д а т а  с  у к а з а н и е м  д н я :  ! 9 9 / 9 9 / 0 0 ; 1 ; _ 
Д а т а  б е з  у к а з а н и я  д н я :  ! 9 9 / 0 0 ; 1 ; _ 
В р е м я  с  с е к у н д а м и :  ! 9 0 : 0 0 : 0 0 ; 1 ; _ 
В р е м я  б е з  с е к у н д :  ! 9 0 : 0 0 ; 1 ; _





--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
nicka
Дата 24.6.2004, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 11.6.2003

Репутация: нет
Всего: 1



Pegas ,
про маски я читала,
только если я поставлю вместо 9 - 0, то это будет означать обязательный ввод, то есть если я уже ввела туда число, а потом передумала и хочу удалить его, то оно выдаст сообщение, что я не правильно ввела значение в маску...я так пробовала

Теперь насчет удобного ввода, чтоб при вводе например 10 сажалось ' 10. ' , а не '10 . '
я подумала, что тут поможет !(восклицательный знак) в маске, т.е !99.99;1;_
да, это вроде решает проблему пробелов перед точкой, но зато возничает другая - при вводе например ' 100.25' значение может поменяться при вводе в базу на ' 100.01' или что то в этом роде, короче значение после точки меняеться, не знаю из зачего.....


А откуда можно скачать эту RX библиотеку?


PM MAIL   Вверх
Medved
Дата 25.6.2004, 05:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



http://delphiplus.nagano.ru/rxlibrary.html
Добавлено @ 05:23
Установи RXLib и не мучайся. RXLib - это почти что стандартная библиотека для Delphi. Описание процедур и функций смотри в DRKB.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Петрович
Дата 26.6.2004, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата
не всем ненавистный TRichEdit , а всеми любивый TMaskEdit

Лично я, и все мои ближайшие знакомые уже давно (после первых опытов) отказались от использования TMaskEdit. Уж больно он "не русский" какой-то. Наладить ввод который будет соответствовать маске, и при этом будет допускать гибкость, в этом компоненте по моему невозможно.
Мне кажется что он применим только если нужно заставить пользователя обязательно ввести значение точно соответствующее маске. Но даже при этом, пользователи "чумеют" от такого компонента, по крайней мере те с которыми приходилось иметь дело мне.
Поэтому, обычно просто ставится tEdit, и либо вешается обработчик на OnChange в котором делается проверка на допустимость вводимой величины, либо проверка делается уже после ввода, например по нажатию Ok.
А можно и правда поискать более продвинутые компоненты.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0661 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.