Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.04 c
2-1159342059
AdminSKBZ
2006-09-27 11:27
2006.10.15
MDI - сохранение и востановления


2-1159385485
redlord
2006-09-27 23:31
2006.10.15
объекты в листбоксе


15-1158740484
Layner
2006-09-20 12:21
2006.10.15
Должны ли банки после погашения кредита выдавать справки о его


3-1155194553
DancerMan
2006-08-10 11:22
2006.10.15
FB и пароли доступа к базам


2-1159273579
Alex_C
2006-09-26 16:26
2006.10.15
Как получить canvas элемента?





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