Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.03.2013, 20:02
KSN KSN вне форума
Прохожий
 
Регистрация: 03.03.2013
Сообщения: 7
Репутация: 10
Печаль Синтаксис

Помогите, как сделать так что бы кнопка была доступна только в том случае, когда введенные значения в LabeledEdit1 и LabeledEdit2 были верны.
Когда я ввожу неверное значение в LabeledEdit1 кнопка блокируется — процедура завершена, потом я ввожу в LabeledEdit2, не исправляя ошибку в LabeledEdit1, допустимое значение и кнопка опять доступна, не взирая на не исправленную ошибку в LabeledEdit1. Код можно просмотреть в вложенном файле.
Изображения
Тип файла: png 321.png (27.8 Кбайт, 8 просмотров)
Ответить с цитированием
  #2  
Старый 03.03.2013, 20:06
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
button1.enabled := (Проверка(labelededit1.text)) and (Проверка(labelededit2.text))
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 03.03.2013, 20:18
KSN KSN вне форума
Прохожий
 
Регистрация: 03.03.2013
Сообщения: 7
Репутация: 10
По умолчанию

Можно чуть по подробней. Что подразумевается под словом проверка в коде и где именно эту строку нужно прописать?
Ответить с цитированием
  #4  
Старый 03.03.2013, 20:21
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от KSN
...где именно эту строку нужно прописать?
Код:
procedure TForm1.LabeledEdit1Change(Sender: TObject);
begin
Button1.Enabled:= (LabeledEdit1.Text = 'slovo') and (LabeledEdit2.Text = 'delo');
end;
Второму эдиту в обжект инспекторе нужно задать тоже Edit1Change

Последний раз редактировалось Alegun, 03.03.2013 в 20:35. Причина: Дополнение
Ответить с цитированием
  #5  
Старый 03.03.2013, 20:31
KSN KSN вне форума
Прохожий
 
Регистрация: 03.03.2013
Сообщения: 7
Репутация: 10
По умолчанию

Код:
procedure TForm1.LabeledEdit1Change(Sender: TObject);
begin
if(LabeledEdit1.Text='')
or(LabeledEdit1.Text='-')
or(LabeledEdit1.Text=',')
or((Pos('-',LabeledEdit1.Text)<>0) and (Pos('-',LabeledEdit1.Text)<>1))
or((Pos(',',LabeledEdit1.Text)<>0) and (Pos(',',LabeledEdit1.Text)=1))
then Button1.Enabled:=False
else Button1.Enabled:=True

end;

procedure TForm1.LabeledEdit2Change(Sender: TObject);
begin
if(LabeledEdit2.Text='')
or(LabeledEdit2.Text='-')
or(LabeledEdit2.Text=',')
or((Pos('-',LabeledEdit2.Text)<>0) and (Pos('-',LabeledEdit2.Text)<>1))
or((Pos(',',LabeledEdit2.Text)<>0) and (Pos(',',LabeledEdit2.Text)=1))
then Button1.Enabled:=False
else Button1.Enabled:=True
end;
end.

Не могли бы Вы внести нужные изменения. Я не могу понять как именно это сделать.
Ответить с цитированием
  #6  
Старый 04.03.2013, 12:51
U.B.M. U.B.M. вне форума
Новичок
 
Регистрация: 06.10.2011
Сообщения: 94
Версия Delphi: Delphi 7
Репутация: 13
По умолчанию

Код:
//где-то в коде при создании формы (или изначально установить)
  Button1.Enabled := false; // если эдит пустой изначально, то кнопка должна быть неактивна - так ведь?

Как понял кнопка должна быть активна если окошко не пусто и текст в окошке не начинается с тире или запятой
Код:
procedure TForm1.LabeledEdit1Change(Sender: TObject);
begin
  Button1.Enabled := (LabeledEdit1.Text <> '') and
                     (Pos('-',LabeledEdit1.Text) <> 1) and
                     (Pos(',',LabeledEdit1.Text) <> 1) and 
                     (LabeledEdit2.Text <> '') and
                     (Pos('-',LabeledEdit2.Text) <> 1) and
                     (Pos(',',LabeledEdit2.Text) <> 1);
end;

procedure TForm1.LabeledEdit2Change(Sender: TObject);
begin
  Button1.Enabled := (LabeledEdit1.Text <> '') and
                     (Pos('-',LabeledEdit1.Text) <> 1) and
                     (Pos(',',LabeledEdit1.Text) <> 1) and 
                     (LabeledEdit2.Text <> '') and
                     (Pos('-',LabeledEdit2.Text) <> 1) and
                     (Pos(',',LabeledEdit2.Text) <> 1);
end;

Последний раз редактировалось U.B.M., 04.03.2013 в 13:08.
Ответить с цитированием
  #7  
Старый 04.03.2013, 13:09
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Повторюсь, достаточно одной поцедуры.
Ответить с цитированием
  #8  
Старый 04.03.2013, 14:53
KSN KSN вне форума
Прохожий
 
Регистрация: 03.03.2013
Сообщения: 7
Репутация: 10
По умолчанию

@ U.B.M.
Это вообще ... извините, но бред.
Ответить с цитированием
  #9  
Старый 04.03.2013, 14:57
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Четко формулируйте ТЗ.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #10  
Старый 04.03.2013, 15:28
KSN KSN вне форума
Прохожий
 
Регистрация: 03.03.2013
Сообщения: 7
Репутация: 10
Сообщение ~

Нужно, что бы активация или де активация кнопки, происходила одновременно в зависимости от LabeledEdit1 и LabeledEdit2. Активна в том случае когда в поле находятся '0'..'9', один '-' (только на 1-ом месте) и одна ',' (в любом месте кроме первого, то есть стоящая перед числом)

Как я понял, нужно прописать единую процедуру после implementation ...
Вложения
Тип файла: txt cod.txt (2.1 Кбайт, 8 просмотров)
Ответить с цитированием
  #11  
Старый 04.03.2013, 16:15
U.B.M. U.B.M. вне форума
Новичок
 
Регистрация: 06.10.2011
Сообщения: 94
Версия Delphi: Delphi 7
Репутация: 13
По умолчанию

Цитата:
Сообщение от KSN
@ U.B.M.
Это вообще ... извините, но бред.

Без обид - бред писать такое и иже с ним:

Код:
((Pos(',',LabeledEdit1.Text)<>0) and (Pos(',',LabeledEdit1.Text)=1))

Если Pos=1, то автоматом Pos<>0. Это из логики простой выходит.

Минус только на первом месте и запятая в любом месте кроме первого (надо понимать кроме первого и второго, потому что первое минус, второе число, а запятая третьим символом или далее???) - это по моему (холопскому само собой) разумению рациональное число.

Можно проверять что в эдит вбито рациональное число, используя TryStrToFloat и возможно DecimalSeparator (чтоб разделитель был запятой если вдруг он не запятая).

Последний раз редактировалось U.B.M., 04.03.2013 в 16:22.
Ответить с цитированием
  #12  
Старый 04.03.2013, 17:00
U.B.M. U.B.M. вне форума
Новичок
 
Регистрация: 06.10.2011
Сообщения: 94
Версия Delphi: Delphi 7
Репутация: 13
По умолчанию

В Object Inspector ставим
для Button1 : свойство Enabled = false
для обоих TLabeledEdit : события LabeledEditKeyPress и LabeledEditChange

Код:
unit Unit1;

interface

uses
  SysUtils, Classes, Controls, Forms, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure LabeledEditKeyPress(Sender: TObject; var Key: Char);
    procedure LabeledEditChange(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

procedure Control(var Symbol : char; Pole : string);
begin
  case Symbol of
    '0'..'9' : ;
    #8: ;
    '-' : if Pole <> '' then Symbol := #0;
    ',' : if Pos(',', Pole) <> 0 then Symbol := #0;

    else Symbol := #0;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  x, y, z : real;
begin
  x := StrToFloat(LabeledEdit1.Text);
  y := StrToFloat(LabeledEdit2.Text);
  z := ((x*x)+(y*y));
  if (z>=4) and (z<=9) then
    Label1.Caption := 'Точка принадлежит области'
  else
    Label1.Caption := 'Точка не принадлежит';
end;

procedure TForm1.LabeledEditKeyPress(Sender: TObject; var Key: Char);
begin
  Control(Key,TLabeledEdit(Sender).Text);
end;

procedure TForm1.LabeledEditChange(Sender: TObject);
var
  value : Extended;
begin
  Button1.Enabled := TryStrToFloat(LabeledEdit1.Text, value) and
                     TryStrToFloat(LabeledEdit2.Text, value);
end;

end.

Проверил для строк
'2' и '-,' (2 и -0)
'2' и ',4' (2 и 0,4)
работает

UPDATE
Немного control подправил - там косяк небольшой был

Последний раз редактировалось U.B.M., 04.03.2013 в 17:18.
Ответить с цитированием
Этот пользователь сказал Спасибо U.B.M. за это полезное сообщение:
KSN (04.03.2013)
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:40.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025