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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2013, 19:22   #1
Jekasea
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 47
Вопрос Минус не слушается

Как сделать, что-бы после компиляции в "T.edit" минус можно было ввести только в начале и только один раз ?
Т.е. число может быть только отрицательным или положительным.
Или по нажатию определенной клавиши число меняется с "+" на "-".
Я написал так:
if (key='-') and (pos('-',Edit1.text)<>0) then
Key :=#0;
но этого мало. Минус хоть и вводится один раз, но в любом месте.
Подскажите!
Jekasea вне форума Ответить с цитированием
Старый 03.05.2013, 19:26   #2
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

пиши обработчик для Edit1.change
И проверяй число положительное или отрицательное, так же у едита есть свойство numbersonly, что как бэ намекает.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 03.05.2013, 20:01   #3
Jekasea
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 47
По умолчанию

Подробнее:
Я написал так-

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const Digit: set of Char=['0'..'9', #8,'-'];
Sep: set of Char=['/', '.', ',', 'ю', 'Ю', 'б', 'Б'];
begin
with (Sender as TEdit) do
begin
if (Key in Sep )
then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows
else
if (not(Key in Digit))
then Key:=#0;
if ((Key=DecimalSeparator)and(pos(Deci malSeparator, Text)<>0)) // запятую можно ввести один раз
then Key:=#0;

if (key='-') and (pos('-',Edit1.text)<>0) then
Key :=#0;

Где здесь можно вписать обработчик ?
не получается только с минусом...
Jekasea вне форума Ответить с цитированием
Старый 03.05.2013, 20:18   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

так лучше (взял из калькулятора), дальше сами измените, весы можно не нажимать

Код:
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
var s:real;
begin
case Key of
  #8,'0'..'9' :  ; // цифры и <Back Space>

       '.',',': // разделитель целой и дробной частей числа
                begin
                  if Key <> DecimalSeparator then
                  Key := DecimalSeparator; // заменим разделитель на допустимый
                  if Pos(DecimalSeparator,Edit2.Text) <> 0
                  then Key := Chr(0); // запрет ввода второго разделителя
                end;
           '-':    // минус можно ввести только первым символом,
                // т.е. когда ячейка пустая
                if Length(Edit2.Text) <> 0
                      then Key := Chr(0);
        #13:begin
            s:=StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text);
            Edit3.Text:=FloatToStrF(s,fffixed,6,2);
            end;
        else   // остальные символы запрещены
               key := Chr(0);
    end;
end;
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 03.05.2013, 21:01   #5
Jekasea
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 47
По умолчанию

Спасибо!
Теперь как сделать что-бы при нажатии ,например клавиши "-", число менялось с положительного на отрицательное и наоборот.
Дайте зацепку или пример.
Jekasea вне форума Ответить с цитированием
Старый 03.05.2013, 21:23   #6
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

дак там все просто

Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if Key='-' then key:='+' else key:='-';
end;

т.е если ввели -, то появится +, а если + то появится -

это авто замена, а если вам нужно для клавиши, то пишите так
Код:
procedure TForm1.Button2Click(Sender: TObject);
var i:Integer;
s:string;
begin
s:=trim(Edit1.text);
for i:=1 to Length(S) do
 if s[i]='-' then s[i]:='+' else s[i]:='-';
 Edit1.Text:=s;
end;
from dark to light)

Последний раз редактировалось Stilet; 03.05.2013 в 22:19.
Алексей_2012 вне форума Ответить с цитированием
Старый 03.05.2013, 21:39   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
то появится +, а если + то появится -
Появится где?
Цитата:
число менялось с положительного на отрицательное и наоборот.
Если хочешь делать так то:
Код:
if copy(Edit1.text,1,1)<>'-' then Edit1.text:='-'+Edit1.text
else Edit1.text:=copy(Edit1.text,2,Length(Edit1.text));
Но я не рекомендую так делать вообще. Не нужно вообще ставить защиту на проверку при самом вводе. Проверяй когда хочешь сделать арифметическую операцию при помощи TryStrToFloat() введено ли корректное число.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.05.2013, 21:45   #8
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Цитата:
Появится где?
В данном случае в Edit1.text
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 03.05.2013, 21:54   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
В данном случае в Edit1.text
Ну с этим не поспоришь. Действительно появится в эдите, но не факт что там где он должен быть.
Цитата:
это авто замена, а если вам нужно для клавиши, то пишите так
Этот код тоже ничего хорошего не делает. Без обид но он только все усложнит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.05.2013, 21:57   #10
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Вот здесь все проработано, далее ТС просит заменять минус на плюс, ваш код отличный, но он же просит сделать по нажатии на клавишу -, а не при вводе -
from dark to light)

Последний раз редактировалось Алексей_2012; 03.05.2013 в 21:59.
Алексей_2012 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цифры и минус... lypyotr Общие вопросы Delphi 2 19.07.2012 17:36
не слушается кнопка Button в Windows.Forms Faton 11 Общие вопросы .NET 10 07.05.2012 17:57
Не слушается alignmentX() Mira-girl Общие вопросы по Java, Java SE, Kotlin 0 04.12.2010 21:35
TStaticText не слушается. docbrain Компоненты Delphi 23 18.07.2010 15:18
Программа не слушается условия [D7, XP] DriverSTi Общие вопросы Delphi 17 09.01.2010 18:18