![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Помогите пожалуйста.
Есть 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;Я предпологаю, что у меня не верно: 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;А так: выполняется результат 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
|
|||
|
|||
|
Код:
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
|
|||
|
|||
|
гы, сколько лет кодю, но вот так только недавно начал делать:
Код:
TEdit(Form1.Components[i]).Enabled := not (TEdit(Form1.Components[i]).Text <> ''); |
|
#4
|
|||
|
|||
|
Цитата:
|
|
#5
|
|||
|
|||
|
Цитата:
А в общем по Вашему примеру результат такой же как и у предыдущих вариантов Последний раз редактировалось Barsdg, 02.06.2011 в 14:22. |
|
#6
|
|||
|
|||
|
Определенный это какой?
|
|
#7
|
|||
|
|||
|
Цитата:
Есть TPageControl, на нем динамически созданы вкладки (количество может быть разное), на вкладках панели, на них TEdit'ы Также, на форме динамически создаются TButton равное по количеству созданных вкладок. Последний раз редактировалось Barsdg, 02.06.2011 в 14:20. |
|
#8
|
|||
|
|||
|
Что-то я тормазнул))
Код:
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
|
||||
|
||||
|
В общем вот так проводится тест активной вкладки по нужному вам критерию:
Код:
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; |
|
#10
|
||||
|
||||
|
Собственно мой код почти повторяет код Janom (забыл страничку обновить)
|
|
#11
|
|||
|
|||
|
Цитата:
Код:
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
|
|||
|
|||
|
Наконец-то получилось, ВСЕМ огромное СПАСИБО!!!
![]() |