Главная страница
    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.47 MB
Время: 0.061 c
1-1101545019
alo
2004-11-27 11:43
2004.12.12
можно получить элемент set а по строке?


14-1101040640
Knight
2004-11-21 15:37
2004.12.12
Кто встречал изображение тигра из Форда Бойард?


14-1100965079
Cerberus
2004-11-20 18:37
2004.12.12
О ценити дизайн


1-1101477916
Pentium133
2004-11-26 17:05
2004.12.12
Сопирование Canvas ов


8-1094583160
bulanov
2004-09-07 22:52
2004.12.12
Как скопировать часть рисунка





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский