![]() |
|
#1
|
|||
|
|||
![]() Помогите, как сделать так что бы кнопка была доступна только в том случае, когда введенные значения в LabeledEdit1 и LabeledEdit2 были верны.
Когда я ввожу неверное значение в LabeledEdit1 кнопка блокируется — процедура завершена, потом я ввожу в LabeledEdit2, не исправляя ошибку в LabeledEdit1, допустимое значение и кнопка опять доступна, не взирая на не исправленную ошибку в LabeledEdit1. Код можно просмотреть в вложенном файле. ![]() |
#2
|
||||
|
||||
![]() Код:
button1.enabled := (Проверка(labelededit1.text)) and (Проверка(labelededit2.text)) — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#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
|
||||
|
||||
![]() Четко формулируйте ТЗ.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#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)
|