Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.061 c