![]()  | 
	
 
  | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Помогите, как сделать так что бы кнопка была доступна только в том случае, когда введенные значения в LabeledEdit1 и LabeledEdit2 были верны. 
		
	
		
		
			Когда я ввожу неверное значение в LabeledEdit1 кнопка блокируется — процедура завершена, потом я ввожу в LabeledEdit2, не исправляя ошибку в LabeledEdit1, допустимое значение и кнопка опять доступна, не взирая на не исправленную ошибку в LabeledEdit1. Код можно просмотреть в вложенном файле. ![]()  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Код: 
	button1.enabled := (Проверка(labelededit1.text)) and (Проверка(labelededit2.text))  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Можно чуть по подробней. Что подразумевается под словом проверка в коде и где именно эту строку нужно прописать? 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Код: 
	procedure TForm1.LabeledEdit1Change(Sender: TObject); begin Button1.Enabled:= (LabeledEdit1.Text = 'slovo') and (LabeledEdit2.Text = 'delo'); end; Последний раз редактировалось Alegun, 03.03.2013 в 20:35. Причина: Дополнение  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Код: 
	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  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Код: 
	//где-то в коде при создании формы (или изначально установить) 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  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Повторюсь, достаточно одной поцедуры. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 @ U.B.M.  
		
	
		
		
		
		
		
	
		
		
	
	
	Это вообще ... извините, но бред.  | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Четко формулируйте ТЗ. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#10  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Нужно, что бы активация или де активация кнопки, происходила одновременно в зависимости от LabeledEdit1 и LabeledEdit2. Активна в том случае когда в поле находятся '0'..'9', один '-' (только на 1-ом месте) и одна ',' (в любом месте кроме первого, то есть стоящая перед числом) 
		
	
		
		
			Как я понял, нужно прописать единую процедуру после implementation ... ![]()  | 
| 
		 
			 
			#11  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Без обид - бред писать такое и иже с ним: Код: 
	((Pos(',',LabeledEdit1.Text)<>0) and (Pos(',',LabeledEdit1.Text)=1))Если Pos=1, то автоматом Pos<>0. Это из логики простой выходит. Минус только на первом месте и запятая в любом месте кроме первого (надо понимать кроме первого и второго, потому что первое минус, второе число, а запятая третьим символом или далее???) - это по моему (холопскому само собой) разумению рациональное число. Можно проверять что в эдит вбито рациональное число, используя TryStrToFloat и возможно DecimalSeparator (чтоб разделитель был запятой если вдруг он не запятая). Последний раз редактировалось U.B.M., 04.03.2013 в 16:22.  | 
| 
		 
			 
			#12  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 В 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)
  | ||