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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.06.2011, 12:43
Barsdg Barsdg вне форума
Прохожий
 
Регистрация: 02.06.2011
Сообщения: 24
Репутация: 10
По умолчанию Поиск на заполнение ВСЕХ 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<>'' then
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 ...
Еще делал и так:
Код:
procedure Tform2.EditChangeButton(Sender: TObject);
var w,q,i : Integer;
Date: TPanel;
ok: Boolean;
begin
w:=StrToInt(Edit3.text);
i:=StrToInt(Edit1.text);
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;

Помогите пожалуйста, может вообще нужно по другому делать?
Ответить с цитированием
  #2  
Старый 02.06.2011, 13:37
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:Cardinal;
begin
for i:=0 to Form1.ComponentCount-1 do
  begin
    if Form1.Components[i].ClassType = TEdit then
      if TEdit(Form1.Components[i]).Text<>'' then
        TEdit(Form1.Components[i]).Enabled:=False;
  end;
end;
Ответить с цитированием
  #3  
Старый 02.06.2011, 13:53
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

гы, сколько лет кодю, но вот так только недавно начал делать:
Код:
TEdit(Form1.Components[i]).Enabled := not (TEdit(Form1.Components[i]).Text <> '');
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #4  
Старый 02.06.2011, 14:08
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Цитата:
Сообщение от Assistant
гы, сколько лет кодю, но вот так только недавно начал делать:
Код:
TEdit(Form1.Components[i]).Enabled := not (TEdit(Form1.Components[i]).Text <> '');
Спасибо! Писанины меньше!) Буду знать!)
Ответить с цитированием
  #5  
Старый 02.06.2011, 14:11
Barsdg Barsdg вне форума
Прохожий
 
Регистрация: 02.06.2011
Сообщения: 24
Репутация: 10
По умолчанию

Цитата:
Сообщение от Janom
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:Cardinal;
begin
for i:=0 to Form1.ComponentCount-1 do
  begin
    if Form1.Components[i].ClassType = TEdit then
      if TEdit(Form1.Components[i]).Text<>'' then
        TEdit(Form1.Components[i]).Enabled:=False;
  end;
end;
Мне нужно событие на TEdit Change в котором заполняется текст, а также проверяет заполнены ли другие TEdit на активной вкладке, и если ВСЕ они заполнены, то определенный TButton -> Enabled:=False.
А в общем по Вашему примеру результат такой же как и у предыдущих вариантов

Последний раз редактировалось Barsdg, 02.06.2011 в 14:22.
Ответить с цитированием
  #6  
Старый 02.06.2011, 14:13
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Определенный это какой?
Ответить с цитированием
  #7  
Старый 02.06.2011, 14:18
Barsdg Barsdg вне форума
Прохожий
 
Регистрация: 02.06.2011
Сообщения: 24
Репутация: 10
По умолчанию

Цитата:
Сообщение от Janom
Определенный это какой?

Есть TPageControl, на нем динамически созданы вкладки (количество может быть разное), на вкладках панели, на них TEdit'ы
Также, на форме динамически создаются TButton равное по количеству созданных вкладок.

Последний раз редактировалось Barsdg, 02.06.2011 в 14:20.
Ответить с цитированием
  #8  
Старый 02.06.2011, 14:36
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Что-то я тормазнул))
Код:
procedure TForm1.EditsChange(Sender: TObject);
var
  i:Cardinal;
  aTSh:TWinControl;
  aBtn:TButton;
  bool:boolean;
begin
aTSh:=TEdit(Sender).Parent;
bool:=false;
for i:=0 to aTSh.ControlCount-1 do
  begin
    if aTSh.Controls[i].ClassType = TButton then
      aBtn:=TButton(aTSh.Controls[i]);
    if aTSh.Controls[i].ClassType = TEdit then
      if TEdit(aTSh.Controls[i]).Text='' then bool:=true;
    aBtn.Enabled:=bool;
  end;
end;
Ответить с цитированием
  #9  
Старый 02.06.2011, 15:16
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

В общем вот так проводится тест активной вкладки по нужному вам критерию:
Код:
procedure TForm1.Edit4Change(Sender: TObject);
Var i: Integer;
    TS: TTabSheet;
    TestResult: Boolean;
begin
 TS := TTabSheet(TEdit(Sender).Parent);
 TestResult := True;
 for i := 0 to TS.ControlCount - 1
 do if TS.Controls[i].ClassType = TEdit
    then if TEdit(TS.Controls[i]).Text = ''
         then begin
              TestResult := False;
              Break;
              end;
 Button1.Enabled := not TestResult;
end;
Единственное что вам надо доработать, это присвоить правильной кнопке свойство Enabled
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #10  
Старый 02.06.2011, 15:18
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Собственно мой код почти повторяет код Janom (забыл страничку обновить)
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #11  
Старый 02.06.2011, 15:27
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Цитата:
Сообщение от Страдалецъ
Собственно мой код почти повторяет код Janom (забыл страничку обновить)
Это да) но на TabSheet'ах у меня косякнуло) не искало кнопки... вот так правильнее будет:
Код:
var
  i:Cardinal;
  aTSh:TWinControl;
  aBtn:TButton;
  bool:boolean;
begin
aTSh:=TEdit(Sender).Parent;
bool:=false;
For i:=0 to aTSh.ControlCount-1 do
  if aTSh.Controls[i].ClassType = TButton then
      aBtn:=TButton(aTSh.Controls[i]);
for i:=0 to aTSh.ControlCount-1 do
  begin
    if aTSh.Controls[i].ClassType = TEdit then
      if TEdit(aTSh.Controls[i]).Text='' then bool:=true;
    if aBtn<>nil then aBtn.Enabled:=bool;
  end;
Ответить с цитированием
  #12  
Старый 02.06.2011, 16:06
Barsdg Barsdg вне форума
Прохожий
 
Регистрация: 02.06.2011
Сообщения: 24
Репутация: 10
По умолчанию

Наконец-то получилось, ВСЕМ огромное СПАСИБО!!!
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter