powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как задизэйблить все поля ввода?
19 сообщений из 19, страница 1 из 1
Как задизэйблить все поля ввода?
    #39761038
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сделать чтобы всем полям ввода на форме выставить Enable := False;

Что-нибудь в духе
Код: pascal
1.
2.
3.
for i := 0 to MyForm.ComponentCount - 1 do
  if ... then
    Components[i].Enable := False;


Что мне неясно - это как понять что текущая компонента это поле для ввода - типов полей ввода уйма в Delphi, а хочется написать нечто универсальное
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761042
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker, дизабли не компоненты на контролы
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761045
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker,

RTTI Enabled
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761051
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напиши универсальную процедуру, которая знает классы используемых контролов.
Сделай для "все контролы" и "конкретный список контролов".
Там же можно предусмотреть и цветовую реакцию.
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761092
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверять наследников TCustomEdit?
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761111
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Проверять наследников TCustomEdit?А если нужно отключить еще и GraphicControl-ы, н-р кнопки ?
А также возможно некот. пункты попап-меню.

Список типов контролов конкретного приложения обычно невелик. Проще в процедуре их явно перечислить.
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761119
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-TalkerКак сделать чтобы всем полям ввода на форме выставить Enable := False; Архитектуру поменять.
Либо все затабулировать, либо расположить их на обертке, которая сама это сделает, типа DxLayoutControl.
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761124
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисАрхитектуру поменять.

Лучше, конечно, поменять, но можно и не напрягать моск, а просто справку по EnableWindow()
почитать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761127
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЛучше, конечно, поменять, но можно и не напрягать моск, а просто справку по EnableWindow() почитать. Тогда моск будет вскипать у юзеров :)
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761130
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисТогда моск будет вскипать у юзеров :)

Юзера аффтару, походу, и так совершенно безразличны.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761592
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoВасилий 2Проверять наследников TCustomEdit?А если нужно отключить еще и GraphicControl-ы, н-р кнопки ?
А также возможно некот. пункты попап-меню.

Список типов контролов конкретного приложения обычно невелик. Проще в процедуре их явно перечислить.
Это уже додумывание за ТС, который задал вопрос с уровнем расплывчатости, достойным вокзальных гадалок
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761620
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Это уже додумывание за ТСДумай за дурака (с) :)
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761622
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-TalkerКак сделать чтобы всем полям ввода на форме выставить Enable := False;

Так ?
Код: pascal
1.
2.
3.
for i:=0 to MyForm.Controls-1 do
  if ... then
    Controls[i].Enabled:=False;
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761925
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BТак ?
Это слишком просто для нашего форума. Нужно две-три страницы жестокого флейма до тех пор, пока вопрошающий не найдет ответ где-нибудь в другом месте :)
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39761936
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure SetControlState(C: TControl; Value: boolean);
var i: integer;
begin
  C.Enabled := Value;
  if C is TWinControl then
    for i := 0 to TWinControl(C).ControlCount-1 do
      SetControlState(TWinControl(C).Controls[i], Value);
end;
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39762107
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
procedure LockCertainItems(Form: TForm; Enabled: Boolean;
  Classes: array of TPersistentClass);
var
  Component: TComponent;
  &Class: TClass;
begin
  for Component in Form do
    for &Class in Classes do
      if Component.ClassType = &Class then
        TWinControl(Component).Enabled := Enabled;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LockCertainItems(Form1, false, [TEdit, TCheckBox]);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  LockCertainItems(Form1, true, [TEdit, TCheckBox]);
end;
...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39762111
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перечитал вопрос, и коменты.

Тогда надо так
Код: pascal
1.
2.
      if Component.ClassType.InheritsFrom(&Class) then
        TWinControl(Component).Enabled := Enabled;



И тогда при указание TCustomEdit будет блокироваться и TEdit

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
procedure LockCertainItems(Form: TForm; Enabled: Boolean;
  Classes: array of TPersistentClass);
var
  Component: TComponent;
  &Class: TClass;
begin
  for Component in Form do
    for &Class in Classes do
      if Component.ClassType.InheritsFrom(&Class) then
        TWinControl(Component).Enabled := Enabled;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LockCertainItems(Form1, false, [TCustomEdit, TCheckBox]);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  LockCertainItems(Form1, true, [TCustomEdit, TCheckBox]);
end;

...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39762115
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И исправим говнокод

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure LockCertainItems(Form: TForm; Enabled: Boolean;
  Classes: array of TPersistentClass; strictly: Boolean = false);
var
  Component: TComponent;
  &Class: TClass;
begin
  for &Class in Classes do
    for Component in Form do
      if (strictly and Component.ClassType.InheritsFrom(&Class)) or
        (Component.ClassType = &Class) then
        TWinControl(Component).Enabled := Enabled;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LockCertainItems(Form1, false, [TCustomEdit, TCheckBox], true);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  LockCertainItems(Form1, true, [TEdit, TCheckBox], true);
end;

...
Рейтинг: 0 / 0
Как задизэйблить все поля ввода?
    #39762118
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот так вообще, будет классно обмазаться фикалиями шоколадом


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
type
  TEventComponent = reference to procedure(Sender: TObject);

procedure EventComponent(Form: TForm; event: TEventComponent;
  Classes: array of TPersistentClass; strictly: Boolean = false);
var
  Component: TComponent;
  &Class: TClass;
begin
  for &Class in Classes do
    for Component in Form do
      if (strictly and Component.ClassType.InheritsFrom(&Class)) or
        (Component.ClassType = &Class) then
        event(TObject(Component));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  EventComponent(Form1,
    procedure(Sender: TObject)
    begin
      TWinControl(Sender).Enabled := false;
    end, [TCustomEdit, TCheckBox], true);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  EventComponent(Form1,
    procedure(Sender: TObject)
    begin
      TWinControl(Sender).Enabled := true;
    end, [TCustomEdit, TCheckBox], true);
end;

...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как задизэйблить все поля ввода?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]