Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как задизэйблить все поля ввода? / 19 сообщений из 19, страница 1 из 1
17.01.2019, 16:37
    #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
17.01.2019, 16:42
    #39761042
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задизэйблить все поля ввода?
SQL-Talker, дизабли не компоненты на контролы
...
Рейтинг: 0 / 0
17.01.2019, 16:46
    #39761045
asviridenkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задизэйблить все поля ввода?
SQL-Talker,

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

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

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

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

Список типов контролов конкретного приложения обычно невелик. Проще в процедуре их явно перечислить.
Это уже додумывание за ТС, который задал вопрос с уровнем расплывчатости, достойным вокзальных гадалок
...
Рейтинг: 0 / 0
18.01.2019, 16:39
    #39761620
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задизэйблить все поля ввода?
Василий 2Это уже додумывание за ТСДумай за дурака (с) :)
...
Рейтинг: 0 / 0
18.01.2019, 16:42
    #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
19.01.2019, 22:40
    #39761925
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задизэйблить все поля ввода?
Valery_BТак ?
Это слишком просто для нашего форума. Нужно две-три страницы жестокого флейма до тех пор, пока вопрошающий не найдет ответ где-нибудь в другом месте :)
...
Рейтинг: 0 / 0
19.01.2019, 23:48
    #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
20.01.2019, 17:58
    #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
20.01.2019, 18:00
    #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
20.01.2019, 18:11
    #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
20.01.2019, 18:21
    #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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как задизэйблить все поля ввода? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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