Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Вниз

Изменения свойства Enabled у разных компонентов одним махом?   Найти похожие ветки 

 
Mazer   (2004-11-25 23:33) [0]

Приветствую, уважаемые!

вопрос у меня такой:
есть скажем кнопочки, пункты меню, чекбоксы всякие...
и вот нужно бы поменять скажем свойство Enabled у нескольких из них на false, а потом обратно...
писать по десятку строк не хочется...

можно конечно использовать FindComponent в цикле, я так и делаю иногда, когда компонентов много и они одного типа...

а что тут посоветуете?
есть ли простое, элегантное решение?


 
OneFragLeft ©   (2004-11-25 23:40) [1]

Если позволяет интерфейс программы, то можно все компоненты кинуть на TPanelили другой контейнер. А у него уже Enabled делать false


 
Mazer   (2004-11-26 00:01) [2]

не позволяет, к сожалению...


 
jack128 ©   (2004-11-26 00:04) [3]

Mazer   (25.11.04 23:33)
писать по десятку строк не хочется...

Один раз написал процедуру и пользуйся. Ну или использовать ActionList..


 
OneFragLeft ©   (2004-11-26 00:07) [4]

Можно воспользоваться свойством Tag компонентов. В него записывать имя группы компонентов и потом перебирать все компоненты. Если значение поля Tag равно имени нужной группы, то Enabled делать false. Так должно быть удобно.


 
Игорь Шевченко ©   (2004-11-26 00:27) [5]


> есть ли простое, элегантное решение?


Не знаю, как насчет элегантности, но на скорую руку получилось такое решение:

type
 TForm1 = class(TForm)
   MainMenu1: TMainMenu;
   Edit1: TEdit;
   CheckBox1: TCheckBox;
   Button1: TButton;
   File1: TMenuItem;
   Exit1: TMenuItem;
   Button2: TButton;
   miTest: TMenuItem;
   Button3: TButton;
   procedure Button3Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   procedure ChangeEnabledState (const ComponentNames: array of string;
     Value: Boolean);
 end;

var
 Form1: TForm1;

implementation
uses
 TypInfo;

{$R *.dfm}

procedure TForm1.ChangeEnabledState(const ComponentNames: array of string;
 Value: Boolean);
const
 EnableNames: array[Boolean] of string = ("False", "True");
var
 AComponent: TComponent;
 I: Integer;
begin
 for I:=Low(ComponentNames) to High(ComponentNames) do begin
   AComponent := FindComponent(ComponentNames[I]);
   if Assigned(AComponent) and IsPublishedProp(AComponent, "Enabled") then
     SetEnumProp(AComponent, "Enabled", EnableNames[Value]);
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 ChangeEnabledState(["CheckBox1","Button1", "miTest"], false);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 ChangeEnabledState(["CheckBox1","Button1", "miTest"], true);
end;



 
Mazer   (2004-11-26 00:27) [6]

в принципе такими "ухищрениями" пользовался :)

но все равно, спасибо за советы!


 
АП   (2004-11-26 00:28) [7]

мне здесь на похожий вопрос так ответили, если я не путаю

АП   (09.10.04 23:13)  
У меня на форме есть, к примеру 8 CheckBox и 8 Memo, как работать с ними как с масивом, или чем-то подобным, например я хочу их разом невидимыми сделать, или часть CheckBox отключить, например,4. Каждый разписать CheckBox1.enabled:=false... не хочется. В книжках пытался порыться,  за 15 минут почти ни чего не нашол, Скорей всего это что-то просте, кто знает, ответте.

--------------------------------------------------------------------------------
Defunct ©   (09.10.04 23:16) [1]
Да это проблема..

хотите совет, чем больше думаете над красотой кода, тем выше вероятность, что программа либо не будет написана, либо будет уже никому не нужна.

--------------------------------------------------------------------------------
Defunct ©   (09.10.04 23:19) [2]
> за 15 минут почти ни чего не нашол

за 15 минут можно было написать все необходимые комбинации залочивания CheckBox"ов

Procedure Lock4;
Begin
CheckBox1.Enabled := False;
CheckBox2.Enabled := False;
CheckBox3.Enabled := False;
CheckBox4.Enabled := False;
End;

и т.д.

--------------------------------------------------------------------------------
АП   (09.10.04 23:25) [3]
Для Memo я извернулся. как-то, методом тыка..., но всё равно, что-то не то. Хотелось бы узнать, какому элементу массва какая фигня соответствует
for i:= 5 to 4+kotv[k] do
begin
(controls[i] as TMemo).visible:=true;

with (controls[i] as TMemo) do begin
SelStart:=0;
SelLength:=200;
SelText:=ms[k,i-5];
end;

--------------------------------------------------------------------------------
GuAV ©   (09.10.04 23:27) [4]
как вариант...
procedure EnableControls(const C: array of TControl; Value: Boolean);
var I: Integer;
begin
for I:=Low(C) to High(C) do
  C.Enabled:=Value;
end;

...

EnableControls(CheckBox2, CheckBox4);

--------------------------------------------------------------------------------
GuAV ©   (09.10.04 23:29) [5]
FindChildControl(CheckBox+IntToStr(I)) as TCheckBox

*********

if controls[i] is TCheckBox
with TCheckBox(controls[i]) do
if Name=CheckBox1

--------------------------------------------------------------------------------
olookin ©   (09.10.04 23:30) [6]
А не проще проверять через Controls наличие объекта заданного типа и делать с ним все?


 
Mazer   (2004-11-26 00:29) [8]

Игорь Шевченко
спасибо! попробую!!!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Наверх









Память: 0.59 MB
Время: 0.289 c
1-1101885164
opoloXAI
2004-12-01 10:12
2004.12.12
Как распечатать TStrings в три столбика?


9-1092038968
NikeOLD
2004-08-09 12:09
2004.12.12
OpenGL дисплейные списки


1-1101677694
Bobby Digital
2004-11-29 00:34
2004.12.12
Переслать переменную


3-1100156376
Брат
2004-11-11 09:59
2004.12.12
Проверка существования таблицы


1-1101417695
АП
2004-11-26 00:21
2004.12.12
DirectoryExists





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский