Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как опросить не существующие контролы? [D7, XP]


Страницы:   1 2 3 4

vodvorezlaya ©   (2006-09-18 12:07:00) 

Доброго времени суток.

Создал я допустим несколько контролов во время работы программы,
TEdit'ы и TComboBox'ы как их опрашивать если они ещё не существуют?


vodvorezlaya   (2006-09-18 16:22:00) [41]

Вот конструктор:

constructor TObjectList.Create(AOwnsObjects: Boolean); overload;
begin
 inherited Create;
 FOwnsObjects := AOwnsObjects;
end;
constructor TObjectList.Create; overload;
begin
 inherited Create;
 FOwnsObjects := True;
end;

Хочешь nil, хочешь false а можешь и true;


Ega23   (2006-09-18 15:59:00) [42]


> хм, а что пока объект не существует указатель на него не
> может иметь какого-либо значения?


Может. Бесспорно. Вот только куда?


Barloggg   (2006-09-18 15:52:00) [43]

хм, а что пока объект не существует указатель на него не может иметь какого-либо значения?

обычно если я создаю массив объектов я сначала весь его заполняю значением nil а потом по мере создания объектов этих самых Nll становится все меньше...

вот и все.
если экземпляр данного объекта=nil то он еще определенно не существует... :)


Palladin   (2006-09-18 15:36:00) [44]

только вот после FreeAndNil элементы опять не будут существовать :)


Palladin   (2006-09-18 15:35:00) [45]

хм, вся ветка говорит, что сразу понял... значит действительно еще не все потеряно...

почти, правильно

MyList: TObjectList;

implementation

...............

MyList:=TObjectList.Create;
try
 MyList.Add(TEdit.Create(nil));
 MyList.Add(TComboBox.Create(nil));
finally
 FreeAndNil(MyList);
End;


vodvorezlaya   (2006-09-18 15:21:00) [46]


> Anatoly Podgoretsky ©

Понял, не дурак.


var

MyList: TObjectList;

implementation

...............

try

  MyList:=TObjectList.Create;

  MyList.Add(TEdit.Create(nil));

  MyList.Add(TComboBox.Create(nil));

finally

  FreeAndNil(MyList);


Исправьте если не правильно


Palladin   (2006-09-18 15:00:00) [47]

TObjectList.Add


Anatoly Podgoretsky   (2006-09-18 14:54:00) [48]

TObjectList


vodvorezlaya   (2006-09-18 14:49:00) [49]


> Так и сделать. Что такое
> var
>   edit:TEdit?
> Что такое в данном случае edit?

Ну ты обьявил edit как указатель на память для хранения данных класа TEdit.

А я не знаю сколько у меня будет Edit'ов.


Ega23   (2006-09-18 14:42:00) [50]


> Но как это сделать без описывания компонентов(без Var)?


Так и сделать. Что такое
var
  edit:TEdit?
Что такое в данном случае edit?


vodvorezlaya   (2006-09-18 14:37:00) [51]


> Ему неспонятно КАК обращаться к динамически созданным объектам,
>  НЕ ЗНАЯ ИХ ИМЕНА.

Мда.
Нет, я понимаю что такое ObjectList и как.
Это всё хорошо и полезно.

Но как это сделать без описывания компонентов(без Var)?


Ega23   (2006-09-18 14:15:00) [52]


> Разве форма сама не уничтожает объекты?


А это смотря как ты их создаёшь. Если в конструкторе Owner укажешь - то уничтожит. А если от nil создашь - то нет.
Дело в том, что в ObjectList кроме контролов ты ещё какие-то свои классы хранить можешь. А вот их уже сам уничтожить должен.


Dmitrij_K   (2006-09-18 14:04:00) [53]


> ИМХО, TObjectList предпочтительнее, чем TList. Он ещё и
> сам destructor объектов вызывать будет при очистке. А с
> Tlist тебе это самому делать придётся, там Clear только
> список указателей очистит, а destuctor объектов не вызовет.
> ..

Разве форма сама не уничтожает объекты?


Ega23   (2006-09-18 13:48:00) [54]


> MsGuns ©   (18.09.06 13:01) [10]


ИМХО, TObjectList предпочтительнее, чем TList. Он ещё и сам destructor объектов вызывать будет при очистке. А с Tlist тебе это самому делать придётся, там Clear только список указателей очистит, а destuctor объектов не вызовет...


MsGuns   (2006-09-18 13:01:00) [55]

Ему неспонятно КАК обращаться к динамически созданным объектам, НЕ ЗНАЯ ИХ ИМЕНА.

Очень просто.

type
 TForm1 = Class(TForm)
  ...
 Private
  ControlList: TList;
  ...

procedure TForm1.Create(Sender: TObject);
begin
 ...
 ControlList := TList.Create;
end;

procedure TForm1.Close(Sender: TObject);
begin
 ...
 ControlList.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 ed: TEdit;
 cmb: TComboBox;
begin
 // Создание контролов
 ed := TEdit.Create(Self);
 ed.Top := ..
 ed: Left := ..
 ed.Parent : = Self;
 ControlList.Add(ed);
 cmb := TComboBox.Create(Self);
 cmb.Top := ..
 cmb: Left := ..
 cmb.Parent : = Self;
 cmb.Items.AddItems(...);  
 ControlList.Add(cmb);
 ...
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 i: integer;
 se,sb: string;
begin
 // Опрос контролов
 for i := ControlList.Count-1 do
   begin
    if TControl(ControlList[i]).ClassType=TEdit then
       se := se+TEdit(ControlList[i]).Text+', ';
    if TControl(ControlList[i]).ClassType=TComboBox then
       sb := sb+TComboBox(ControlList[i]).Text+', ';
   end;          
end;


Palladin   (2006-09-18 13:01:00) [56]

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

создавай и назначай имена, обращаясь потом через FindComponent для владельца, либо как в [8]...


Ega23   (2006-09-18 12:56:00) [57]


> Да я var сделать не могу, потому что я не знаю сколько компонентов
> понадобится 1 или 100.


А зачем тебе var?
Есть TObjectList, его и используй...


vodvorezlaya   (2006-09-18 12:49:00) [58]


> чего еще непонятно?

Да я var сделать не могу, потому что я не знаю сколько компонентов понадобится 1 или 100.

А создавать их надо как рабочие копии, только не во время разработки а во время работы программы.


Palladin   (2006-09-18 12:40:00) [59]

Var
Edit:TEdit;

Edit:=TEdit.Create(Application);
Edit.Text:='опрос наоборот';

чего еще непонятно?


vodvorezlaya   (2006-09-18 12:35:00) [60]


> Если ты их создал, значит они существуют.
> Если они не существуют, значит ты их не создал.

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


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо