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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2011, 16:38   #1
BarsDG
Пользователь
 
Регистрация: 06.09.2010
Сообщений: 47
По умолчанию Писк заполнение TEdit'ов

Помогите пожалуйста.
Есть TPageControl, на нем динамически созданы вкладки (количество может быть разное), на вкладках панели, на них TEdit
Также, на форме динамически создаются TButton равное по количеству созданных вкладок.
Цель такова: При заполнении всех существующих TEdit'ов в активной вкладке соответствующий TButton становится Enabled:=False
Вот что сделал я:

procedure Tform2.EditChangeButton(Sender: TObject);
var
w,i,q: integer;
begin
w:=StrToInt(Edit3.text);// кол. компонентов на вкладке
i:=StrToInt(Edit1.text);// № Вкладки TTabSheet
for q:=1 to w do
if TEdit(TPanel(Tab1.FindComponent('Pa nel_Tabl'+IntToStr(i+1))).FindCompo nent('Date'+IntToStr(q))).Text<>''t hen
TButton(Form2.FindComponent('List'+ IntToStr(i+1))).Enabled:=False
Else TButton(Form2.FindComponent('List'+ IntToStr(i+1))).Enabled:=True;
end;

Все работает, но не верно! т.е. поля не все заполнены а команда ...Enabled:=False выполняется.

Я понимаю, что у меня не верно: for q:=1 to w do ...
Подскажите, как было бы правильно.
BarsDG вне форума Ответить с цитированием
Старый 30.05.2011, 17:17   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

http://programmersforum.ru/showthrea...=153163&page=2
Код:
grbbox:=(sender as TradioButtin).parent; //узнали на какой таблице(Groupbox) мы сделали отметку 
// sender это объект для которого произошло событие наш RadioButton
ok:=false; //считаем что отметок нет
for j:=0 to grbox.controlcount-1 do begin
  if grbox.controls[j] is TradioButton //просматриваем список объектов лежащих на нужном Groupbox 
  and (grbox.controls[j] as Tradiobuttin).checked ok:=true; //нашли отметку
  if grbox.controls[j] is TButton then 
  btn:=grbox.controls[j] as Tbutton; //узнаем нужную кнопку (ту которая м.б. скрыта)
end;
  btn.visible:=ok; //показываем/прячем при наличии/отсутствии отметок
только переделать на Tedit Tpanel вместо TradioButton TGroupBox
вместо проверок отметок проверка заполненности
и visible -> Enabled
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.05.2011 в 17:22.
evg_m вне форума Ответить с цитированием
Старый 31.05.2011, 13:12   #3
BarsDG
Пользователь
 
Регистрация: 06.09.2010
Сообщений: 47
По умолчанию

Я извиняюсь, но что-то у меня не получается по этому образцу...:0(
BarsDG вне форума Ответить с цитированием
Старый 31.05.2011, 15:15   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Сообщение от BarsDG Посмотреть сообщение
Я извиняюсь, но что-то у меня не получается по этому образцу...:0(
а где то что не получилось.
1. код написанный вами.
2. дословные сообщения об ошибках компиляции с указанием строк.
3. дословные сообщение об ошибках во время выполyения с указанием строк.
4.описание модельной ситуации. Ожидаемый результат. Наблюдаемый результат.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 01.06.2011, 09:02   #5
BarsDG
Пользователь
 
Регистрация: 06.09.2010
Сообщений: 47
По умолчанию

Код:
procedure Tform2.EditChangeButton(Sender: TObject);
var
j,i : Integer;
Date: TEdit;
ok: Boolean;
btn: TButton;
begin
Date:=(sender as TPanel).parent; 
ok:=false;
for j:=1 to Date.controlcount-1 do begin
  if Date.controls[j] is TEdit and (Date.controls[j] as TEdit).Text ok:=true;
  if Date.controls[j] is TButton then
  btn:=Date.controls[j] as Tbutton;
end;
  TButton(Form2.FindComponent('List'+IntToStr(i+1))).Enabled:=ok;
Сообщения ошибок:
Incompatible types: 'TEdit' and 'TWinControl' на Date:=(sender as TPanel).parent;
Incompatible types: 'string' and 'Boolean' на ok:=true;

p.s. не судите строго, я программирую недавно.

Последний раз редактировалось BarsDG; 01.06.2011 в 10:56.
BarsDG вне форума Ответить с цитированием
Старый 01.06.2011, 09:12   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

комментарии читали?
Цитата:
// sender это объект для которого произошло событие наш RadioButton
Цитата:
Incompatible types: 'TEdit' and 'TWinControl' на Date:=(sender as TPanel).parent;
Наше событие для Tedit //sender as Tedit
наш Edit расположен на какой-то Panel. т.е. Parent это Tpanel
1.можно так
Код:
Date: TPanel 
Date:=(sender as TEdit).parent as TPanel;
2.а можно так
Код:
Date: Twincontaol;
Date:=(sender as TEdit).parent;
Цитата:
Incompatible types: 'string' and 'Boolean' на ok:=true;
при копировании не вредно и думать (если есть if то должен быть then)
а текст (строку введенную в Edit) надо с чем-то сравнивать. (например пустой строкой '')
if Date.controls[j] is TEdit and (Date.controls[j] as TEdit).Text <>'' ) then ok:=true;
даже если у меня его не было.

Данный пример включит кнопку (ok будет = TRUE) если есть хотя бы один заполненный (непустой) Edit.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 01.06.2011 в 09:33.
evg_m вне форума Ответить с цитированием
Старый 01.06.2011, 10:44   #7
BarsDG
Пользователь
 
Регистрация: 06.09.2010
Сообщений: 47
По умолчанию

вот:
Код:
Date:=(sender as TEdit).parent as TPanel;
ok:=true;
for q:=0 to Date.controlcount-1 do begin
if Date.controls[q] is TEdit and ((Date.controls[q] as TEdit).Text<>'') then
begin
ok:=false
else
ok:=true;
end;
TButton(Form2.FindComponent('List'+IntToStr(i+1))).Enabled:=ok;
end;
но результат такой же как и в моем первом варианте, т.е. если заполнится один последний TEdit, а все остальные не заполнены то результат Enabled:=false;


А так результат Enabled:=false; при заполнении любого TEdit'a, опять же остальные не заполнены
Код:
...
for q:=1 to Date.controlcount-1 do begin
if Date.controls[q] is TEdit and ((Date.controls[q] as TEdit).Text<>'') then
ok:=false;
end;
TButton(Form2.FindComponent('List'+IntToStr(i+1))).Enabled:=ok;
end;

Последний раз редактировалось BarsDG; 02.06.2011 в 07:59.
BarsDG вне форума Ответить с цитированием
Старый 02.06.2011, 13:01   #8
BarsDG
Пользователь
 
Регистрация: 06.09.2010
Сообщений: 47
По умолчанию

Кто нибудь..., А-у...
BarsDG вне форума Ответить с цитированием
Старый 02.06.2011, 16:14   #9
BarsDG
Пользователь
 
Регистрация: 06.09.2010
Сообщений: 47
По умолчанию

Все, люди добрые помогли. Если кому надо, то вот:
Код:
procedure Tform2.EditChangeButton(Sender: TObject);    // Идентификация для Button по их значению
Var w,q,i: Integer;
    TS: TTabSheet;
    TestResult: Boolean;
begin
i:=StrToInt(Edit1.text);
TS := TTabSheet(TEdit(Sender).Parent);
TestResult := True;
for q := 0 to TS.ControlCount - 1 do
 if TS.Controls[q].ClassType = TEdit
    then if TEdit(TS.Controls[q]).Text = ''
         then begin
              TestResult := False;
              Break;
              end;
TButton(Form2.FindComponent('List'+IntToStr(i+1))).Enabled := not TestResult;
end;
BarsDG вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Звуковой сигнал (писк) aank10 Общие вопросы C/C++ 2 05.05.2011 11:37
Ужасный писк!!!! vseriousv Компьютерное железо 7 08.03.2011 12:07
запись данных в файл из 10 штук TEdit'ов Devostator Общие вопросы Delphi 10 04.10.2010 09:49
МОНИТОР, БЛИН- издаёт писк+скрежет Viteef Компьютерное железо 26 10.02.2010 20:48
ЗАПОЛНЕНИЕ БД Лонли-Локли БД в Delphi 4 26.08.2009 14:54