Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.09;
Скачать: CL | DM;

Вниз

Массив объектов   Найти похожие ветки 

 
Grey_g ©   (2003-05-28 07:39) [0]

Вопрос: можно ли создать какой-нибудь массив объектов, чтобы в дальнейшем можно было присвоить какое-то свойство всем и сразу(например Label"ов штук так 100)?


 
Anatoly Podgoretsky ©   (2003-05-28 07:50) [1]

Можно, а всем и сразу не возможно в принципе


 
Forester   (2003-05-28 08:08) [2]

Можно создать наследника TObjectList с определенным свойством, в методе записи которого прописать код установки свойств элементов списка. Тогда присвоение значения свойствам 100 TLabel сведется к одной строке.

TLabelList=class(TObjectList)
...
private
procedure SetCaption(const Value:TCaption);
public
property ItemsCaption:TCaption write SetCaption;
end;

...
implementation
...

procedure TLabelList.SetCaption(const Value:TCaption);
var
i:integer;
begin
for i:=0 to Count-1 do
if Items[i] is TLabel then
(Items[i] as TLabel).Caption:=Value;
end;

...


 
Palladin ©   (2003-05-28 08:37) [3]


> Grey_g © (28.05.03 07:39)

ты когданибудь пробовал из одного пистолета залить 105 баков?


 
Skier ©   (2003-05-28 08:59) [4]

>Forester (28.05.03 08:08)

Лучше так :

TLabelList = class(TObjectList)
private
procedure SetCaption(const Value:TCaption);
protected
function GetItem(Index: Integer): TLabel;
procedure SetItem(Index: Integer; AObject: TLabel);
public
property Items[Index: Integer]: TLabel read GetItem write SetItem; default;
property ItemsCaption:TCaption write SetCaption;
end; //TLabelList


 
Skier ©   (2003-05-28 09:00) [5]

+
public
function Add(AObject: TLabel): Integer;


 
Levan Varshanidze   (2003-05-28 09:28) [6]

ИЗ книги Фаронова "Учебник по Делфи 4"
(может: точно не помню: но смысд понятеен)
"Замечательгой особенностью TsringList являктсф то, что он в каждом элементе хранит string и Tobject"

пример
procedure TForm1.Button1Click(Sender: TObject);
var ll:tstringlist;
i:integer;
begin
ll:=tstringlist.Create();
ll.AddObject("",label1);
ll.AddObject("",checkbox1);
for i:=0 to ll.Count-1 do
twincontrol(ll.Objects[i]).Visible:=fa;se;
end;


Здесь label1,checkbox1 e.t.c суть какието объекти

a twincontrol(ll.objects[i]) суть приведение Tobject-а к
нужному типу, у которого есть требуемое свойство
(конечно, заранее надо бить уверенным, что приведенгие
ll.jbjectss[i] к типу twincontrol не приведет к исключению

попробуйте, может пригодиться













 
Levan Varshanidze   (2003-05-28 09:33) [7]

Ох уж эти мои злополучные опечатки....
Извините


 
Tano ©   (2003-05-28 18:45) [8]

Самое простое, что можно сделать:
var
aLabels :array[1..100] of TLable; //глобальная переменная
......

//создание - в TForm1.FormCreate()
for i:=1 to 100 do
begin
aLabels[i]:=TLabel.Create(self);
aLabels[i].Parent:=self;
/// другие свойства - по вкусу
end;

//удаление - в TForm1.FormDestroy()
for i:=1 to 100 do
aLabels[i].Free;

Соответственно всегда можно обратиться к любому элементу массива: aLabels[i].свойство



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

Текущий архив: 2003.06.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
1-26542
Михайлов Антон
2003-05-25 14:37
2003.06.09
Сервис


3-26343
OlegID
2003-05-20 11:06
2003.06.09
DBGrid


14-26790
Basic
2003-05-20 00:26
2003.06.09
Что-то трафик тормозит


3-26407
novill
2003-05-21 15:46
2003.06.09
Подскажите, как в runtime создать индекс для таблицы paradox?


3-26393
KIR
2003-05-21 15:32
2003.06.09
Есть ли в IB аналог SELECT TOP 5 * FROM MyTable