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

Вниз

Как опросить не существующие контролы?   Найти похожие ветки 

 
vodvorezlaya   (2006-09-18 12:07) [0]

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

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


 
umbra ©   (2006-09-18 12:14) [1]

если не существуют - никак


 
Сергей М. ©   (2006-09-18 12:17) [2]

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


 
Palladin ©   (2006-09-18 12:17) [3]

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


 
Ega23 ©   (2006-09-18 12:18) [4]

Никак.
var
Edit:TEdit;

Это ты всего лишь объявил указатель на объект класса TEdit. Если он (объект) ещё не существует, то как ты можешь его "опросить"? Сразу на Access Violation нарвёшься...


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


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

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


 
Palladin ©   (2006-09-18 12:40) [6]

Var
Edit:TEdit;

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

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


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


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

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

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


 
Ega23 ©   (2006-09-18 12:56) [8]


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


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


 
Palladin ©   (2006-09-18 13:01) [9]

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

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


 
MsGuns ©   (2006-09-18 13:01) [10]

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

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

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;


 
Ega23 ©   (2006-09-18 13:48) [11]


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


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


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


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

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


 
Ega23 ©   (2006-09-18 14:15) [13]


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


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


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


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

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

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


 
Ega23 ©   (2006-09-18 14:42) [15]


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


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


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


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

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

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


 
Anatoly Podgoretsky ©   (2006-09-18 14:54) [17]

TObjectList


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

TObjectList.Add


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


> 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:35) [20]

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

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

MyList: TObjectList;

implementation

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

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


 
Palladin ©   (2006-09-18 15:36) [21]

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


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

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

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

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


 
Ega23 ©   (2006-09-18 15:59) [23]


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


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


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

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

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 16:23) [25]


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


Это ты к чему написал?


 
vodvorezlaya   (2006-09-18 16:26) [26]


> Это ты к чему написал?

Я показаз на что влияет nil


 
Palladin ©   (2006-09-18 16:28) [27]

В какой строчке кода это ты показал?


 
vodvorezlaya   (2006-09-18 16:29) [28]


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

не экземпляр обьекта = nil а его родитель = nil


 
MsGuns ©   (2006-09-18 16:36) [29]

>vodvorezlaya   (18.09.06 16:29) [28]
>не экземпляр обьекта = nil а его родитель = nil

Беспорочное зачатие ?


 
Palladin ©   (2006-09-18 16:39) [30]

theStringList:TStringList;

theStringList:=TStringList.Create

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


 
Barloggg   (2006-09-18 16:56) [31]

шутники блин. :)

ха.
кстати а кто мешает воспользоваться вместо nil методами-затычками?

т.е. все простаивающие указатели объектов ссылаются не на nil а на "объект по умолчанию".

я такое использвал как-то. получилось. правда что именно получилось это уже второй вопрос...


 
MsGuns ©   (2006-09-18 16:57) [32]

>Palladin ©   (18.09.06 16:39) [30]
>к сожалению у theStringList нет никакого родителя, значит сколько его не создавай, существовать он не будет... это ставит под сомнение правильность моего понимания мира...

Во-первых, автор, ИМХО, явно путает владельца а родителя,
Во-вторых, у всего есть начало и конец. В том числе у списков, которые порождаются и уничтожаются самой виндой ;)))


 
Palladin ©   (2006-09-18 17:00) [33]

автор вообще все путает, несет отсебятину и поправляет чужие сообщения...


 
vodvorezlaya   (2006-09-19 08:14) [34]


> автор вообще все путает, несет отсебятину и поправляет чужие
> сообщения...

да уж, без пива не разобраться
:)

> Беспорочное зачатие ?

Что - то по типу

type
 NewClass = class


Ну и не беспорочное:
в род доме "type" зачатое папой "class" вылезло через маму "="

Люди! не курите травы сидя за Delphi!


 
Virgo_Style ©   (2006-09-19 08:33) [35]

зачем трава, если есть Начинающие


 
vodvorezlaya   (2006-09-20 08:08) [36]

Ну хорошо, создал.

А дальше?

У них имена есть?

Как к ним обращаться из программы чтоб все опрашивать?

У меня компонент создавался как шаблон (Panel а на нем ComboBox, и 3 Edit"а).


 
Наиль ©   (2006-09-20 09:23) [37]

Покажи как создал, а мы покажем как обращаться.


 
vodvorezlaya   (2006-09-20 14:49) [38]


> Palladin ©   (18.09.06 15:00) [18]
> TObjectList.Add
>


Компилятор не понимает TObjectList:

var MyList: TObjectList;

[Error] Unit1.pas(15): Undeclared identifier: "TObjectList"

Почему?


 
Наиль ©   (2006-09-20 14:58) [39]

uses Contnrs


 
vodvorezlaya   (2006-09-20 15:30) [40]


> Наиль ©

Создаю:

MyList:=TObjectList.Create;

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

но в моём случае желательно было-бы создавать шаблон компонента,
но не получается его потом сделать Create паскаль его не видит.
Можно и сами компоненты.



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

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

Наверх




Память: 0.57 MB
Время: 0.033 c
15-1158941601
McSimm
2006-09-22 20:13
2006.10.15
Обновлённая документация на FastReport


15-1158945478
Alien1769
2006-09-22 21:17
2006.10.15
SQL


4-1148993366
Grihan
2006-05-30 16:49
2006.10.15
Paint 32bit bitmap as disabled


2-1159115132
J_SABER
2006-09-24 20:25
2006.10.15
Абсолютный путь


15-1158819323
Курдль
2006-09-21 10:15
2006.10.15
Непересекающиеся периоды в БД.